打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
linux2.6 下添加自己的内核模块

http://blog.csdn.net/zg_hover/article/details/4097411

2009

 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了。 但这里最好是采用动态分配设备好的方法,让系统自动的

    分配没有使用的设备号。以免和系统产生冲突。

 

 

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何编译一个linux下的驱动模块
linux设备驱动makefile入门解析 (原2013http://blog.csdn.net/shanzhizi/article/details/8626474
ldd3之模块学习总结(页 1) - 文档专区 - 无分类文档 - Linux论坛 - p...
Linux内核模块编译- 高效学习Linux内核——内核模块编译
Android内核模块编译执行
给扫描仪在Linux系统里安个家
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服