【问题标题】:Which approach to use for Kernel CONFIG_?Kernel CONFIG_ 使用哪种方法?
【发布时间】:2017-01-30 22:50:20
【问题描述】:

在 defconfig 文件中,您可以这样设置内核选项:

CONFIG_<optionName>=y
CONFIG_<optionName>=m
CONFIG_<optionName>=n
# CONFIG_<optionName> is not set

我理解前 2 个。

我想了解的是 #3 和 #4 之间的区别,以及何时使用它们 - 特别是考虑到内核源代码可能使用 #ifdef 配置_ { ... } 而有时, #if CONFIG_ { ... }

在我的具体情况下,我想明确地说 optionName 不可用。

谢谢

【问题讨论】:

  • 我已经有一段时间没有研究这个了,但是宏 CONFIG_xxx 的实际定义应该在 autoconf.h 中,这是一个基于您的配置文件生成的头文件。所以CONFIG_xxx is not setCONFIG_xxx=n 应该是等价的。

标签: c linux-kernel


【解决方案1】:

CONFIG_=n 这意味着您正在从您的 defconfig 文件中明确禁用此配置项。因此,在您的 .config 文件中,它会显示为 # CONFIG_ is not set

# CONFIG_ is not set 在这种情况下,您也明确禁用了此配置。所以生成的配置文件(.config)将显示为 # CONFIG_ 未设置

但是,使用这些选项中的任何一个,您都可以禁用配置项;但根据@Alexandre 的评论,似乎“未设置”是正确的方法。

有关 .config 和 defconfig 文件的更多详细信息,您可以参考以下链接:

What exactly does Linux kernel's `make defconfig` do?

【讨论】:

  • 不,禁用选项的正确方法是使用“未设置”。 'n' 不应该被使用(除了 unicore32 和那些从 2011 年开始的版本之外,从不在内核中使用)。
  • @AlexandreBelloni,这似乎是正确的答案,因为我查看了更多配置和更多发行版
  • @AlexandreBelloni 以“CONFIG_FEATURE 未设置”而不是“CONFIG_FEATURE=n”的形式发表评论背后的想法是什么?是否有文档记录?
  • 在 linux 1.0 中,主 Makefile 会包含 .config。如果您有 CONFIG_FEATURE=n,那么 ifdef CONFIG_FEATURE 将为真,这不太方便,因为这是测试功能的最简单方法。
【解决方案2】:

CONFIG_&lt;optionName&gt;=n 无效。这不是指定 Kconfig 选项的方式。 # CONFIG_&lt;optionName&gt; is not set 是您指定未设置选项的方式。

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多