黑苹果 RTC0 与仿冒
首先要判定是否需要这个,简单的来讲,如果通过 SSDTTIME 生成了 SSDT-RTCAWAC.aml, 那启用这一个 SSDT 就行了,不需要专门再去仿冒。
这是因为在原始 DSDT 中已经定义了 STA 函数,且其判断条件是看 STAS是否等于 1 ,
在 DSDT 中查找 STAS,可以看到它被定义在 GNVS 域中,大小为 8bit,只有两个Device调用了这个变量。一个是 RTC,另外一个是 AWAC,AWAC则说,如果 STAS 为零,则启用 AWAC,由此可以看到 AWAC 和 RTC 不会同时启用。
而SSDT-RTCAWAC 中,实际上就一句话,让STAS 等于 1,这样启用了 RTC,同时禁用了 AWAC
这是比较简单的情况,那什么时候需要仿冒呢,RTC 的 STA 函数直接给的是返回 0,禁用。
这个时候就需要仿冒了
可以在 SB.PCI0.LPCB 下定义一个新的 RTC,但是取名叫做 RTC0, 然后修改 STA 函数,给它返回值为 1,一直启用。这个时候,原来的 RTC 因为其自身代码中的STA 返回零而被禁用,内部代码不执行。 而 RTC0 因为 STA 返回为 1,从而执行从 RTC 复制过来的代码,代替了 RTC 的功能,仿冒成功。
DefinitionBlock ("", "SSDT", 2, "ACDT", "RTC0", 0)
{
External (_SB_.PCI0.LPCB, DeviceObj)
Scope (_SB.PCI0.LPCB)
{
Device (RTC0)
{
Name (_HID, EisaId ("PNP0B00"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0070,
0x0070,
0x01,
0x08,
)
IRQNoFlags ()
{8}
})
Method (_STA, 0, NotSerialized)
{
If (_OSI ("Darwin"))
{
Return (0x0F)
}
Else
{
Return (0);
}
}
}
}
}
本期关键词 SSDTTime
关注公众号发送关键词获取资源