torry208 发表于 2021-5-10 17:09

手撸式USB定制详解

因为自大苏11.3开始OpenCore原有的USB接口数量限制取消补丁失效,导致原来黑果时使用的插拔法没法继续使用,因此我把以前偷懒使用的USB手撸定制法写下来,分享给各位新手,老鸟就不用看了,这种方法不是我首创的,老鸟其实都会。
说来话长,首先给一个原Hackintool插拔法教程链接:https://blog.daliansky.net/Intel-FB-Patcher-tutorial-and-insertion-pose.html这是坛子里@daliansky (黑果小兵)的教程,我也是于此最初学会了USB接口定制,再次鸣谢。
接下来我分享一个我自己的usb定制kext,以作教程示例参考。
它最早其实也是来源于插拔法生成的文件,之后我在其中整合了USB供电设置。这个供电设置,也就是现在经常在分享出来的EFI里的那个SSDT-EC-USBX中的USBX部分,要直接以我这个kext修改使用的话,就不能用SSDT-EC-USBX.aml,而只能使用SSDT-EC.aml,否则同时在ACPI和kexts里重复定义USB会产生冲突,导致定制失效,当然,还是喜欢SSDT-EC-USBX的玩家也可以把我这个kext里如下图红框中的USB供电定制部分给删掉。
使用的修改工具为PlistEdit Pro,请注意不用用Xcode代替,至少我发现10代以上版本的Xcode上Kext里面的info.plist文件无法正常显示参数,此工具太大没法放附件,传百度云盘也被限了,大家网上搜PlistEdit Pro就可以搜到。

好,接下来进入正题:
一、要定制USB口,首先需要知道机器里的各USB口编号。这个有两种方法,偷懒点的直接使用主板说明书,主板说明书说的不明确的则只能在Linux或windows下通过插拔法查询获得。
1.通过主板说明书获得,首先掏出主板说明书或者去你的主板官网下载用户使用手册的pdf版,找到类似于下图的地方:
图的左侧是主板的背面接口那一侧,也就是你机箱后面板,你可以看着你的后面板,以从上从上到下的顺序和你的主板说明书图例对比,从而确认图中哪些区块说的是USB口(毕竟这种图往往写的不是很直观,比如LAN_U32G1_56指的是这一块下面有编号为05和06的两个USB3.1口以及一个千兆网口)。
然后我们不要受图例写法混乱的困扰,来把它的写法和USB口的编号对应起来,以先从上至下,后从左到右的顺序说明:
KBMS_USB910: USB2.0口,编号09和10。其余是干扰文字,KB是键盘,MS是鼠标,这里说的是这一块四个接口挤在了一起。
U32G2_12: USB3.2口第2代,编号是01和02. 注意这里的干扰,USB3.0语境下USB3.0就是USB3.0;USB3.1语境下USB3.0是USB3.1 Gen1,也就是USB3.1第1代标准, USB3.1是USB3.1 Gen2,也就是USB3.1第2代标准(也就是10Gbit/s速度接口);USB3.2语境下USB3.1叫USB3.2 Gen1,也就是USB3.2第1代标准,USB3.2 Gen2是USB3.2,也就是那个20Gbit/s的速度接口。至于为什么取名这么神经,你去骂制定标准的国际委员会去。
LAN_U32G1:USB3.2口第1代,也就是USB3.1口,编号是05和06,其余不再赘述。
U32G1_34:USB3.2口第1代,编号是03和04.U32G1_78:USB3.2口第1代,编号是07和08.
USB_E12: 凡是数字前面直接带E的可以不理了,叫做USB扩展套件,这里我也搞不懂,反正不用也不影响,
USB1112: USB2.0口,编号是11和12.
把自己用到的接口的编号记下来,留着后面用。
2.Linux下是在终端使用使用以下命令查询,推荐用Ubuntu Live CD做成U盘来查询:lsusb -tvv具体方法略。
3.Windows下去设备管理器里找USB设备,右键看属性查询获得,具体方法略。

二、获取USB口在系统中的IO路径,使用IORegistryExplorer查询,工具我放这了。
事先说明,这个步骤二就算是你条件所限没法查,也没有关系,可以不做,绝大部分情况下它不影响你最后得到正确的结果。
在软件的IOService类型下搜XHC(设置下图编号为a和b的红框位置),搜到如图信息:
在搜到的信息中找到长得像红框编号c和d的那个分支,把红框编号c的路径记下来。比如像图中这样的情况,它的路径要写作:IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/XHC@14/XHC@14000000
能看懂吧?IOService:指的是后面的路径是在IOService类型下存在的,图中的Root在Unix和linux下都写作 / , iMac20,2这样的机型这一行直接跳过不写,之后就是把XHC@14000000所在的一级级路径都写下来而已。
p.s.: 如果你的主板上一个USB3.0口都没有,那就搜EHC,如果连这个也搜不到,那你可能需要合适版本的USBInjectAll.kext来支持修补USB,如果这也不行,那你可能需要其他方法修补USB,介于这与定制USB无关且太过于分散学习的注意力,我这里不讲了。我不喜欢像老外一样像写程序的逻辑判定一样写教程。

三、好了,获得以上两个信息,现在开始修改USBPort.kext驱动。苹果下的很多东西看起来是个文件,其实是文件夹,比如kext文件,右键点击然后选择“显示包内容”,就可以进入这个特殊文件夹的下级,当然,在windows和linux下这个kext直接会被看作文件夹。在它里面的Contents文件夹下找到info.plist配置文件,改的就是它。再次强调要用PlistEdit Pro(win和linux下使用什么软件我暂时不知……,或许可以用ProperTree?),不能用10代及以上版本的Xcode打开,不兼容。
如图,要改的就是从上到下标记为a\b\c\d\…\h这8个红框。
1.修改机型,这里要和你写在OpenCore的config.plist的PlatformInfo或者Clover的SMBIOS里的机型一样,否则这个kext不生效。同时用这个机型修改红框a、h两处。
2.修改IO路径,其实一般来说,绝大部分主板上的USB的IO路径都是和我一样的IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/XHC@14/XHC@14000000如果你在步骤二中查到的是不一样的,那就记下的路径写在红框b处。
3.定制USB接口,这里补点基础知识:
物理上真实存在的USB口并不是系统所认识它的名字,也就是物理上的USB接口编号(简称物理口)并不是MacOS系统里对应的USB接口编号(简称逻辑口)。就像一个人(MacOS)你叫他小明(逻辑口编号),但他身份证(BIOS)上写的可能并不是小明,而是王大明(物理口编号)。其实我叫它物理口也不太对,它只是BIOS上针对这个真实存在的USB口的名称,但我就是想这么叫,要不很多人难以分辨。
像红框d和f那样的一溜HS和SS加数字项目就是逻辑口,HS代表USB2.0逻辑口,SS代表USB3.0逻辑口,一个USB3.0接口要想接2.0设备也认,3.0设备也认的话,就需要给这同一个接口HS逻辑口和SS逻辑口各一个,这样系统就会认为这个接口既支持USB2也支持USB3(也就是USB3口兼容USB2设备)。这也意味着一个USB3的物理口就要耗掉两个逻辑口,而USB2物理口就只需要耗一个HS逻辑口。
因为苹果系统只允许最多15个逻辑口,15÷2=7.5,连8个USB3.0接口都不够分,很多时候没法带动全部的前置后置USB接口,所以必须妥善分配给实际你能用到的USB接口,没分配到逻辑口的物理接口在MacOS下就算是废了。比如我们可以不分配给主板上实际没有接线的前置口(这个如果搞不清就拆机箱板自己看,和主板说明书对应的位置进行比较就知道哪个接线哪个没接线了)。
如果这样逻辑口仍然不够分的话,就需要有所取舍,比如有些USB3.0口我只分配给它一个SS逻辑口,从而导致它只有接USB3.0设备才会认,接USB2.0设备就直接不认了。
逻辑口的名字只要符合图中的格式,其实是可以随便取的,你就当逻辑口编号是一个人的外号就懂了……,不过一般来说不管是Hackintool还是严谨的手撸,我们都要保证逻辑口编号和物理口编号的数字相同,这样以后要修改也好找。
每一个逻辑口都要修改,修改方式见下一段。
4.红框e、g所示就是每个逻辑口里的参数写法了:我特意框了HS口和SS口各一个来展示,其中红框之上的Comment写的是备注,写不写随意,我写是为了好找。UsbConnector是物理口的类型,port是物理口的编号,对比两个红框可以看出:
USB2.0口类型值为0,物理口编号第一位是0,第二位是主板上它的编号(一般可以直接通过查主板说明书获得,当然也可以用插拔法获得,注意,这里写的都是16位进制数,10是A,11是B,12是C,13是D,14是E,15是F,你的物理接口数超过15个了?没关系,反正MacOS系统能给的逻辑口才15个呢,多了也没用),后面6位全部是零,手撸过config.plist里设备属性一项的的人应该不会陌生,也会一瞬间明白它是个什么格式了,不懂就按我说的写就行;
USB3.0口类型值为3,物理口编号第一位是1,第二位是主板上它的编号,后六位全部是0。因为我划红框位置的HS03和SS03的物理口编号第二位都是3,所以这两个逻辑口其实是分配给了同一个物理口,从而实现一个真实的USB3.0接口既可以接USB2.0设备,又可以接USB3.0设备。
5.定义主机总共有多少个物理接口,注意,这里写的是你实际用到的真实物理接口总数,没用到的不要计入。
在红框c处写下你电脑里到底有多少个物理口,这种数字都是16位进制的,第二位数字A就是10进制下数字10. 而第一位数字1代表的是USB3.0口,这里写的是接口总数,不管你实际的是USB2.0口还是USB3.0口,这里都得写USB3.0口,否则你的USB2.0口还好说,USB3.0口直接不能用了。
好了,修改完成后检查,并保证你增删改了以后,这里面写的HS和SS逻辑口数量总共不超过15个,然后此事就算完成了,保存后将整个USBPorts.kext安装到EFI分区的EFI/OC/Kexts文件夹,在config.plist里写上这个kext即可(这一步不至于还要说明了吧,如果要说明,那就是如下图)。
目前这个方法还有唯一一个不完善的地方,就是我的知识还不足以在这种情况下定义USB internal信息(常用几乎不插拔的USB设备应该定义为internal,这样在睡眠唤醒和睡眠期间接收网络信息等方面会有优势),但这不影响你黑苹果的安装和使用,如需定制区分内置USB口,装好黑苹果后,把这个kext再导入Hackintool里,改一下internal信息再次输出kext来安装就可以了。

LEO_DX 发表于 2021-5-10 18:22

太好了学习学习

625845700 发表于 2021-5-10 19:09

这个有点麻烦,参考这个,这个简单,虽然是说的mojave,但思路是一样的

【小白也能十分钟搞定的最简单最快捷的黑苹果10.14mojave USB3.0定制教程-哔哩哔哩】https://b23.tv/qvKo4D

yjb888 发表于 2021-5-10 19:25

请教楼主我的笔记本不放dsdt就认一个EH02,还有EH01和XHC都没有识别出来怎么办???

torry208 发表于 2021-5-10 19:34

625845700 发表于 2021-5-10 19:09 https://www.pcbeta.com/static/image/common/back.gif
这个有点麻烦,参考这个,这个简单,虽然是说的mojave,但思路是一样的

【小白也能十分钟搞定的最简单最 ...

其实我这里面绝大部分篇幅讲的是原理,要实际视频演示操作的话,会比那个视频耗时更短,就看个主板说明书里的一页纸就可以直接去改代码了。我开篇说过这种方法是偷懒的办法,这是有原因的,但是偷懒的办法好归好,最大的问题就是没讲背后的原理的话,很多人看不懂,看了像天书一样,那就玩不下去了。

torry208 发表于 2021-5-10 19:36

yjb888 发表于 2021-5-10 19:25 https://www.pcbeta.com/static/image/common/back.gif
请教楼主我的笔记本不放dsdt就认一个EH02,还有EH01和XHC都没有识别出来怎么办???

笔记本确实会经常出现这类问题,这是另一个话题了,与USB定制无关。要写的话教程篇幅起码是这个的3倍,还是等其他人来解答吧{:5_275:}

wxz8506 发表于 2021-5-10 20:57

看着好难,哈哈!!!

千年老神仙 发表于 2021-5-10 21:09

学习了,。。。。。

Itisabug 发表于 2021-5-10 21:20

hackintool里面USB栏不显示名称是为什么?见附件截图

torry208 发表于 2021-5-10 22:03

Itisabug 发表于 2021-5-10 21:20 https://www.pcbeta.com/static/image/common/back.gif
hackintool里面USB栏不显示名称是为什么?见附件截图

{:5_278:}没遇到过这种情况,一般来说出这种事情我会怀疑是没用USBInjectAll.kext

liuzhanyou3 发表于 2021-5-10 22:36

技术贴,学习中,,。,。。

zhuwenhu14 发表于 2021-5-10 22:41

怎么收藏这篇帖子呢?

小咚咚2015 发表于 2021-5-10 22:58

高手在民间啊。写得很详细

supermage 发表于 2021-5-10 23:01

在UsbConnector里面,设置0就是USB2.0,设置3就是USB3.0,设置255就是internal,设置9就是typec+sw,设置10就是typec,接口9和10用了鼠标键盘,就可以直接在HS9和HS10下面的UsbConnector填写255就可以了,没必要再用hackintool设置内建了,蓝牙也是同理。

iJOE 发表于 2021-5-11 00:43

usbmap比这个容易多了

wgedu 发表于 2021-5-11 05:54

技术贴,有时间了学习

lgq_qq 发表于 2021-5-11 06:44

谢谢分享

yubinhong 发表于 2021-5-11 07:53

最简单的办法是,装11.2,然后拔插法USB定制,保存好定制文件,然后OTA升级最新版,一劳永逸

ydhmq 发表于 2021-5-11 10:17


谢谢分享

yippeeghost 发表于 2021-5-11 10:19

马克一下~
页: [1] 2 3 4
查看完整版本: 手撸式USB定制详解