RTC 是一个 Wake Up source,因此可以用它来设置一个时间,每天的那个时间都会自动进行唤醒。
同样,使用这样的原理,可以编写一个 Long run 的测试工具让系统不断关机然后启动,这样可以用来完成 S5 的loop 测试。
具体操作:
1. 进入 Setup 打开 RTC Wake 功能,设置一个唤醒时间,比如:0:5:0
2. 进入系统(UEFI Shell 或者 Windows)之后,重置时间到 0:0:0
3. 关机
之后静静等待,过一会就能唤醒了(RTC 到 0:5:0)。需要特别注意的是:时间不要超过你设定的唤醒时间,比如上面例子中,没有步骤二,结果关机时已经是0:6:0,那么只能等接近24小时才有机会唤醒了;此外,如果你在Win10中手工实验上述动作时发现无法唤醒,很可能的原因是第三步直接使用菜单关机。实际上Win10是做的S4,只有ctrl关机才是真正S5,这里可以从80 Port输出是否为 0005 看出来。
产生这个现象的原因是许多IBV 只在 S5 的SMI相关代码中设置 RTC Wake 相关寄存器,如果按照S4的流程运行就不会跑到其中,因此也无法做到 RTC 唤醒。
EFI_STATUS SxSleepEntryCallBack ( IN EFI_HANDLE DispatchHandle, IN CONST VOID *DispatchContext, IN OUT VOID *CommBuffer, IN OUT UINTN *CommBufferSize )
个人感觉这个应该不是什么 bug ,因为最开始 S4 和 S5 相对独立,哪知道后面 ms 为了更好的用户体验将他们混合在一起—-对于普通用户来说,他们甚至无法得知当前究竟进入的是哪个睡眠状态。
当然,随着时代的发展, S3/S4/S5 即将成为历史,BIOS 工程师会在痛苦中迎接 Connected Standby 的到来,亦如当时 S3/S4 的到来带来的痛苦一样…….
您好:
想請教您文中提到”许多IBV 只在 S5 的SMI相关代码中设置 RTC Wake 相关寄存器”,這個SMI是由ACPI發出的嗎?
如果是的話,當按下關機按鈕或是從開始選單選擇關機後,由ACPI內部的哪個部份產生SMI呢?
謝謝
唔,这个问题我没有仔细研究过。回头我请教一下天杀。
您好:
謝謝您的回覆,我查詢PI spec內 7.8 MM Power Button Dispatch Protocol,想請教這類的
SMI中斷是電源鍵按下就會自動發生,還是需要在port 0xb2寫入一個值來觸發呢?
謝謝
当在 UEFI 环境时,按下之后会发出来 SMI 进行关机;在 OS 中会发出 SCI 交给 OS处理。