您的位置:首页 > 其它

2.6 下添加自己的内核模块

2009-04-21 14:05 162 查看
2.4下编译内核模块,并加载的文章网上一大堆,2.6下却很少。

现在把如何编译内核模块和使用内核模块作一个说明:

编译内核模块需要: 内核源代码

方法1: 放在内核代码外部编译

在你要编译模块源代码的文件夹里建立一个Makefile文件,如下:

obj-m := test_modules.o

如果有多个文件,Makefile文件的内容如下:

obj-m := test_modules.o

test_modules-objs := test_main.o test_line.o

用下面的命令即可编译:

make -C {源码的位置,如:/usr/src/linux} SUBDIRS=$PWD modules

也把这个命令放到一个文件中: domake,每次编译,只需要输入./domake即可。

方法2: 放在内核源代码内一起编译

(用到的时候再记)

遇到的问题及其解决方法:

问题一:

insmod: error inserting './hello.ko': -1 Invalid module format

开始安装的时候遇到这个问题,请教了一个人,才知道是我现在运行的系统的版本和源码的版本不一样。

我的是fc8-2.6-23-42的,而下载的源码是2.6-23的,不是fc的版本。

解决:

我用命令yum install kernel-devel 安装了内核源码,它位于/usr/src/kernel目录下。

然后修改make 命令,把 -C选项后面的路径改为和运行版本相符的源码目录,我的是/usr/src/kernel

./domake 编译顺利通过,然后 sudo /sbin/insmod hello.ko 这次成功了

问题二:

insmod: error inserting 'globalmem.ko': -1 Device or resource busy

网上查了一下,原因可能有几种:中断线被占用,设备号被占用,于是我:

cat /proc/device

在看看我的源码,果然有个设备号,和我的主设备好相同,明显是我的设备号和系统现有设备号冲突了,马上该

22 #define GLOBALMEM_MAJOR 52

把主设备好改成一个没有用的设备号后,就可以insmod了。 但这里最好是采用动态分配设备好的方法,让系统自动的

分配没有使用的设备号。以免和系统产生冲突。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: