Сравните два файла конфигурации ядра с точки зрения menuconfig?

13

У меня есть ситуация, в которой у меня есть два файла конфигурации ядра (для одного и того же источника ядра). Оба они имеют часть функциональности, которая мне нужна (на одном USB работает правильно, на другом второй I2C).

Я знаю, что различия между этими двумя файлами конфигурации, с точки зрения menuconfig, включают только несколько выбранных опций. (Но не знаю, какие из них)

Однако когда файлы конфигурации сравниваются вручную (между двумя файлами .config), различия не так просто выявить. Я попытался объединить их вручную без успеха. Я уверен, что в конце концов мне это удастся, но считаю, что процесс мог бы быть гораздо более безболезненным, если бы файлы сравнивались так, как они отображаются в menuconfig.

Можно ли этого достичь, и если да, то как?

TheMeaningfulEngineer
источник

Ответы:

16

Попробуйте использовать scripts/diffconfigиз дерева исходников ядра Linux.

Использование:

diffconfig config-a config-b

Показывает список удаленных, измененных и добавленных строк в файл config-b относительно config-a.

Прин
источник
6

В исходном коде ядра есть скрипт;

скрипты / Kconfig / merge_config.sh

В качестве аргументов он будет принимать 2 конфига ядра - он объединит 2-й поверх первого. Все во втором конфиге переопределит первый конфиг - даже если это строка типа "# CONFIG_ not set"

См. Http://processors.wiki.ti.com/index.php/Quick_start_with_3.14_linux

abasterfield
источник
3

Вы можете попробовать sortфайлы перед сравнением:

meld <(sort config-a) <(sort config-b)
l0b0
источник
3

Если два файла сгенерированы make menuconfig, они будут иметь опции в том же порядке, поэтому простой diff(через Meld или любой другой интерфейс, который вам нравится) даст полезный результат.

Вы можете получить что-то более читабельное, если проигнорируете строки комментариев:

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

Если по какой-то причине файлы не в том же порядке, вы можете отсортировать их. У этого есть обратная сторона, заключающаяся в том, что связанные варианты находятся далеко друг от друга. Снова удалите комментарии. Используйте commдля удаления общих линий.

comm -3 <(<old.config grep '^[^#]' | sort) <(<new.config grep '^[^#]' | sort)
Жиль "ТАК - перестань быть злым"
источник
1

Используйте kdiff3для сравнения двух конфигов.

Если кто-то хочет сравнить файл .config (текущая конфигурация) с конфигурацией по умолчанию из дерева ядра, сначала экспортируйте defconfig из текущей конфигурации:

make savedefconfig

Это экспортирует файл defconfig, который можно легко сравнить с любым другим файлом конфигурации по умолчанию.

ChevalierDeBalibari
источник