Linux内核Makefile如何理解.config?它有 defconfig 文件的解析器吗?它必须为 defconfig 中的每个启用选项生成大量 #define,并且还根据 .config 文件中的指令维护许多已编译或未编译的次要 Makefile。
答案1
该文件的语法.config
与make兼容;例如,像这样的行将CONFIG_CRC16=m
make 变量设置CONFIG_CRC16
为 value m
。它由 make 解析并间接包含在 toplevel 中Makefile
:
Makefile
包含-include include/config/auto.conf
include/config/auto.conf
Makefile
通过递归调用目标上的顶层来构建silentoldconfig
。
文件的条件编译主要是通过使用目标名称来完成的:makefile 包含如下规则
obj-$(CONFIG_CRC16) += crc16.o
因此,目标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/qconf
forxconfig
等);其源代码scripts/kconfig/confdata.c
进行一些非常简单的文本处理。