在为 x86_64 构建 Linux 内核时如何禁用 CONFIG_PM

Posted

技术标签:

【中文标题】在为 x86_64 构建 Linux 内核时如何禁用 CONFIG_PM【英文标题】:How can I disable CONFIG_PM when building Linux kernel for x86_64 【发布时间】:2020-10-23 11:34:10 【问题描述】:

我已取消选择“电源管理和 ACPI 选项”子菜单中的所有选项,

但选项CONFIG_PMCONFIG_PM_SLEEP 仍然启用,

# Power management and ACPI options
#
# CONFIG_SUSPEND is not set
CONFIG_HIBERNATE_CALLBACKS=y
# CONFIG_HIBERNATION is not set
CONFIG_PM_SLEEP=y
CONFIG_PM_SLEEP_SMP=y
# CONFIG_PM_AUTOSLEEP is not set
# CONFIG_PM_WAKELOCKS is not set
CONFIG_PM=y
# CONFIG_PM_DEBUG is not set
CONFIG_PM_CLK=y
CONFIG_PM_GENERIC_DOMAINS=y
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
CONFIG_PM_GENERIC_DOMAINS_OF=y
# CONFIG_ENERGY_MODEL is not set
CONFIG_ARCH_SUPPORTS_ACPI=y
# CONFIG_ACPI is not set
CONFIG_X86_PM_TIMER=y

手动编辑.config 将所有选项更改为“未设置”也不起作用。运行“make”后,这些选项将自动启用。如何禁用CONFIG_PMCONFIG_PM_SLEEP

【问题讨论】:

【参考方案1】:

我在内核源代码的顶层使用了以下内容:

find . -name Kconfig -exec grep -H 'select PM$'  \;

除非你在 arm/mach 上运行,否则它只会找到 kernel/power/Kconfig。仅当您打开 PM_SLEEP 时,才会强制开启 PM。否则,关闭 PM 会关闭所有电源管理。

编辑:注意 PM_SLEEP 有 "def_bool y" 这意味着除非明确设置,否则它将被打开。要关闭它,请将 .config 更改为:

CONFIG_PM_SLEEP=n

请注意,这意味着开发人员非常确定他们一直都希望使用此功能,因此不会在关闭它的情况下测试代码。您将自行查找并修复关闭它可能导致的错误。

【讨论】:

感谢您的回复!但我找不到关闭 PM_SLEEP 的方法。将“CONFIG_PM_SLEEP=y”链接到“#CONFIG_PM_SLEEP 未设置”将不起作用。不知何故,它会自动启用。并且没有选择 PM_SLEEP 的选项,因为$ find . -name Kconfig -exec grep -H 'select PM_SLEEP' \; 返回空结果。 我之前没见过 def_bool。刚刚将其添加到答案中。 啊,def_bool 出了什么问题。但是PM_SLEEP=n 没有用。我知道“#CONFIG_PM_SLEEP 未设置”应该取消设置选项,但不知何故它不起作用。最终我通过在 kernel/power/Kconfig 中将“def_bool y”更改为“def_bool n”来禁用CONFIG_PM 看起来您想更改系统 ACPI PM 默认值。我认为你可以动态插入 SSDT 来达到它。 @TerenceLiu 您是否建议我可以插入 SSDT 以禁用电源管理?实际上,我正在尝试使用 PM 宏来替换“ifdef CONFIG_PM_SLEEP”,并且想知道如果禁用 PM_SLEEP 是否没有编译问题。还是谢谢你!

以上是关于在为 x86_64 构建 Linux 内核时如何禁用 CONFIG_PM的主要内容,如果未能解决你的问题,请参考以下文章

Linux下如何查看版本信息

Centos7升级内核

Linux 内核 内存管理Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )

linux中清理旧内核

如何删除 CentOS 6 更新后产生的多余的内核?

Linux x86_64内核中断初始化