我有一个新的 Dell Inspiron 5505(AMD Ryzen 4500),果然,S3 睡眠状态被禁用,没有 BIOS 选项来启用它(即使在 BIOS 更新之后)。
经过几周的挫折,我学会了如何(成功地)编辑 DSDT 并通过 GRUB 覆盖它。现在我的笔记本电脑像小猫一样睡觉了!
但是,我不知道如何用 rEFInd 覆盖 DSDT。有人知道怎么做吗?
我的 GRUB 配置(有效):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash mem_sleep_default=deep"
GRUB_EARLY_INITRD_LINUX_CUSTOM="microcode.cpio acpi_override"
此外,在 grub.cfg (作品)中:
linux /boot/vmlinuz-5.4.0-47-generic root=UUID=febd7fdb-b56d-482d-bcdf-5b6d472fa950 ro quiet splash mem_sleep_default=deep
initrd /boot/acpi_override /boot/initrd.img-5.4.0-47-generic
我的(尝试的)rEFInd 配置(不起作用):
menuentry Ubuntu {
icon /EFI/refind/themes/tux-refind-theme/icons/os_ubuntu.png
volume "Ubuntu Linux"
loader /boot/vmlinuz-5.4.0-47-generic
initrd /boot/acpi_override /boot/initrd.img-5.4.0-47-generic
options "ro root=UUID=febd7fdb-b56d-482d-bcdf-5b6d472fa950 quiet splash mem_sleep_default=deep $vt_handoff"
}
- 如果我通过 GRUB 加载,覆盖工作,我可以让计算机进入 S3 睡眠。
- 如果我通过 rEFInd 的自动检测条目正常加载,Linux 会启动,但它不知道覆盖 DSDT,并且我的笔记本电脑不会休眠。
- 如果我尝试通过手动 rEFInd 条目加载,我会收到以下错误:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.4.0-47-generic #51-Ubuntu
Hardware name: Dell Inc. Inspiron 5505/0MJ6CM, BIOS 1.2.1 07/15/2020
Call Trace:
dump_stack+0x6d/0x9a
panic+0x101/0x2e3
mount_block_root+0x23f/0x2e8
mount_root+0x38/0x3a
prepare_namespace+0x13f/0x194
kernel_init_freeable+0x231/0x255
? rest_init+0xb0/0xb0
kernel_init+0xe/0x100
ret_from_fork+0x22/0x40
Kernel Offset: 0x1b800000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
- 我尝试将覆盖和 initrd.img 行分开。Linux 确实可以正常启动,但完全忽略了 ACPI (DSDT) 覆盖:
menuentry Ubuntu {
icon /EFI/refind/themes/tux-refind-theme/icons/os_ubuntu.png
volume "Ubuntu Linux"
loader /boot/vmlinuz-5.4.0-47-generic
initrd /boot/acpi_override
initrd /boot/initrd.img-5.4.0-47-generic
options "root=UUID=febd7fdb-b56d-482d-bcdf-5b6d472fa950 ro quiet splash mem_sleep_default=deep $vt_handoff"
}
- 知道我做错了什么,或者可能没有做错吗?
- 有人通过使用 rEFInd 成功地覆盖了 DSDT 吗?
边注:
出于好奇,我删除了 DSDT 文件中围绕 S3 状态的“If”语句,从而解决了睡眠问题。
由此:
If (LEqual (CNSB, Zero))
{
If (LEqual (DAS3, One))
{
Name (_S3, Package (0x04) // _S3_: S3 System State
{
0x03,
0x03,
Zero,
Zero
})
}
}
对此:
Name (_S3, Package (0x04) // _S3_: S3 System State
{
0x03,
0x03,
Zero,
Zero
})