内核模块编程入门总结(1)

1.出现编译的模块不符合当前模块的问题:
原因:基本都是因为在用gcc编译的时候加入了-I参数指定源码树,但是所指定的版本和当前的内核版本冲突的问题。比如我碰到的是2.4.20-8custom(RH9.0自带的内核代码)的问题,和我们后来编译的2.4.20-8的冲突。
解决:修正../include/linux/version.h 中的UTS_RELEASE宏的值为需要的值就可以了。当然这种方法只限于内核相差不大的情况。

2.模块的编译问题:
情况描述:没有仔细看清楚LDD的代码直接使用module_init()函数,结果造成函数使用不正确。
解决方法:
应该说是描述模块的初始化。
模块必须的两个头文件,<linux/kernel.h>  <linux/module.h>   "kernel.h"主要是用到printk()等函数才包含。
模块的初始化函数定义必须是   int init_module(void){};
对应的退出函数是:void cleanup_module(void){};

如果还有需要再加上 MODULE_LICENSE("GPL");
还有作者信息: MODULE_AUTHOR(n);


3.System.map文件的作用:
保存内核函数符号地址,Everytime you complie a new kernel, the addresses of various symbol names are bound to change.
ps:总结可能有误,待后指出。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值