Compare dois arquivos de configuração do kernel da perspectiva menuconfig?

13

Eu tenho uma situação em que tenho dois arquivos de configuração do kernel (para a mesma fonte do kernel). Ambos têm uma parte da funcionalidade que eu preciso (por um lado, o USB funciona corretamente, por outro, o segundo I2C).

Eu sei que as diferenças entre os dois arquivos de configuração, da perspectiva do menuconfig, incluem apenas algumas opções selecionadas. (Mas não sei quais)

No entanto, quando os arquivos de configuração são comparados manualmente (fusão entre dois arquivos .config), as diferenças não são simples de identificar. Eu tentei mesclá-los manualmente sem sucesso. Tenho certeza de que acabarei conseguindo, mas acredito que o processo poderá ser muito mais simples se os arquivos forem comparados da maneira que aparecem no menu de configuração.

Isso pode ser alcançado e, em caso afirmativo, como?

TheMeaningfulEngineer
fonte

Respostas:

16

Tente usar a scripts/diffconfigpartir da árvore de fontes do kernel do Linux.

Uso:

diffconfig config-a config-b

Mostra uma lista de linhas removidas, modificadas e adicionadas ao arquivo config-b com relação a config-a.

prin
fonte
6

Há um script na fonte do kernel;

scripts / kconfig / merge_config.sh

Serão necessárias 2 configurações do kernel como argumentos - ele mesclará o 2º em cima do primeiro. Qualquer coisa na 2ª configuração substituirá a primeira configuração - mesmo que seja uma linha como "# CONFIG_ não está definida"

Consulte http://processors.wiki.ti.com/index.php/Quick_start_with_3.14_linux

Abasterfield
fonte
3

Você pode tentar sortos arquivos antes de comparar:

meld <(sort config-a) <(sort config-b)
l0b0
fonte
3

Se os dois arquivos forem gerados por make menuconfig, eles terão as opções na mesma ordem; portanto, um simples diff(via Meld ou qualquer outro frontend que você queira) dará um resultado útil.

Você pode obter algo mais legível se ignorar as linhas de comentário:

diff -I '^#' old.config new.config

Se, por algum motivo, os arquivos não estiverem na mesma ordem, você poderá classificá-los. Isso tem a desvantagem de diferenciar as opções relacionadas. Mais uma vez, remova os comentários. Use commpara retirar as linhas comuns.

comm -3 <(<old.config grep '^[^#]' | sort) <(<new.config grep '^[^#]' | sort)
Gilles 'SO- parar de ser mau'
fonte
1

Use kdiff3para comparar duas configurações.

Se alguém quiser comparar o arquivo .config (configuração atual) com alguma configuração padrão da árvore do kernel, primeiro exporte o defconfig da configuração atual:

make savedefconfig

Isso exportará o arquivo defconfig, que pode ser facilmente comparado a qualquer outro arquivo de configuração padrão.

ChevalierDeBalibari
fonte