本文发自 http://www.binss.me/blog/solve-hackintosh-stuck-problem-after-bios-upgrading/,转载请注明出处。

今天吃饱没事刷 NGA,看到一个帖子说 ASUS Z390 最新的 BIOS 优化了对高频内存的支持,也就是说内存能超得更高了,于是我熟练地在官网下载了 BIOS 升级包,在 BIOS 中利用官方工具进行了升级。在 Windows 下一番跑分发现没啥变化,失望地切到装在另外一块硬盘上的黑苹果准备干活时,发现系统卡读条进不去了!

心头瞬间一万头草泥马奔过,差点给自己两巴掌,叫你丫的手贱。一番骂娘后,打开 Google 搜索问题,在耗费了三个小时后终于解决。

原因

升级 BIOS 后,在初始化过程中未设置 STAS 变量,导致 RTC 设备无法初始化,于是系统启动失败:

Device (RTC)
{
    Name (_HID, EisaId ("PNP0B00"))  // _HID: Hardware ID
    Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
    {
        IO (Decode16,
            0x0070,             // Range Minimum
            0x0070,             // Range Maximum
            0x01,               // Alignment
            0x08,               // Length
            )
        IRQNoFlags ()
            {8}
    })
    Method (_STA, 0, NotSerialized)  // _STA: Status
    {
        If ((STAS == One))
        {
            Return (0x0F)
        }
        Else
        {
            Return (Zero)
        }
    }
}

解决

最暴力的做法是将 BIOS 降级,然而 BIOS 一般是不支持降级的,强刷的话一不小心变砖就不好了。Don't do that 。

若你的 BIOS 中有 System Time and Alarm Source 的选项,从 ACPI Time and Alarm Device 切换回 Legacy RTC 即可。

很可惜我的 ASUS Z390i 并没有该选项,只能通过改 SSDT 手动设置 STAS = One :

DefinitionBlock ("", "SSDT", 1, "HACK", "SET-STAS", 0x00000000)
{
    External (STAS, IntObj)    // (from opcode)

    Scope (_SB)
    {
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            STAS = One
        }
    }
}

将以上代码编译后放到 EFI/CLOVER/ACPI/patched 即可。https://www.tonymacx86.com/threads/fix-for-boot-hangs-after-bios-update-acpi-patch.275091/page-6 60 楼的 furter 同学提供了编译好的版本,直接下载使用即可。

2019.07.05

应评论区同学要求,更新编译好的文件:

点我下载

参考

https://www.reddit.com/r/hackintosh/comments/awtcxn/hackintosh_will_not_boot_after_updating_to_asus/

https://www.tonymacx86.com/threads/a-solution-of-asus-new-bios-ver-2012-not-downgrading.273151/

https://www.tonymacx86.com/threads/fix-for-boot-hangs-after-bios-update-acpi-patch.275091/