LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: lmszcm

最简单的一个内核模块 编译不通过???

[复制链接]
发表于 2005-5-13 16:03:02 | 显示全部楼层
你可以看看linux device driver 3rd edition
这本书讲的是2.6内核的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-16 09:18:08 | 显示全部楼层
我下了2.6.5的内核源代码,还用重新编译内核么,我没有编译,解压后把linux-2.6.5目录拷贝到/usr/src下面,更改目录后编译出现了非常多错误,几乎每个/include/linux下文件都有错误,这时为什么
回复 支持 反对

使用道具 举报

发表于 2005-5-22 15:11:26 | 显示全部楼层

hi

我的问题和你差不多 编译过去了
但是加载的时候提示模块版本和内核版本不对
不知道怎么解决阿

我初学
交流经验 加qq:411923432
回复 支持 反对

使用道具 举报

发表于 2005-5-22 15:21:18 | 显示全部楼层
我把我的helloworld.c贴出来给你看看的
#define MODULE
#include <linux/module.h>

int init_module(void)
{
printk("<1> Hello,my girl!");
return 0;
}

void cleanup_module(void)
{
printk("<1> Good bye!");
}

这是2.4内核的格式 我是在2.4下写的 如果2.6就不一样了
回复 支持 反对

使用道具 举报

发表于 2005-5-31 18:50:01 | 显示全部楼层
如果要用printk最好还是放在另一个函数里,这可能会免去
hello.c: In function `init_module':
hello.c:19: warning: implicit declaration of function `printk'

的错误
回复 支持 反对

使用道具 举报

发表于 2005-6-24 09:37:53 | 显示全部楼层

我的Hello World版本控制问题出错,该如何解决呢?

我也是写了一个Hello World模块,编译通过了,可是在加载时出现版本问题。说我编译的是基于2.4.20内核,而系统是用的2.4.20-8,我用的是红帽子9系统,这种问题该如何解决呢?
回复 支持 反对

使用道具 举报

发表于 2005-6-24 10:26:34 | 显示全部楼层
这一般是因为你编译模块的时候使用的头文件不对,如果你不用
-I 指定你的头文件路径的话,那么gcc默认使用  
/usr/include/linux

/usr/include/asm
这里的头文件,module.h 里面包含一个叫 version.h 的东西
里面有
#define UTS_RELEASE "2.4.20"
#define LINUX_VERSION_CODE 132116
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
这样的版本信息,可能和当前内核不符。

解决的办法很明显了,要么用 -I 显示指定头文件路径(推荐)
也可以把 /usr/include/linux  /usr/include/asm 改成符号连接
指向  /usr/srr/'uname -r'/include 下面的 linux 和 asm-i386 目录
(一般是i386而已,看情况)

以上是针对2.4版本的kernel module,对于2.6的,因为其Makefile里面
都是 直接 -C 去使用内核的 module build的工具,所以应该没有这样的问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表