s.p*_*zko 4 linux make configuration linux-kernel
linux内核Makefile如何理解.config?它有 defconfig 文件的解析器吗?它必须为来自 defconfig 的每个启用的选项生成大量 #defines,并且还维护许多次要的 Makefiles,这些文件是否编译,基于 .config 文件中的指令。
.config文件的语法与 make 兼容;例如,像这样的行将CONFIG_CRC16=mmake 变量CONFIG_CRC16设置为 value m。它由 make 解析并间接包含在 toplevel 中Makefile:
Makefile 包含 -include include/config/auto.confinclude/config/auto.conf是通过递归调用目标Makefile上的顶层来构建的silentoldconfig。文件的条件编译主要是通过使用目标名称来完成的:makefiles 包括像这样的规则
obj-$(CONFIG_CRC16) += crc16.o
Run Code Online (Sandbox Code Playgroud)
因此,目标obj-y构建通过配置选项作为内置程序启用的所有对象,并obj-m构建作为模块启用的所有对象。对于更复杂的情况,makefile 中还有条件指令。
对于 C 语言中的条件编译,C 源文件包括include/generated/autoconf.h包含#define CONFIG_CRC16_MODULE 1. 该文件include/config/auto.conf由xxxconfig目标调用的程序生成(scripts/kconfig/conf对于批处理目标,如oldconfig、scripts/kconfig/qconfforxconfig等);它的源代码是scripts/kconfig/confdata.c做一些非常简单的文本处理。