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
( , for scripts/kconfig/conf
등과 같은 배치 대상의 경우 ). 해당 소스 코드는 매우 간단한 텍스트 처리를 수행합니다.oldconfig
scripts/kconfig/qconf
xconfig
scripts/kconfig/confdata.c