![acpi_override 适用于主流 5.12 内核,但不适用于规范 5.11 内核(ubuntu 21.04)](https://linux22.com/image/937964/acpi_override%20%E9%80%82%E7%94%A8%E4%BA%8E%E4%B8%BB%E6%B5%81%205.12%20%E5%86%85%E6%A0%B8%EF%BC%8C%E4%BD%86%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%E8%A7%84%E8%8C%83%205.11%20%E5%86%85%E6%A0%B8%EF%BC%88ubuntu%2021.04%EF%BC%89.png)
我已经构建了一个新的 ACPI 表,以在 Lenovo Ideapad Slim 5 上启用 s3 挂起。该说明最终在 /boot 中生成一个名为 acpi_override 的 cpio 存档,并将以下内容修改为/etc/default/grub
GRUB_EARLY_INITRD_LINUX_CUSTOM="acpi_override"
启动主线内核 5.12 时支持 S3,但使用原始内核时不支持 S3。
安全启动已关闭。
当我检查 /boot/grub/grub.cfg 中的三个内核时,我看到
initrd /boot/acpi_override /boot/initrd....
看起来正确。当然,它适用于主线内核。
dmesg | grep ACPI
:
ACPI: DSDT ACPI table found in initrd [kernel/firmware/acpi/dsdt.aml]
其次是
ACPI: Table Upgrade: install [DSDT-LENOVO-CB-01 ]
这些消息在 5.12(工作)内核中是相同的。
我不知道如何进一步调试。问题是在 5.12 中暂停可以工作,但无法恢复(显示器未启动)。我希望在 5.11 中恢复可以工作,但显然,如果 S3 不工作,我根本无法在 5.11 中让它暂停。
更新主线 5.10 内核中的 ACPI 表和从挂起恢复功能。5.11 中引入了一个错误,在使用 s3 时,该错误显然会破坏 AMD 显卡。它可能会在 5.13 中修复。https://gitlab.freedesktop.org/drm/amd/-/issues/1503
S3 在 ubuntu 5.11 内核中无法工作的错误是另外一回事。
更新于 2021 年 10 月在内核 5.13 中,现代挂起功能在 IdeaPad(以前需要启用 S3)和我的 ThinkPad X1 Gen 9 上运行良好。因此,我们不再在 Linux 上使用 S3 挂起功能(Ideapad 上的 Ubuntu,Thinkpad 上的 Fedora)
答案1
我在 IdeaPad 5 14ARE05 上遇到了类似的问题,但我从 Ubuntu 21.04 开始,不知道 5.11 内核是罪魁祸首。我尝试像你一样修补 DSDT 并在启动时覆盖 ACPI 表,但尽管一切似乎都正常,但 S3 并未显示为受支持。
我找到了一个隐藏的 BIOS 菜单,其中有一个选项可以直接启用 S3,但后来我遇到了另一个问题。也许它对你有用,值得一试。以下是我所做的(不确定在 Slim 5 上是否相同):
首先,在常规 BIOS 中,禁用 OneKeyBattery(保存设置),然后关闭机器。
然后,在关机状态下,键入以下 15 个键序列(执行此操作时模式将变得清晰):F4 4 RFV F5 5 TGB F6 6 YH N。
然后直接启动进入 BIOS(通过 F2 键)。在 14ARE05 上,菜单比平时多:调试、信息、配置、主要、高级、安全、电源、启动、AMD PBS、AMD CBS 和退出。我并不总是在第一次尝试时就进入此模式,有时不得不尝试第二次。
高级 > ACPI 和电源似乎很有希望,但我在 AMD PBS 下找到了我想要的东西。该菜单需要几秒钟才能加载,并且有很多选项,它们会滚动到页面底部。底部某处是“S3/现代待机支持”。我将其从“现代待机启用”更改为“S3 启用”。
使用该 BIOS 设置(并且没有 ACPI 覆盖),Ubuntu 显示支持 S3,选择挂起会使笔记本电脑进入睡眠状态,电源指示灯闪烁等,并且唤醒时没有任何问题。但是...它只能工作一次(至少对我来说);第二次挂起时,它会进入睡眠状态,但会立即自行唤醒,甚至不会关机(或者更确切地说会关机但会立即重新启动)。我让它关机的唯一方法是按住电源按钮,之后它会再次正常运行,直到下一个挂起/恢复循环。我仍在寻找修复或解决方法。
答案2
我在 Ubuntu 上为我的 Lenovo Yoga 使用新内核时也遇到了类似的问题。以前覆盖可以正常工作,但新内核不行。它仍然显示找到的覆盖 acpi DSDT 表并报告新值的负载。当你查看
/sys/firmware/acpi/tables
我现在找到了 DSDT1 和 DSDT2 表。旧内核只有一个 DSDT 文件。