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了。 但这里最好是采用动态分配设备好的方法,让系统自动的
分配没有使用的设备号。以免和系统产生冲突。
现在把如何编译内核模块和使用内核模块作一个说明:
编译内核模块需要: 内核源代码
方法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了。 但这里最好是采用动态分配设备好的方法,让系统自动的
分配没有使用的设备号。以免和系统产生冲突。
相关文章推荐
- 如何将自己的模块添加到Linux 2.6内核的配置系统中
- 向内核添加自己的模块
- 怎样在内核中添加自己的模块
- 向内核添加自己的模块
- 将自己的模块编入2.6内核的方法
- 如何把一个自己写的外部驱动模块编译添加到内核中 来自网络
- linux内核自己添加模块(内核版本:3.0.101)
- 在2.6内核下不编译内核给iptables添加模块
- OpenWRT添加模块(三)内核模块
- 写自己的内核模块——获取一个进程的物理地址
- 一个最简单的Linux 2.6内核驱动模块
- 2.6内核模块的编写框架和编译方法
- Linux下怎么将自己编写的Python模块添加到PYTHONPATH上
- 在NS2中添加自己的应用模块
- Linux内核的Makefile和kconfig解读,如何在内核中添加自己的代码
- 2.6内核编译模块内容和解释
- Linux2.6内核驱动移植(与2.4模块的区别)
- vlc-0.8.6i中添加自己的模块
- 在Linux2.6内核(CentOS)中编译内核模块的一个例子
- Linux 2.6内核配置说明(3----Loadable module support可加载模块支持)