内核模块的编译方法及注意事项
Ubuntu内核(2.6.32)
2.6内核中,模块的编译需要配置过的内核源码;编译、链接后生成的内核模块后缀为.ko;编译过程首先会到内核源码目录下读取顶层的Makefile文件,然后再返回模块源码所在目录。
将上面代码保存成Makefile文件,放置在与hello.c文件同一目录下。执行make命令后就可以得到hello.ko模块文件。
模块的加载和卸载使用insmod和rmmod。
使用 lsmod查看已加载的模块,以上表明加载成功,可以在/proc中查看。
模块的许可证声明
从2.4.10版本内核开始,模块必须通过MODULE_LICENSE宏声明此模块的许可证,否则在加载此模块时,会收到内核被污染"kernel tainted" 的警告。从linux/module.h文件中可以看到,被内核接受的有意义的许可证有 "GPL","GPL v2","GPL and additional rights","Dual BSD/GPL","Dual MPL/GPL","Proprietary"。
在同时支持2.4与2.6内核的设备驱动中,模块可按如下方式声明自己的许可证。
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,10)
MODULE_LICENSE("GPL");
#endif