解决黑苹果macOS 15使用OpenCore Legacy Patcher(OCLP)后VMware fusion等软件无法启动、报传输 (VMDB) 错误 -14: Pipe connection has been broken等问题
这周将自己的黑苹果台式机由macOS 13 Ventura 升级到了macOS 15 Sequoia,升级后之前的免驱BCM94360CD网卡无法使用了,蓝牙和WiFi均无法打开,上网搜集资料看到B站博主的教程https://www.bilibili.com/video/BV1r5WyeyE3k/,通过使用OCAT工具,依次进行同步OC、按顺序导入内核扩展(kexts)、修改NVRAM等一系列操作,最后有一个步骤为这次事件埋下了伏笔,其中,在修改NVRAM的选项卡中,B站博主在7C条目下的boot-args选项中的后面追加了 ipc_control_port_options=0 amfi=0x80 字段(如下图所示),按照步骤操作完成后,我的博通免驱网卡确实又可以使用了,但是VMware fusion无法启动虚拟机,部分还显示传输 (VMDB) 错误 -14: Pipe connection has been broken错误。通过查阅资料我了解到字段中ipc_control_port_options=0 可以解决某些Electron应用如百度网盘、QQ等APP无法打开的问题。而amfi=0x80字段则是本次无法运行VM虚拟机的主要原因。
IPC 是用于不同进程之间通信的机制,常见的通信方式包括消息队列、共享内存、信号、管道、套接字等。 在操作系统中,IPC 用于允许进程共享数据或协调执行。 ipc_control_port_options=0 是一个配置参数,可能与进程间通信中的控制端口配置相关。 设置为 0 一般表示禁用或采用默认选项。在虚拟化平台中,ipc_control_port_options 可能用于配置虚拟机与主机之间的IPC行为。
boot-args启动参数字段中amfi=0x80是一个完全禁用 AMFI 的位掩码。值 0x80 相当于AMFI_ALLOW_EVERYTHING(解释来源于https://imacos.top/2023/12/27/amfipass-kext-v1-4-0/)AMFI(Apple 移动文件完整性)最初出现在 iOS 上,但在 10.12 Sierra 中迁移到 macOS,可能是在 2012 年引入 GateKeeper 和数字签名代码时。简而言之,它是一种阻止非签名代码执行的技术。AMFI 通常是启用的,但我们已经发现 OCLP 根补丁需要禁用 AMFI 和 SIP 才能应用。为了避免外围设备无法与第三方应用程序配合使用的问题,OCLP 团队开发了AMFIPass.kext扩展,允许在系统必须在禁用 AMFI 和 SIP 的情况下运行时(例如使用 OCLP 或应用 root 补丁时)启用 AMFI 。这修复了权限问题,并且 OCLP 可以应用补丁,就像禁用 AMFI 一样。
由于OCLP打补丁需要关闭SIP(即csr-active-config设为03080000),然而在macOS 12及以上版本就存在一个问题:Electron会在SIP关闭的情况下崩溃,百度网盘、天翼云盘等恰恰就是基于Electron的,通过追加amfi=0x80禁用AMFI又会导致VMware Fusion等软件无法启动,在Broadcom论坛中(点击进入链接,VMware已被Broadcom收购),一位网友提及可以使用AMFIPass扩展以允许在系统必须在禁用 AMFI 和 SIP 的情况下运行时(例如使用 OCLP 或应用 root 补丁时)启用 AMFI 。这修复了权限问题,并且 OCLP 可以应用补丁,就像禁用 AMFI 一样。
目前,在应用 OCLP 根补丁时,可以通过两种不同的方式进行操作:
·带有引导参数amfi=0x80
,但不带 AMFIPass.kext;
·使用 AMFIPass.kext 删除amfi=0x80
并添加-amfipassbeta
启动参数。
-amfipassbeta
AMFIPass.kext 提供引导参数来覆盖内核版本检查,以便无论 macOS 版本如何都加载扩展。这样,AMFIPass 就可以在该扩展尚不支持的 macOS beta 上运行。于是,我将amfi=0x80字段替换为了-amfipassbeta(如下图所示)。
重启计算机后,WiFi和蓝牙仍然可以正常驱动,VMware Fusion中的虚拟机也已经可以正常打开使用了。