本文档说明怎么在内核代码树之外编译模块
`kbuild`是linux内核的编译系统
编译内核模块的条件:
1、有一个已经编译好的内核,要包括编译时候用的头文件和配置文件;
2、开启了内核的模块支持功能;
3、如果没有具备上面两个条件,请使用`make modules_prepare`试试;
准备编译模块所需要的代码文件:
所需文件:mod.c、kbuild、Makefile三个文件
---->文件名:mod.c
点击(此处)折叠或打开
- #include <linux/module.h>
- #include <linux/init.h>
- MODULE_AUTHOR("xishuai");//可选
- MODULE_LICENSE("GPLv2");//linux内核模块都要有这一行,否则一些函数是不能调用成功的
- static int __init mymod_init(void)
- {
- printk(KERN_ALERT "mymod initing");
- return 0;
- }
- static void __exit mymod_exit(void)
- {
- printk(KERN_ALERT "mymod exiting");
- //return 0;
- }
- module_init(mymod_init);//指示加载模块时要执行的函数名
- module_exit(mymod_exit);//指示模块卸载时要执行的函数名
--->文件名:kbuild
点击(此处)折叠或打开
- KDIR ?= /lib/modules/`uname -r`/source
- O ?= /lib/modules/`uname -r`/build
- default:
- $(MAKE) O=$O -C $(KDIR) M=$$PWD
- .PHONY:clean
- clean:
- -rm -f *.o *.mod.* *.symvers *.ko *.order .*
有了这三个文件之后,就可以在自己的的源代码目录执行
make
命令了
然后,第一个linux,最简单的内核模块就生成了
insmod xxx.ko加载模块
lsmod | grep xxx查看内核是否加载成功
rmmod xxx卸载模块
一般情况下,kbuild、Makefile文件的内容都不用改变,只用修改源代码文件即可生成完成特定功能的内核模块
阅读(2489) | 评论(0) | 转发(1) |