Linux 内核配置选项可以在不出现在 .config 中的情况下处于活动状态吗?

问题描述 投票:0回答:1

在使用 Linux 内核时,我遇到了一些内核配置选项没有明确出现在 .config 文件中的情况。为了进一步调查,我通过添加代码来手动测试一些标志,如果启用了这些标志,这些代码会故意使构建失败,但我没有发现任何此类标志在未出现在 .config 中的情况下处于活动状态的证据。

这是我的问题:

  1. 是否可以通过依赖项或默认值隐式启用 Kconfig 选项,但未在 .config 中显式列出?
  2. 选择指令、自动选择或特定于架构的条件如何影响 .config 中标志的可见性?
  3. 即使相关标志未出现在 .config 中,某些功能是否可以有条件地编译或默认启用?
linux linux-kernel kernel config kconfig
1个回答
0
投票
  1. 是否可以通过依赖项或默认值隐式启用 Kconfig 选项,但未在 .config 中显式列出?

不,.config 将准确列出内核中内置的内容(如果它已正确生成,并且未手动修改)。 KConfig 将解决您的 defconfig 的依赖关系。

传统上,您将使用

*_defconfig
文件配置内核。这是
.config
的压缩表示。它基本上包含了所有非默认配置。当您运行
make <your>_defconfig
时,它将选择列出的所有配置,并对所有其他配置使用默认值。然后您可以使用
make menuconfig
进行手动配置。完成后,使用
make savedefconfig
保存回 defconfig。
defconfig
文件适合版本控制,因为它们比
.config
更轻。一些外部构建框架也允许保存配置片段,但不是标准的。

如果您不确定使用 .config 或 defconfig 是否正确,您可以重新生成正确的配置,并使用

make menuconfig
解析所有默认值并保存。

  1. 选择指令、自动选择或特定于架构的条件如何影响 .config 中标志的可见性?

在 KConfig 选项之间声明依赖关系有多种方式。您可以在

KConfig
文件中找到与您的选项相关的文件:

  • depends on
    :没有依赖就无法启用
  • selects
    :自动选择所述依赖项
  • imply
    :与 select 类似,但可以使用
    =n
  • 覆盖依赖项
  • visible if
    :菜单中显示的条件
  1. 即使相关标志未出现在 .config 中,某些功能是否可以有条件地编译或默认启用?

如1)。 .config 提供处理依赖项后解析的最终值。您还可以检查运行时有效配置(如果启用)(

zcat /proc/config.gz
)。然而,其他机制允许在运行时在内核上添加新配置。最常见的是模块。您可以使用
lsmod
列出已加载的模块。

© www.soinside.com 2019 - 2024. All rights reserved.