Como o kernel do Linux faz Makefile entende o arquivo .config?

3

Como o Linux Makefile entende o arquivo .config? Tem um analisador de arquivo defconfig? Ele tem que produzir muitos #defines para cada opção ativada do defconfig e também manter um monte de Makefiles menores que são compilados ou não, baseados em diretivas no arquivo .config.

    
por s.paszko 17.11.2016 / 10:26

1 resposta

3

A sintaxe do arquivo .config é compatível com o make; por exemplo, uma linha como CONFIG_CRC16=m define a variável de criação CONFIG_CRC16 para o valor m . É analisado por make e incluído indiretamente no nível superior Makefile :

  • Makefile contém -include include/config/auto.conf
  • include/config/auto.conf é criado ao chamar recursivamente o nível superior Makefile na silentoldconfig de destino.

A compilação condicional de arquivos é feita principalmente com nomes de alvos: makefiles incluem regras como

obj-$(CONFIG_CRC16) += crc16.o

O destino obj-y , portanto, cria todos os objetos que são habilitados como internos por uma opção de configuração, e obj-m cria todos os objetos que estão habilitados como módulos. Há também diretivas condicionais nos makefiles para casos mais complexos.

Para compilação condicional na linguagem C, os arquivos de origem C incluem include/generated/autoconf.h , que contém linhas como #define CONFIG_CRC16_MODULE 1 . Este arquivo é gerado a partir de include/config/auto.conf pelos programas invocados pelos xxxconfig targets ( scripts/kconfig/conf para destinos de lote como oldconfig , scripts/kconfig/qconf para xconfig , etc.); o código fonte para isso é scripts/kconfig/confdata.c , que faz um processamento de texto muito simples.

    
por 18.11.2016 / 01:33