USB定制新姿势:Windows下定制黑苹果USB接口详细攻略

前言

本文最后更新:2023/3/14

2022/2/10 更新:陆续接到很多同学反馈 USBMap 定制方法完成后,在高于 11.6 以上的系统中 USB 3.0 失效。针对情况黑苹果星球制作提供一个 kext 补丁,链接放在文件准备说明处,支持 9 系,x299、200、300、400、500、600 系主板,如有遗漏的主板,请联系交流群群主。

2022/3/24 更新:补丁已更新,添加了一个上一版本遗漏的设备 id。

2023/3/14 更新:补丁版本更新,添加了一个上一版本遗漏的设备 id,添加了 700 系主板的设备 id。

一年多前写了一篇使用 Hackintool 定制 USB 接口的方法,时过境迁,其中内容虽然现在仍然有效,不过现在出现了更方便的方法,且自 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
  • Hackintool:用以验证定制结果
  • USBToolBox:USB 接口发现及 USBMap.kext 生成工具
  • Windows 10 系统
    • Windows 系统在后面要说的定制过程中相比 macOS 优势实在太明显,因此强烈建议使用 Windows 10 系统
    • USBToolBox 对 Windows 8 和 Windows 7 支持度不佳
  • SSDT-USB(x).aml:这是每套 EFI 都应该有的
  • SSDT-RHUB.aml:某些主板的 ACPI 确定存在问题,需要使用此文件进行修复调整,例如华硕 B460、部分微星 B460 等

其中需要单独说明的是 SSDT-USB(x).aml 文件,OpenCore 使用了大量的 ssdt 以支持黑苹果的各个功能,其中和 USB 息息相关的 EC 设备也是如此,根据你的硬件平台不同,使用的 SSDT 文件也应该不同。这些文件可以从 OpenCore 的发行包中找到,也可以从黑苹果星球整理好的文件中获取:

已有237105次阅读

「注意」

  • 开始定制前,建议拔掉所有 USB 设备,仅保留鼠标键盘(建议插到 USB2.0 接口);
  • 本文提供了两种定制方法,一种生成 USBMap.kext,另一种生成 UTBMap.kext
    • 两种方法的区别:USBMap.kext 使用 macOS 原生类进行定制,定制完成直接使用不需要其他文件
    • UTBMap.kext 使用 USBToolbox 自有类进行控制,使用时必须搭配 USBToolbox.kext 才能正常工作

 

Windows 定制过程

软件使用 Python 编写,并且打包成了单文件,因此部分反病毒软件(例如 Windows Defender)可能报告文件存在风险,无视即可。

已有237105次阅读

最后,生成的 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 定制过程

macOS 的定制过程和 Windows 大致相同,但是这里提供一个不同选项的定制方案。下载的 USBToolBox 存在 Windows 和 macOS 两个压缩包,解压缩 macOS 的包,直接丢到终端运行,界面和设置和上述 Windows 方法一致。

「但是」这里我们尝试使用 USBToolBox 提供的类接管,不再使用苹果原生的类 AppleUSBHostMergeProperties。运行脚本,首先按 C 进入设置界面,做如下更改:

「提示」Bind Companions 可开可不开,因为在 macOS 里这个脚本无法识别 USB2.0 和 3.0 的绑定关系,笔者实测开和不开最终结果都一样。

下一步就是发现端口,和 Windows 操作方法一致:

下一步,设置各个端口的类型,过程和 Windows 方法完全一致:

最后按 K 生文件,你会发现,该方法生成的文件是「UTBMap.kext」而不是 「USBMap.kext」。UTB 笔者猜测应该是 UsbToolBox 的意思。下一步是把文件加入到你的 config.plist 中进行测试。

「注意」

  • 如果选择生成 UTBMap.kext,则还需要搭配 USBToolBox.kext,否则没有作用;
  • 如果使用 USBToolBox.kext,如果你有 SSDT-RHUB.aml 之类会修改 USB 相关 ACPI 的文件,请把它们停用,否则 USB 定制文件不生效;

已有237105次阅读

把文件添加到你的 config.plist 中,重启即可测试是否见效:

笔者实测结果如下:

 

如果你对上述方法结果不满意,笔者之前还写过一篇使用 Hackintool 定制 USB 接口,可参考「使用 Hackintool 定制USB接口」,这里随便再讲下思路:

  • 如果你的 macOS 没有升级到 11.3 ,那还好,打开 XhciPortLimit,加入 USBInjectAll.kext,重启后即可开始定制;
  • 如果 macOS 已经升级到 11.3 及以上,那就需要分别定制 USB2.0 和 USB3.0 接口,这个过程中接口的绑定关系处理比较麻烦;

 

验证定制结果

重启后,运行 Hackintool,切换到 USB 选项卡,然后使用 USB3.0 的 U 盘挨个插入各个端口验证有效性和连接速率,这里还需要一个 USB2.0 的 U 盘(或键盘鼠标)来验证 USB2.0 的有效性。

如果验证完发现有些接口错误或不需要,可以编辑 USBMap.kext,在文件上右键 → 显示包含内容:

进入 Contents,使用 ProperTreePlistEdit 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 使用
  • 以防有的人不仔细看文字,UTBMap.kext 方法笔者列在了 macOS 定制方法部分,Windows 定制笔者使用的是 USBMap.kext 方法

 

尾声

这个新的定制方法整个流程比原来使用 Hackintool 效率高了太多,并且接口类型识别,USB3.0 和 2.0 的绑定关系变得非常容易处理,笔者一次完成,根据其工作原理来看整个流程出错概率非常低,强烈推荐此方法。顺带吐槽一下苹果的单控制器 15 端口的限制,笔者这台机器物理上的接口非常少可以说非常丐了,可是随便一插拔总数就达到了 12 个,难以想象 X99/X299/X570 多控制器多端口的用户要如何取舍。

如有问题,欢迎提出。

 

 

0. 本站所有资源解压密码均为 heipg.cn
1. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
2. 如有无法下载的链接,联系:admin#heipg.cn,或到QQ群进行反馈,我们将及时进行处理。
3. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:admin#heipg.cn,我们将第一时间配合处理!

黑苹果星球 » USB定制新姿势:Windows下定制黑苹果USB接口详细攻略

54 评论

  1. 不错的知识,进来学习一下

  2. 我的type C也识别成3.0,莫非我的主板是开玩笑的?

  3. 生成的应该是UTBMap.kext,不知道为什么好多教程都说生成了USBMap.kext。另外,还需要将USBToolbox.kext一并放入,因为这是驱动3.0的关键

    1. 使用Apple原生Class它生成的就是USBMap.kext,使用UTB接管,那生成的就是UTBMap.kext,后者需要USBToolbox.kext才能正常工作

  4. 微星B460M迫击炮,定制完成之后只有2.0好使。。。。。。定制两次结果一样。

    1. 微星B460M存在USB控制器问题,需要搭配ssdt-rhub.aml使用

      1. 实测,无效。

        1. 问了群管理XIII,他有你同款微星B460M MORTAR,确认是USB控制器问题,你参考一下他的EFI,或者群里直接私聊他。

        2. 我有同款主板,搞不定群里找我

          1. 我已经解决了,在windows设备管理器确定编号,然后手动一个个改的info。

          2. 这个主板的ACPI里有两个RHUB,路径也完全一样,macOS读取有问题,写ACPI的人太懒是问题根源!

          3. 大佬,求助下,同B460m主板,ACPI实在搞不定

  5. 生成UTBMap.kext 不知道为啥

    1. 大佬,求助下,同B460m主板,ACPI实在搞不定

  6. 我定制完后只识别3.0不识别2.0

  7. 求助,按照教程都定制完了,重启以后USB2.0的接口都正常,但是USB3.0的接口都没反应,啥问题?

    1. 再检查一遍流程,确认无误,其次是开头写了有些非intel制造的早期usb3.0控制器无法驱动

    2. 我也是。。。。。

  8. 弄完之后,睡眠秒唤醒呀。。是蓝牙的问题,把usb2.0 hub设为内建了也不行。下层的蓝牙怎么设为内建呀??

    1. 确定好是哪个接口改为Internal就行,台式机秒醒不一定是蓝牙问题,查一下日志

  9. \"但是在这一步无法单独剔除绑定的 2.0 接口,需要修改成品 USBMap.kext,后面验证环节会说明\",我生成的USBMap.kext里面的编号与hackintool对应不起来,不知道删哪个,win下又无法解除绑定,所以我把win下生成的usb.json、settings.json复制到mac下,就可以用win生成的信息配置了。

    1. 忘说了,先要把usb.json里的companion_info全删掉

    2. 赞,办法总比困难多

  10. 求助:升级之前一切正常,昨晚将OC从067升级到069,同时MacOS从11.1升级到11.4,启动到登录界面,键鼠没有响应,在网上看了很多,最大可能就是USB端口,也尝试了USB端口定制更新,依旧没有响应。

    请问能否定位问题并解决,谢谢。

    1. 删除所有注入USB端口相关的SSDT和KEXT,取消XhciPortLimit,建议使用USB接口的键鼠,接入USB2.0的接口,定制的时候留意一下,问题不大

    2. 兄弟解决了吗?
      同样问题,欲哭无泪~

发表回复