我遇到的情况是,我有两个内核配置文件(对于相同的内核源)。它们都具有我需要的部分功能(其中一个,USB 工作正常,另一个,第二个 I2C)。
我知道,从menuconfig的角度来看,这两个配置文件之间的差异仅包括几个选定的选项。 (但是不知道是哪一个)
但是,当手动比较配置文件(两个 .config 文件之间的融合)时,差异并不容易识别。我尝试过手动合并它们,但没有成功。我确信我最终会成功,但相信如果以菜单配置中显示的方式比较文件,这个过程会更加轻松。
这可以实现吗?如果可以,如何实现?
答案1
尝试使用scripts/diffconfig
来自 Linux 内核源代码树。
用法:
diffconfig config-a config-b
显示相对于 config-a 删除、修改和添加到 config-b 文件的行列表。
答案2
内核源码中有一个脚本;
脚本/kconfig/merge_config.sh
它将采用 2 个内核配置作为参数 - 它将把第二个内核配置合并到第一个内核配置之上。第二个配置中的任何内容都会覆盖第一个配置 - 即使它是像“# CONFIG_ is not set”这样的行
看http://processors.wiki.ti.com/index.php/Quick_start_with_3.14_linux
答案3
如果这两个文件是由 生成的make menuconfig
,它们将具有相同顺序的选项,因此一个简单的diff
(通过 Meld 或您喜欢的任何前端)将给出可用的结果。
如果忽略注释行,您可能会得到更具可读性的内容:
diff -I '^#' old.config new.config
如果由于某种原因文件的顺序不同,您可以对它们进行排序。这样做的缺点是相关选项相距甚远。再次,删除评论。使用comm
剥离公共线。
comm -3 <(<old.config grep '^[^#]' | sort) <(<new.config grep '^[^#]' | sort)
答案4
用于kdiff3
比较两个配置。
如果有人想要将 .config(当前配置)文件与内核树中的某些默认配置进行比较,请首先从当前配置导出 defconfig:
make savedefconfig
这将导出 defconfig 文件,可以轻松地将其与任何其他默认配置文件进行比较。