内核模块 静态编译

内核模块的编译分为静态编译和动态编译。
接下来分别介绍两者的编译过程。
本节先讲静态编译。

同目录编译(静态编译)

源码直接添加到对应的设备目录,需修改统一层级的对应文件。

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内核编程