内核模块 静态编译
内核模块的编译分为静态编译和动态编译。
接下来分别介绍两者的编译过程。
本节先讲静态编译。
同目录编译(静态编译)
源码直接添加到对应的设备目录,需修改统一层级的对应文件。
Makefile 中添加驱动文件:
obj-y += <file>.o (直接编译进内核)
obj-$(xxx) += <file>.o (添加配置项)
-y:静态编译,此时配置项中指定条被选中。
-m:动态加载,文件被编译成模块。
--------------------
Kconfig 中添加配置规则:
文件名字格式要与 Makefile 中对应
之后需要在 make menuconfig 中添加配置
--------------------
make:编译内核。
make module:编译驱动(借助内核)。
Makefile 变量解释
obj-m 将代码编译成模块,加载到运行的 linux 中。
obj-y 讲代码静态编译到内核代码中
obj-$(CONFIG_XX) 动态配置是否编译进内核源码中
模块相关文件
Module.symvers 内核编译时,通过宏 EXPORT_SYMBOL 导出的全局符号
modules.builtin
modules.builtin.modinfo
modules.order
Linux内核模块编译、加载、运行机制分析、版本控制、许可声明、内核污染、模块传参、模块签名机制、out-of-tree动态模块编译及Makefile模板编写,尽在《Linux内核编程》,详情点击:王利涛老师个人淘宝店:Linux内核编程