在为 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_PM
、CONFIG_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_PM
和CONFIG_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 内核 内存管理Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )