自从买了华硕灵耀 X13 (aka Asus Zenbook S 13 OLED) 这台破笔记本之后,我一直被它的休眠问题所折磨,包括但不仅限于:
- 插着电会自动重启,而且是 Reset 那种,Windows 日志里也看不到是怎么挂的;
- 休眠后睡不醒,只能强制重启;
- 关掉休眠功能之后,CPU 跑满,风扇狂转榨干电池。
忍受了大半年之后,我才意识到一切的罪魁祸首都是啥笔微软在推的 S0 Sleep (Modern Standby)。但是这台笔记本的 BIOS 里并没有设置回到 S3 Sleep 的选项,要如何实现呢?
UMAF (Universal AMD Form Browser)
如果你搜索和锐龙的 S3 睡眠相关问题,多半会搜索到让你用 UMAF 这个工具的。这个工具的原理是修改 UEFI Variable 中 AMD_PBS_SETUP
,来打开 S3,同样原理的还有 RU.EFI(http://ruexe.blogspot.com/)。
但是这种方法在这台笔记本上并不可用,修改完了之后重启,Windows 会无法启动,蓝屏报错 ACPI_TABLE_ERROR
,我推测是 UMAF 所用的结构体不能和 6000 系完全兼容,或者单纯不能和这台笔记本兼容,导致修改的位置有错。不过我也不敢用 RU.EFI 一个个去试,所以还是算了吧。
覆写 DSDT Table
尽管 UMAF 这条路走不通,但不代表我们无路可走。影响 Windows 休眠设置的主要是 ACPI Table 的 DSDT 部分,如果我们直接覆写这一部分呢?
虽然 Windows 没有这样的功能,但是玩黑果对这个倒是很熟,黑果的 Bootloader: Clover (虽然现在都是用什么 OpenCore 了) 就提供了这样的功能。
关闭 S0 睡眠
在管理员权限的 CMD 中输入
reg add HKLM\System\CurrentControlSet\Control\Power /v PlatformAoAcOverride /t REG_DWORD /d 0
重启电脑之后,输入
powercfg /a
可以看到 S0 的睡眠状态是不可用的。
提取 DSDT
首先下载这个 iASL Compiler and Windows ACPI tools,解压之后进入这个文件夹,打开 cmd 或者 powershell。
.\acpidump.exe -b -n DSDT -z
.\iasl.exe -d .\dsdt.dat
提出出来文件 dsdt.dat
,并反编译成 dsdt.dsl
。
虽然我看别人的文章里说的要在 Clover 里提取 DSDT,否则会出现无法识别电池的问题,但是我自己都试了一遍,发现提取出来的是一样的。
修改 DSDT
用 notepad 或者其他文本编辑器打开 dsdt.dsl
,只需要修改两处
DefinitionBlock ("", "DSDT", 2, "_ASUS_", "Notebook", 0x0107200A)
这一行最后的数字,要设置的大一点,比如 0x01072010
,这样 Windows 才会加载新的 dsdt。
Name (XS3, Package (0x04)
{
0x03,
Zero,
Zero,
Zero
})
把 XS3 改成 _S3。保存文件并重新编译
iasl.exe dsdt.dsl
编译出来文件 dsdt.aml
安装 Clover
首先要挂载 EFI 分区
diskpart
sel disk 0
sel part 1
ass letter=X
这里的 disk 0
和 part 1
要视情况而定,请用 list disk
和 list part
确定你电脑上具体哪个是 EFI 分区。
从 这里 下载 Clover 的最新版本。
mkdir X:\EFI\CLOVER\ACPI\Windows
copy CLOVERX64.efi X:\EFI\CLOVER
copy dsdt.aml X:\EFI\CLOVER\Windows\
notepad X:\EFI\CLOVER\config.plist
在 config.plist 文件中输入
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Boot</key>
<dict>
<key>Timeout</key>
<integer>-1</integer>
<key>Fast</key>
<false/>
</dict>
<key>GUI</key>
<dict>
<key>Scan</key>
<dict>
<key>Entries</key>
<true/>
<key>Legacy</key>
<false/>
</dict>
</dict>
</dict>
</plist>
重启电脑并进入 BIOS
关闭安全启动与设置启动项
关闭安全启动这个自己看 BIOS 选项,不过要说的一点是,关闭安全启动之后,BitLocker 加密的硬盘将无法自动解密,有使用 BitLocker 的建议提前关闭。
设置启动项即将 CLOVERX64.EFI 添加到启动项中并设置默认启动。
保存设置,重启电脑。重启之后再查看 powercfg /a
,可以发现 S3 睡眠已经是可用的状态了。
一些问题
休眠恢复时蓝屏
AMD 有一个设备,AMD Audio CoProcessor
,看字面意思是音频协处理器,它没有什么用处,但是会导致睡醒的时候蓝屏,所以在设备管理器里禁用这个就好。
无法使用USB键鼠唤醒
是有这个问题,但是没有看到解决方案,就当是小小的遗憾吧,总比电脑天天随机重启好。
你好,请问你这个方法适用于其他牌子的笔记本吗(也是amd 6800u的cpu)?
By zhzt at August 6th, 2024 at 03:26 pm.
@zhzt
理论上是适用的
By yadomin at August 16th, 2024 at 04:07 am.