修复 RTC 写入问题
修复 RTC 写入问题本节试图教的是如何解决某些机器重启/唤醒时的 RTC(CMOS) 问题。最常见的外观如下图所示:
图片归功于 u/iDrakus
发生这些 CMOS 和安全模式错误的原因是 AppleRTC 写入某些硬件不正确支持的区域,从而导致恐慌和错误。
为了解决这个问题,我们通常使用这些类型的补丁阻止所有 RTC 写入 (打开新窗口)但由于许多原因,它们并不理想,包括破坏 Windows 和 Linux 以及禁用潜在的受支持区域,例如电源管理。
因此,对于 OpenCore,我们有几个选项可供选择:
修补 AppleRTC 从写入特定区域
它们可能会在未来的操作系统更新中中断
最终用户更难打补丁
不处理 EfiBoot 写入 RTC
忽略可写的坏区域
它们可能会在未来的固件更新中中断
最终用户更容易打补丁
防止 EfiBoot 破坏您的系统
前者实际上已经通过DisableRtcChecksum怪癖集成到 OpenCore 中,但具有仅阻塞区域 0x58-0x59 并且仅在内核级别工作的缺点。了解此选项是否最佳的最佳方法,启用它并尝试。如果这不起作用,请禁用它,因为它是一个不必要的补丁。
使用后者,我们能够阻止我们选择的与我们的确切模型相匹配的非常特定的区域。我们能够在内核级和固件辅助休眠支持中做到这一点。然而,这将需要更多的时间和RTCMemoryFixup (打开新窗口).
#找到我们坏的 RTC 区域
对于本指南的其余部分,我们将假设您已经测试了选项 1( DisableRtcChecksum) 并且它不起作用,或者您在 EfiBoot 也写入 RTC 时遇到了问题。首先,我们应该先介绍几个想法:
RTC 将具有从 0 到 255 的区域
这些区域将在十六进制计数系统中,因此实际上将是 0x00-0xFF
为了省略坏区域,我们使用 boot-arg rtcfx_exclude=00-FF
替换00-FF为您的坏区域(或多个区域)
boot-args位于NVRAM -> Add -> 7C436110-AB2A-4BBB-A880-FE41995C9F82config.plist下的提醒
这也需要你有RTCMemoryFixup (打开新窗口)在你的 config.plist 和 EFI/OC/Kexts 文件夹中。
可以有多个坏区
为了找到坏区域,我们需要将搜索分成块
关于拆分块,我们要做的是省略 RTC 区域的块,直到我们缩小到足够精确的位置为止。您可以查看以下有关如何开始的信息:
#1. 测试 RtcMemoryFixup
首先,您需要添加rtcfx_exclude=00-FFboot-args。如果重启后 RTC 错误似乎已解决,这将告诉您 CMOS 错误是否与 RTC 相关
#2. 将 0x00-0xFF 拆分为 2
0x00-0x7F 和 0x80-0xFF
记下修复 RTC 错误的排除范围,然后将更多内容拆分为多个块
例如rtcfx_exclude=00-7F修复了 RTC 错误,所以你将把它分成两半,不要考虑更多rtcfx_exclude=80-FF
测试rtcfx_exclude=00-7F和rtcfx_exclude=80-FF
请注意,您也可能会得到 7F-80 的错误范围,甚至坏区域被分成多个部分(例如 0x00-0x01和0x80-0x81)
你可以用它rtcfx_exclude=00-01,7F-80来解决这个问题
#3.测试哪些区域不好,再缩小
假设我们的坏区在 0x80-0xFF 之内,你接下来将它分成 2 个:
0x80-0xBF 和 0xC0-0xFF
如果你有多个不好的范围
#4. 你会继续这个模式,直到你缩小了坏区域。请注意,您每次都需要重新启动以测试您是否仍然收到 CMOS/安全模式错误
还要注意,最后的坏点通常是一个范围而不是一个单一的点。
IE。rtcfx_exclude=85-86而不是一个奇异值
专业提示:要在 2 个区域之间找到一个值,我建议首先将十六进制转换为十进制,然后运行以下等式:
(x + y) / 2
现在让我们尝试在前面的步骤 1 中使用它:
0x00-0xFF -> 0-255 -> (0 + 255) / 2= 127.5
现在使用 127.5,您将向上和向下取整以获得结束值和起始值:
0-127 -> 0x00-0x7F
128-255 -> 0x80-0xFF
希望这可以帮助更好地了解您是如何从第 1 步中获得我们的价值观的。
#使黑名单更永久
一旦您发现了错误的 RTC 区域,您现在可以最终将其添加到 OpenCore 本身,并允许该区域也被列入固件级别的黑名单。
为此,打开您的 config.plist 并前往该NVRAM -> Add部分。在4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102GUID 下,您需要添加一个名为的新条目rtc-blacklist
接下来,您需要将我们的错误 RTC 区域添加为一个数组,因此rtcfx_exclude=85-86将变为rtc-blacklist | Data | 8586. 这也适用于更长的范围,例如 85-89 等,但是rtc-blacklist您必须包含每个条目(即。<85 86 87 88 89>)。设置好后记得删除 boot-argrtc-blacklist
接下来确保您NVRAM -> Delete还设置为 NVRAM 变量不会被 OpenCore 覆盖,除非明确告知。
完成所有这些后,您应该有类似于以下内容的内容:
没遇到过这个问题,帮顶 技术贴,支持一下 我出问题往往出这自动睡眠的时候。手动睡眠不会,这种要如何测试, 每次cmos重置要等好久才能启动,有没有比较便捷的充值bios方法分享 太专业了,表示看不懂 这么试得重启一整天都不够 完全看不懂 感谢楼主分享~~,MARKBEIYONG 一般笔记本出现这种问题的较多 技术贴,顶一下 这也太麻烦了
本帖最后由 chensulong 于 2023-5-4 09:02 编辑
能不能不要机翻啊,你贴英文原文也好啊,这一翻译完全看不懂了。还是看原帖吧:dortania.github.io/OpenCore-Post-Install/misc/rtc.html
如果找到这个rtc-blacklist的地址添加到NVRAM项内,是不是这个RTCMemoryFixup.kext不用加载了?谢谢 你的机翻看得我触目惊心。
页:
[1]