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

11

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

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

No entanto, quando os arquivos de configuração são comparados manualmente (entre dois arquivos .config), as diferenças não são simples de identificar. Eu tentei mesclar manualmente sem sucesso. Tenho certeza que terei sucesso eventualmente, mas acredito que o processo poderia ser muito mais indolor se os arquivos fossem comparados de uma maneira que aparecessem no menuconfig.

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

    
por TheMeaningfulEngineer 19.05.2014 / 09:54

4 respostas

11

Tente usar o scripts/diffconfig da árvore de origem do kernel do Linux.

Uso:

diffconfig config-a config-b

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

    
por 02.09.2014 / 18:40
4

Existe um script na fonte do kernel;

scripts/kconfig/merge_config.sh

Serão necessárias duas configurações do kernel como argumentos - ele unirá o segundo no topo do primeiro. Qualquer coisa na segunda configuração irá substituir a primeira configuração - mesmo que seja uma linha como "# CONFIG_ não está definido"

Veja o link

    
por 22.11.2015 / 20:03
3

Você pode tentar sort ing os arquivos antes de comparar:

meld <(sort config-a) <(sort config-b)
    
por 19.05.2014 / 11:02
3

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

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

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

Se, por algum motivo, os arquivos não estiverem na mesma ordem, você poderá classificá-los. Isso tem o lado negativo de colocar as opções relacionadas longe. Mais uma vez, remova os comentários. Use comm para remover as linhas comuns.

comm -3 <(<old.config grep '^[^#]' | sort) <(<new.config grep '^[^#]' | sort)
    
por 21.05.2014 / 09:03