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

问题描述

我在“电源管理和ACPI选项”子菜单中未选择所有选项,

enter image description here

但是选项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

解决方法

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

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

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

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

CONFIG_PM_SLEEP=n

请注意,这意味着开发人员可以肯定他们一直都希望这样做,因此不会对其进行测试。您将自己寻找并修复因将其关闭而可能导致的错误。