模块编写
-
入口函数
int __init xxx_func(void) { } module_init(xxx_func);
-
出口函数
void __exit xxx_func(void) { } module_exit(xxx_func);
-
模块信息声明
MODULE_AUTHOR("whuer Xiaojie <1939346428@qq.com>"); MODULE_LICENSE("GPLv2"); MODULE_DESCRIPTION("A simple test module!");
内核模块加载
- 静态加载(把模块编译进内核,通过修改内核进行编译)
-
将编写好的源代码复制到Linux内核源代码的相应目录中
-
在目录的Kconfig文件中增加关于新代码对应项目的编译配置选项
-
在目录的Makefile文件中增加对应的新代码的编译条目
缺点:
是这样编译出来的内核镜像会变大,且得重新编译内核所有源代码,比较麻烦,一般项目打包的时候才需要这样做
- 动态加载
-
$ sudo lsmod
查看内核已经安装的所有模块(内核中已加载的内核模块存放于sys/module
目录下) -
<