前言
三年多前写了一篇使用 Hackintool 定制 USB 接口的方法,随着macOS系统的更新,自 macOS Big Sur 11.3 正式版更新后,OpenCore 的 USB 相关 Quirks(直译是“怪癖”) XhciPortLimit 失效,导致黑苹果无法使用超出 15 个以上的 USB 端口。
究其原因,其实是 macOS 本身限制了每个 USB 控制器有 15 个端口上限,可能是苹果觉得 0x0F(15) 比 0xFF(255) 更加简洁,也可能是因为苹果的自家产品就没有使用超过 15 个 USB 端口的场景。
这里可能有人要说了,“不对呀,我的白果用 USB 扩展坞加起来妥妥超过 15 个呀?”其实使用 USB 扩展坞,单个 USB 端口理论上最大可以扩展出 127 个接口,但无论扩展多少,它们都是共用同一个 USB 通道接入系统,因此可被视为一个 USB 端口。另外,Mac Pro 用户如果通过 PCI 扩展卡增加另一组 USB 接口,这个 PCI 扩展卡上的 USB 控制器也会有它自己的 15 个端口限制。
其实这也是好事,毕竟 XhciPortLimit 强行打开超 15 个端口,就像在超出纸张范围的地方写上内容,总归是有问题的,不应太过依赖这个特性。但是这样一来,定制 USB 就成了黑苹果的必修课,好在最近有大神开发了一款 USB 定制工具,使用非常方便,定制 USB 不再像 Hackintool 那么麻烦。接下来演示如何通过 Windows 定制黑苹果的 USB 端口文件。
「注意」早期非英特尔制造的 USB3.0 控制器可能无法在新一点的 macOS 中正常驱动使用,例如瑞萨电子 UPD720202(0x00151912),此控制器主要见于第三第四代酷睿平台。在确认 EFI 配置文件正确的情况下,此类控制器如果遇到无法驱动的情况那就真的是无法驱动了。
准备工作
- 一个 USB3.0 接口的 U 盘
- 因为 USB3.0 同时向下兼容 USB2.0 接口,因此 Windows 定制只需要一个 USB3.0 的 U 盘
- 如果你的设备有 Type-c 接口,一并准备好 Type-c 接口的 U 盘
- 如果没有 Windows 系统准备在 macOS 定制,还需要 USB2.0 的 U 盘
- OpenCore Configurator
- 根据你的 OpenCore 版本选择 OCC 版本
- 不喜欢 OCC 的话,OCAuxiliaryTools 或 ProperTree 也是极好的
- Hackintool:用以验证定制结果
- USBToolBox:USB 接口发现及 USBMap.kext 生成工具
- Windows 10 系统
- Windows 系统在后面要说的定制过程中相比 macOS 优势实在太明显,因此建议使用 Windows 10 系统
- USBToolBox 对 Windows 8 和 Windows 7 支持度不佳
- USBtoolbox.kext:如果你使用 UTBMap 模式时必须搭配此文件,并且不能使用 SSDT-RHUB
- XHCI-unsupported.kext:十代硬件设备如果定制完后无法使用,则搭配此文件
- USBXHCIFixup.kext:如果定制完你的 USB 3.0 端口不工作,则搭配此文件
- SSDT-USB(x).aml:这是每套 EFI 都应该有的,
- SSDT-RHUB.aml:某些主板的 ACPI 确定存在问题,需要使用此文件进行修复调整,例如华硕 B460、部分微星 B460 等,因为他们的ACPI中存在错误
其中需要单独说明的是 SSDT-USB(x).aml 文件,OpenCore 使用了大量的 ssdt 以支持黑苹果的各个功能,其中和 USB 息息相关的 EC 设备也是如此,根据你的硬件平台不同,使用的 SSDT 文件也应该不同。这些文件可以从 OpenCore 的发行包中找到,也可以从本文下载中整理好的文件中获取:
「注意」
- 开始定制前,建议拔掉所有 USB 设备,仅保留鼠标键盘(建议插到 USB2.0 接口);
- 本文提供了两种定制方法,一种生成 USBMap.kext,另一种生成 UTBMap.kext;
Windows 定制-UTBMap.kext方式(视频教程)
Windows 定制-USBMap.kext方式
软件使用 Python 编写,并且打包成了单文件,因此部分反病毒软件(例如 Windows Defender)可能报告文件存在风险,无视即可。
最后,生成的 USBMap.kext 会出现在软件的目录里,拷贝下来,或使用 Diskgenuis 等软件把它拷贝到 EFI 目录。
如果选择直接回到 macOS,手动把 USBMap.kext 放到 EFI 目录:
- Clover 放到 /EFI/CLOVER/Kexts/Others(或其它数字命名的文件夹如果你知道是起什么作用的话)
- OpenCore 放到 /EFI/OC/Kexts/
最后,OpenCore 还需要把文件添加到 config 中,并启用:
此时可以取消 USBInjectAll.kext 了,XhciPortLimit 在 11.3 以上系统已失效就不要勾选了。
最后重启进入macOS系统。
「注意」
- 如果选择生成 UTBMap.kext,则还需要搭配 USBToolBox.kext,否则没有作用;
- 如果使用 USBToolBox.kext,如果你有 SSDT-RHUB.aml 之类会修改 USB 相关 ACPI 的文件,请把它们停用,否则 USB 定制文件不生效;
macOS系统下操作
重启进入macOS系统后,运行 Hackintool,切换到 USB 选项卡,然后使用 USB3.0 的 U 盘挨个插入各个端口验证有效性和连接速率,这里还需要一个 USB2.0 的 U 盘(或键盘鼠标)来验证 USB2.0 的有效性,包括TypeC3.0及2.0也验证一下
补充内容:连接器一共5种类型
USB2和USB3对应USB2.0及3.0
TypeC加SW对应支持自动切换的端口
TypeC对应不支持自动切换的端口
Internal表示内键
如果验证完发现有些接口错误或不需要,可以编辑 USBMap.kext,在文件上右键 → 显示包含内容:
进入 Contents,使用 ProperTree 或 PlistEdit Pro 打开 Info.plist 文件:
然后根据 Hackintool 的验证结果来决定删除哪个接口:
根据上图所示,Type-c 的 USB2.0 接口(图中 HS04)如果接口总数太多的话可以舍弃,因为 Type-c 几乎没有 USB2.0 的设备。
到这里 USB 新定制方法结束。
常见问题
Q:定制文件没用,USB 接口列表怎么定制都没有变化?
A:常见于 华硕 或 微星 B460 系列主板,如果你使用 USBMap.kext 方法,还需要搭配 SSDT-RHUB.aml 使用;如果你使用 UTBMap.kext 方法,不需要搭配 SSDT-RHUB.aml,且理论上不应该会遇到这类问题。
Q:USB3.0 定制无效?
A:确定以下内容:
- 你的主板是否需要 ACPI 里的重命名补丁,例如 EHC/XHCI(一般老机器需要)
- 是否使用了正确的 SSDT-EC-USB(x).aml 文件
- 主板是否需要 SSDT-RHUB.aml
- 你选择了 USBMap.kext 方法还是 UTBMap.kext 方法?后者还需要搭配 USBToolBox.kext 使用
评论511