Fedora 旨在为内核提供尽可能多的配置选项。 有时用户可能希望更改这些选项以进行测试或功能 Fedora 不支持。 这是关于如何生成内核配置以及如何最好地为自定义内核进行更改的简要指南。
查找配置文件
Fedora 使用文件层次结构生成内核配置。 所有体系结构和配置共有的内核选项列在 baseconfig 下的各个文件中。 baseconfig 下的子目录可以根据架构的需要覆盖设置。 作为一个 example:
$ find baseconfig -name CONFIG_SPI baseconfig/x86/CONFIG_SPI baseconfig/CONFIG_SPI baseconfig/arm/CONFIG_SPI $ cat baseconfig/CONFIG_SPI # CONFIG_SPI is not set $ cat baseconfig/x86/CONFIG_SPI CONFIG_SPI=y $ cat baseconfig/arm/CONFIG_SPI CONFIG_SPI=y
如上所示,CONFIG_SPI 对于所有架构最初都是关闭的,但 x86 和 arm 启用它。
目录 debugconfig 包含在内核调试版本中启用的选项。 文件 config_generation 列出了目录组合和覆盖以进行配置的顺序。 更改其中一个文件中的设置后,您必须运行脚本 build_configs.sh 以将各个文件合并到配置文件中。 这些存在于 kernel-$flavor.config 中。
重建自定义内核时,更改内核配置选项的最简单方法是将它们放入内核本地。 在为所有配置选项构建内核时,此文件会自动合并。 您可以在 kernel-local 中将选项设置为禁用(# CONFIG_FOO 未设置)、启用(CONFIG_FOO=y)或模块化(CONFIG_FOO=M)。
捕获并修复配置文件中的错误
这 Fedora 内核构建过程对配置文件进行一些基本检查以帮助捕获错误。 默认情况下, Fedora 内核要求显式设置所有内核选项。 当启用一个内核选项会暴露另一个需要设置的选项时,会发生一个常见错误。 这会产生与 .newoptions 相关的错误,作为 example:
+ Arch=x86_64 + grep -E '^CONFIG_' + make ARCH=x86_64 listnewconfig + '[' -s .newoptions ']' + cat .newoptions CONFIG_R8188EU + exit 1 error: Bad exit status from /var/tmp/rpm-tmp.6BXufs (%prep) RPM build errors: Bad exit status from /var/tmp/rpm-tmp.6BXufs (%prep)
要修复此错误,请在 kernel-local 中显式设置选项(在本例中为 CONFIG_R8188EU)。
另一个常见的错误是不正确地设置选项。 内核 Kconfig 依赖检查器会默默地更改不是它所期望的配置选项。 这通常发生在一个选项选择另一个选项或具有不满足的依赖项时。 Fedora 尝试进行基本的健全性检查,以确保树中指定的选项与内核配置引擎所期望的匹配。 这可能会产生与不匹配相关的错误:
+ ./check_configs.awk configs/kernel-4.13.0-i686-PAE.config temp-kernel-4.13.0-i686-PAE.config + '[' -s .mismatches ']' + echo 'Error: Mismatches found in configuration files' Error: Mismatches found in configuration files + cat .mismatches Found CONFIG_I2C_DESIGNWARE_CORE=y after generation, had CONFIG_I2C_DESIGNWARE_CORE=m in Fedora tree + exit 1
在这个 example, 这 Fedora 配置指定 CONFIG_I2C_DESIGNWARE_CORE=m,但内核配置引擎将其设置为 CONFIG_I2C_DESIGNWARE_CORE=y。 内核配置引擎最终会被使用,因此解决方案是将选项更改为内核期望的选项(在这种情况下为 CONFIG_I2C_DESIGNWARE_CORE=y),或者进一步调查导致意外配置设置的原因。
根据您的喜好设置内核配置选项后,您可以按照标准内核构建程序来构建您的自定义内核。