Linux 커널 Makefile은 .config를 어떻게 이해합니까?

Linux 커널 Makefile은 .config를 어떻게 이해합니까?

Linux 커널 Makefile은 .config를 어떻게 이해합니까? defconfig 파일에 대한 파서가 있습니까? defconfig의 활성화된 각 옵션에 대해 다수의 #define을 생성해야 하며, .config 파일의 지시문을 기반으로 컴파일되거나 컴파일되지 않은 많은 보조 Makefile도 유지해야 합니다.

답변1

이 파일의 구문은 .configmake와 호환됩니다. 예를 들어 이와 같은 줄은 CONFIG_CRC16=mmake 변수를 CONFIG_CRC16value 로 설정합니다 m. make에 의해 구문 분석되고 toplevel에 간접적으로 포함됩니다 Makefile.

  • Makefile포함하다-include include/config/auto.conf
  • include/config/auto.confMakefile대상의 최상위 수준을 재귀적으로 호출하여 빌드합니다 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등과 같은 배치 대상의 경우 ). 해당 소스 코드는 매우 간단한 텍스트 처리를 수행합니다.oldconfigscripts/kconfig/qconfxconfigscripts/kconfig/confdata.c

관련 정보