Quero automatizar uma compilação do Linux, mas finalmente chego a um ponto em que preciso executar o que parece ser uma etapa muito manual: make menuconfig
. Isso parece sincronizar as configurações entre o sistema operacional e as configurações do kernel?
cp git-tracked-config .config
make defconfig
make menuconfig # <- how to automate/script this?
make V=s
Basicamente, como posso remover a chamada make menuconfig
para um script de construção?
Como um aparte, isso é uma reação a um erro de compilação que parece acontecer quando eu corro sem nunca chamar make menuconfig:
make[1]: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'. Stop.
O que parece existir uma regra ausente em um makefile talvez porque o próprio makefile NÃO exista ou o makefile não tenha sido gerado / modificado para conter essa regra, mas essa é uma pergunta separada.
Poderia haver uma maneira mais inteligente de abordar isso completamente. Existem outras configurações que eu não estou rastreando, mas deveria (por exemplo, oldconfig)?
fonte
make olddefconfig
?Respostas:
O sistema de compilação do kernel Linux fornece muitos destinos de compilação, a melhor maneira de saber sobre isso é provavelmente fazer
make help
:Como jimmij diz nos comentários, as partes interessantes estão nos
oldconfig
alvos relacionados.Pessoalmente, eu recomendaria que você pesquisasse
silentoldconfig
(se nada mudou no.config
arquivo ouolddefconfig
se você atualizou seu.config
arquivo com um novo kernel.fonte
randconfig
me surpreendeu. Presumivelmente usado para testar compilações gerando combinações improváveis?make randconfig
? (no site 'Ask Ubuntu').merge_config.sh
fragmentos de configuraçãoInfelizmente, a substituição do processo não funciona:
por causa de: https://unix.stackexchange.com/a/164109/32558
merge_config.sh
é um front-end simples para omake alldefconfig
destino.Quando a compilação cruzada,
ARCH
deve ser exportada quando você executamerge_config.sh
, por exemplo:O arquivo de saída mesclado pode ser especificado explicitamente com a
KCONFIG_CONFIG
variável de ambiente; caso contrário, apenas substitui.config
:O Buildroot o automatiza com
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES
: /programming/1414968/how-do-i-configure-the-linux-kernel-within-buildrootRelated: /programming/7505164/how-do-you-non-interactively-turn-on-features-in-a-linux-kernel-config-file
fonte
Eu tive esse mesmo problema, pois queria atualizar meu kernel do CentOS e precisava fazer isso em várias máquinas. Suponha que aqui minha nova árvore do kernel do CentOS esteja em /linux-5.1 (estou logado na conta root)
cd /linux-5.1
make menuconfig
e faça suas alterações e salve-as em.config
/linux-5.1/.config
arquivo para seu servidor de desenvolvimento.config
arquivo do servidor de desenvolvimento para/linux-5.1/.config
a nova máquina.Espero que isso ajude alguém na mesma situação.
fonte