Linux

linux核心Makefile如何理解.config?

  • November 18, 2016

linux核心Makefile如何理解.config?它有defconfig文件的解析器嗎?它必須為 defconfig 中的每個啟用選項生成大量#defines,並且還必鬚根據 .config 文件中的指令維護大量編譯或未編譯的次要 Makefile。

.config文件的語法與 make 兼容;例如,像這樣的行將CONFIG_CRC16=mmake 變數CONFIG_CRC16設置為 value m。它由 make 解析並間接包含在頂層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.confxxxconfig目標呼叫的程序生成(scripts/kconfig/conf對於批處理目標,如oldconfigscripts/kconfig/qconfforxconfig等);它的原始碼進行了scripts/kconfig/confdata.c一些非常簡單的文本處理。

引用自:https://unix.stackexchange.com/questions/323944