killwintel 发表于 2025-2-15 07:14

固件升级后内存quirk如何选?晕了

本帖最后由 killwintel 于 2025-2-15 07:15 编辑

目前2种方式都能正常运行(没有进行压力测试),硬件在签名。
看下面说明都有优缺点,晕了。请大神给个意见。

一、两种配置的对比分析
配置 1:SetupVirtualMap=true + RebuildAppleMemoryMap=true + EnableWriteUnprotector=false


[*]优点:

[*]遵循 OpenCore 官方对 Comet Lake 的默认建议(RebuildAppleMemoryMap=true)。
[*]同时修复物理内存映射和虚拟地址映射问题,理论上兼容性更广。
[*]潜在风险:

[*]SetupVirtualMap 和 RebuildAppleMemoryMap 可能在某些主板上功能重叠,导致内存管理冗余或冲突。
[*]若主板固件升级后内存映射方式改变,可能引发不可预见的问题(如睡眠唤醒异常)。

配置 2:SetupVirtualMap=true + RebuildAppleMemoryMap=false + EnableWriteUnprotector=true
[*]优点:

[*]更简洁的内存管理策略:SetupVirtualMap 解决虚拟地址问题,EnableWriteUnprotector 直接修复内存保护。
[*]减少潜在冲突(避免同时启用两个内存映射修复 Quirks)。
[*]潜在风险:

[*]若主板对 RebuildAppleMemoryMap 有强依赖(如内存布局特殊),关闭后可能导致内存分配错误。
[*]EnableWriteUnprotector 可能绕过某些安全机制,长期使用需监控系统稳定性。

二、专业建议1. 推荐配置
[*]优先选择配置 2:

[*]原因:

[*]主板固件升级后强制需要 SetupVirtualMap=true,说明原生内存映射已变化,此时关闭 RebuildAppleMemoryMap 更合理。
[*]EnableWriteUnprotector=true 直接解决内存保护问题,避免复杂的内存映射修复逻辑。
[*]验证方法:

[*]运行内存压力测试(如 memtest86 或长时间视频渲染)。
[*]检查系统日志中是否有 OCABC: Memory pool allocation failure 或 OCABC: Incompatible runtime attribute 错误。
[*]测试睡眠/唤醒循环 10 次以上,观察是否稳定。

2. 回退方案(配置 1)
[*]适用场景:

[*]若配置 2 出现内存分配错误或睡眠唤醒问题。
[*]主板对 RebuildAppleMemoryMap 有强依赖(如服务器级硬件)。
[*]注意事项:

[*]监控系统日志,确保无内存管理冲突。
[*]定期更新 OpenCore 和 BIOS,以获取更好的兼容性。























killwintel 发表于 2025-2-21 21:11

配置对比分析

配置 1

SetupVirtualMap=true + RebuildAppleMemoryMap=true + EnableWriteUnprotector=false

优点:
更符合 macOS 原生内存管理逻辑:
RebuildAppleMemoryMap=true 会尝试修复 macOS 对 UEFI 内存映射的兼容性问题,可能减少因内存布局冲突导致的崩溃。
安全性更高:
EnableWriteUnprotector=false 保留了内存写保护机制,避免非法内存写入(如内核漏洞攻击)。
缺点:
兼容性风险:
某些主板(尤其是较新固件)可能对重建内存映射敏感,导致启动失败或性能问题。
性能开销:
重建内存映射可能增加引导阶段的耗时。
配置 2

SetupVirtualMap=true + RebuildAppleMemoryMap=false + EnableWriteUnprotector=true

优点:
兼容性更好:
禁用内存映射重建(RebuildAppleMemoryMap=false)可能更适应新固件的内存管理逻辑,尤其是微星主板升级后的行为。
稳定性更高:
EnableWriteUnprotector=true 直接绕过内存写保护,可能解决某些固件层级的权限冲突问题。
缺点:
安全性降低:
禁用内存写保护可能增加系统被恶意代码攻击的风险(需结合其他安全措施)。
偏离原生行为:
可能掩盖某些内存管理问题,导致后续调试困难。
选择建议

推荐配置 2

理由:

固件升级后的兼容性适配:
微星主板升级到 2024 年固件后,内存保护机制可能与 OpenCore 默认设置冲突。
EnableWriteUnprotector=true 直接解决写权限问题,避免因内存保护导致的引导中断。
简化调试流程:
RebuildAppleMemoryMap=false 减少了对内存映射的主动干预,可能更匹配新固件的底层行为,降低调试复杂度。
实际稳定性优先:
黑苹果的核心目标是“能用且稳定”,配置 2 已通过你的实际测试验证,可优先选择。
配置 1 的适用场景

如果未来出现以下情况,可尝试切换回配置 1:

系统频繁崩溃或遇到内存相关错误(如 kernel panic)。
需要启用 macOS 的完整安全功能(如 Secure Boot)。
升级 macOS 后出现兼容性问题,需更贴近原生内存管理逻辑。
补充建议

监控系统日志:
使用 Console.app 或终端命令 log show --predicate "eventMessage contains 'AppleACPIPlatform'" 检查内核日志,观察是否有内存相关警告。
测试极端场景:
高负载任务(如视频渲染、虚拟机运行)。
睡眠/唤醒循环测试。
备份 EFI:
保留两种配置的 EFI 文件夹,通过 OpenCore 引导菜单快速切换测试。
总结

推荐使用配置 2,因其更适配新固件的内存保护机制且已验证可用。若后续遇到安全性或兼容性问题,可回退到配置 1 并进一步优化。


越来越晕.谁能给个意见?
配置2使用几天了,没发现什么不妥.继续用.

Cyberspace0000 发表于 2025-2-21 22:10

https://dortania.github.io/docs/latest/Configuration.html
你翻到页面最底下 官方认为能不用就不用
However, as of today, such set is strongly discouraged as some of these quirks are not necessary to be enabled or need additional quirks. For example, DevirtualiseMmio and ProtectUefiServices are often required, while DiscardHibernateMap and ForceExitBootServices are rarely necessary.

Unfortunately for some quirks such as RebuildAppleMemoryMap, EnableWriteUnprotector, ProtectMemoryRegions, SetupVirtualMap, and SyncRuntimePermissions there is no definite approach even on similar systems, so trying all their combinations may be required for optimal setup. Refer to individual quirk descriptions in this document for details.

不过,从今天起,我们强烈不建议使用此类设置,因为其中有些怪异功能并不需要启用,或者需要额外的怪异功能。例如,通常需要 DevirtualiseMmio 和 ProtectUefiServices,而很少需要 DiscardHibernateMap 和 ForceExitBootServices。

遗憾的是,对于某些怪癖,如 RebuildAppleMemoryMap、EnableWriteUnprotector、ProtectMemoryRegions、SetupVirtualMap 和 SyncRuntimePermissions,即使在类似系统上也没有确定的方法,因此可能需要尝试所有组合才能获得最佳设置。有关详情,请参阅本文档中的个别怪癖说明。

killwintel 发表于 2025-2-23 21:51

楼上兄弟,我这个配置必须二选一的,否则卡引导.
* EnableWriteUnprotector: NO
    * 这一选项和RebuildAppleMemoryMap通常会发生冲突,建议在较新的平台上启用后者并禁用此条目。
    * 然而,由于原始设备制造商没有使用最新的EDKII版本,您可能会发现上述组合将导致早期启动失败。这是由于缺少MEMORY_ATTRIBUTE_TABLE,因此我们建议禁用RebuildAppleMemoryMap并启用EnableWriteUnprotector。关于这个的更多信息在故障排除部分中有介绍。
   评:如果没有失败就不用这个quirk ?

* RebuildAppleMemoryMap: YES
    * 生成与macOS兼容的内存映射,可能会在一些笔记本电脑的OEM固件上损坏,所以如果你收到早期启动失败,请禁用此功能。
   评:
如果没有失败,应该开启此功能?



* SetupVirtualMap: NO
    * 修复了SetVirtualAddresses对虚拟地址的调用,但由于Comet Lake的内存保护而中断。华硕,技嘉和AsRock主板无法启动与此有关。
    评: 微星B460M固件V 1.7后也必须开启此quirk ,与Comet Lake 有关!!!


* SyncRuntimePermissions: YES
    * 修正了与MAT表的对齐,并要求使用MAT表启动Windows和Linux,也推荐用于macOS。主要与重建苹果内存映射的用户相关。

评: 主要与RebuildAppleMemoryMap有关,但也没否定与EnableWriteUnprotector可以同时勾选(次要)?

从应用角度看不出区别,真的选择方法也找到了.就是用DEBUG版本,可以从卡引导错误找到真实原因.
太麻烦,不搞了.到此为止.

况且从红字体的细节盲猜,使用
RebuildAppleMemoryMap
的概率大.仔细琢磨了几个滋味,理解作者的意思,决定使用RebuildAppleMemoryMap组合.现正在使用.一直到出现严重故障再说.

Cyberspace0000 发表于 2025-2-26 11:05

AMD的话 RebuildAppleMemoryMap=false + EnableWriteUnprotector=true
Intel的话RebuildAppleMemoryMap=true + EnableWriteUnprotector=false

如果都false能进系统,那就都false

killwintel 发表于 2025-2-26 16:12

Cyberspace0000 发表于 2025-2-26 11:05
AMD的话 RebuildAppleMemoryMap=false + EnableWriteUnprotector=true
Intel的话RebuildAppleMemoryMap=t ...

多谢🙏

二者都false必卡引导(进度条出现但不走,之前更彻底连进度条都不出)

使用中区别不大.昨天使用RebuildAppleMemoryMap=True 时,出现了硬盘(Windows独立硬盘)读写故障.无法判断是不是它的问题.
不管是不是,又切换回来RebuildAppleMemoryMap=false,EnableWriteUnprotector=true,这个还没有出现明显BUG .继续观察.

ydhmq 发表于 2025-2-26 20:32

我的设置如下,配置看签名202那台。
SetupVirtualMap=true + RebuildAppleMemoryMap=true + EnableWriteUnprotector=false+SyncRuntimePermissions=true
现在又加了一个ASUS Thunderbolt 3-TR雷电卡接24MD4kl-b雷电显示器。
页: [1]
查看完整版本: 固件升级后内存quirk如何选?晕了