黑苹果定制USB遮盖器(区别于驱动)

注:该方法经测试支持12、13、14、15系统,需要配合不同的解除USB限制的补丁,才能正常驱动。

一直在思考如何简单有效的将定制USB驱动的方法介绍给大家,但是远景挂掉了,收藏的资料也找不到了。只好在自己的电脑上反复试验确认无误后,才抽空写了这个教程。这里感谢那些帮助过我的大神,等远景恢复后一定第一时间附上原贴及原作者。这里需要说明的是,教程定制的是遮盖器,非驱动。目的是让系统能够正确检测到usb,结果与驱动效果一样,不影响使用以及睡眠问题。

目录:
一、前言
二、准备工具及基本驱动文件
三、获取USB接口信息
四、两种驱动方法
五、USB调试
六、结语

一、前言

对于大部分台式机来说,黑苹果的USB只需要最新的RehabMan-USBInjectAll即可驱动USB2.0和USB3.0,但是笔记本仅仅是正常驱动USB都不容易,睡眠唤醒出问题也往往都是USB出的幺蛾子。所以想要完美实现睡眠唤醒,USB完美驱动是必不可少的。实现所有USB接口如同win下一般,也是macOS重度使用者迫切需要的。下面就详细介绍一下定制USB驱动的方法,如果使用RehabMan-USBInjectAll已经能够完美驱动所有USB接口,同时睡眠唤醒也正常的,这个教程就无所谓了,其他的朋友都可以尝试。(这里不讨论USB3.1接口)
目前,通过USB定制已经解决的问题有USB2.0、3.0(5G/s)内建问题,蓝牙驱动问题或蓝牙内建问题(免驱蓝牙无法驱动),摄像头问题(主要是笔记本摄像头),USB睡眠问题(如蓝牙与摄像头导致的秒醒问题,需要定义接口属性port或dsdt打usb睡眠补丁)

二、准备工具及基本驱动文件

定制USB的工具:
1、win平台:
AIDA64(用以确认所有USB接口以及设备对应接口)
2、macOS平台:
MaciASL(选用,编辑DSDT文件)
IORegistryEntry (用来确认USB是否正常驱动
PlistEdit pro(编辑info.plist)

基本驱动:
1、USB_Injector.kext(方法一中使用)
远景中一位大神编写的需要DSDT文件配合
2、USBInjectAll.kext(方法二中使用)
RehabMac大神编写的万能驱动,定制既是直接修改这个驱动

三、获取USB接口信息

USB接口的基本结构大致如下:(这里不讨论USB3.1接口)
1、EHC1总线(第一组USB2.0接口)
2、EHC2 总线 (第二组USB2.0接口)
3、XHC1总线(USB3.0接口)


USB接口

需要获取的是EHC1、EHC2、XHC1中的接口数量,以及设备使用的接口(如蓝牙、触摸板、摄像头等),需要在win平台下,使用AIDA64工具,设备——USB下找到相关接口。

1、EHC1总线


EHC1

EHC1下有两个主接口port1与port2,port2无集线器直接忽略。port1下有8个接口,接口分别是11 ~ 18,其中13设备是指纹识别器,14是蓝牙,16是摄像头(记录下来)。

2、EHC2总线


EHC2

EHC1下有两个主接口port1与port2,port2无集线器直接忽略。port1下有6个接口,接口分别是11 ~ 16,其中12设备是触摸板(记录下来)。

3、XHC1总线


XHC1

XHC1下有21个接口,所有接口未被设备直接使用。

使用AIDA64查看所有USB接口信息,某个总线没有,也没有关系,如实记录即可。需要说明的是被设备直接使用的大多为特殊接口,后面章节需要特殊定义,其他接口只需要定义USB2.0与USB3.0即可。

以上可以确定完整USB2.0接口,但是USB3.0则需要进一步确认,这里需要用到DSDT文件(clover启动项选择页面F4获取,保存于ACPI 下,DSDT文件的编辑需要将格式由aml转换为dsl,并在ACPI5.0下修复报错才能保存,这里不讨论)

DSDT

XHC1总线下的21个接口有15个HS01 ~ HS15,6个SSP1 ~ SSP6,这里HS为USB3.0兼容USB2.0的接口,SSP为USB3.0接口(部分电脑代码不同)。由于EHC中已经定义USB2.0,这里忽略掉所有的HS接口(DSDT文件删除所有HS接口),仅保留SSP接口。

四、两种驱动方法

下面开始根据USB接口信息开始定制USB驱动。DSDT中需要将所有EHC1改为EH01,EHC2改为EH02,XHCI改为XHC。
info中对USB接口的定义分别是0、3、255,既USB2.0、USB3.0、特殊端口

方法一:

1、获得USB_Injector.kext
2、修改驱动下USB_Injector.kext—Contents—info.plist文件

info

将红框中的电脑型号修改成当前型号,确认电脑型号后分别是-EH01,-EH02,-XHC(macOS对USB的识别,与win中EHC1,EHC2,XHCI不同)。

①EH01


EH01

DSDT

ports下保留EHC1中的8个11 ~ 18接口,分别为PR11 ~ PR18,对应DSDT中PR11~PR18。由于13设备是指纹识别器,14是蓝牙,因此UsbConnector定义为255(特殊接口)。摄像头0(USB2.0)即可,部分电脑则需要255(特殊接口),根据情况修改。PR11在部分电脑上会识别成集线器,也需要修改为255(特殊接口),根据情况修改。port-count填入接口数量,每个接口port中的值,如图依次填入。model中填入电脑型号。

②EH02


EH02

DSDT

ports下保留EHC2中的6个11 ~ 16接口,分别为PR11 ~ PR16,对应DSDT中PR11~PR16。由PR11在部分电脑上会识别成集线器,也需要修改为255(特殊接口),根据情况修改。port-count填入接口数量,每个接口port中的值,如图依次填入。model中填入电脑型号。

③XHC

XHC

DSDT

ports下保留XHC1中的6个接口,分别为SSP1 ~ SSP6,对应DSDT中SSP1 ~ SSP6。这里所有接口均为USB3.0,因此UsbConnector为3。
根据情况修改。这里的port-count填入是最大的数,而不是数量,因为HS01 ~ HS15加上SSP1 ~ SSP6总共21个,十六进制为15,即使删除HS01 ~ HS15,USB3.0总线接口数依然还是15,这个数能多不能少,否则会造成接口丢失。每个接口port中的值,如图依次填入。model中填入电脑型号。

3、文件放置对应位置
将修改好的驱动放在EFI—Clover—Kexts下即可,DSDT转换为aml格式,放入EFI—Clover—ACPI—patch下,自动替换OEM中的DSDT。

方法二:

1、获得USBInjectAll.kext
2、修改驱动下USBInjectAll.kext—Contents—info.plist文件

info

这里需要修改的位置在Configuration下内容,下面的机型可以无视,不影响结果。这里EH01、EH02、HUB1、HUB2为USB2.0,其他为各种主板不同型号的USB3.0。根据AIDA64中获取的信息找到对应的名称修改。

①EH01


EH01

ports下保留EH01中的8个11 ~ 18接口,分别为PR11 ~ PR18,由于13设备是指纹识别器,14是蓝牙,因此UsbConnector定义为255(特殊接口)。摄像头0(USB2.0)即可,部分电脑则需要255(特殊接口),根据情况修改。PR11在部分电脑上会识别成集线器,也需要修改为255(特殊接口),根据情况修改。这里的port-count与port都无需修改对所有设备通用。

②EH02


EH02

ports下保留EH02中的6个11 ~ 16接口,分别为PR11 ~ PR16。由PR11在部分电脑上会识别成集线器,也需要修改为255(特殊接口),根据情况修改。这里的port-count与port都无需修改对所有设备通用。

③XHC


XHC

win下设备管理器的通用串口控制器中查看USB3.0硬件ID,可确定USB3.0为8086_8xxx。


info

由于我的HS接口为USB3.0兼容USB2.0,而非USB3.0,因此HS的UsbConnector修改0或删除,保留SSP,同时SSP1 ~ SSP6所有接口的UsbConnector修改为3。这里的port-count与port都无需修改对所有设备通用。

需要说明的是,部分电脑使用这个驱动是不需要定义USB3.0即可驱动USB3.0,这就需要删除所有8086项。而部分电脑使用修改过USB的DSDT后也不需要在驱动中再次定义USB3.0,也需要删除所有8086项。因此在修改过8086项后仍然无法驱动USB3.0,可以尝试删除所有8086项。

对于部分设备使用上述驱动,对应设备依然无法驱动的,则需要SSDT-UIAC.dsl来修复

DefinitionBlock ("", "SSDT", 1, "hack", "UIAC", 0)
{
    Device(UIAC)
    {
        Name(_HID, "UIA00000")

        // override XHC configuration to have only one port
        Name(RMCF, Package()
        {
            "8086_8xxx", Package()
            {
                "port-count", Buffer() { 0xa, 0, 0, 0 },
                "ports", Package()
                {
                    "SSP1", Package()//这里的SSP1为需要修复的接口
                    {
                        "UsbConnector", 3,//3是接口定义
                        "port", Buffer() { 0xa, 0, 0, 0 },
//{}内为接口ID,SSP1为8086_8xxx中的第16个接口,十进制为16,十六进制则为0xa,以此类推。
                    }
                }
            }
        })
    }
}

3、文件放置对应位置
将修改好的驱动放在EFI—Clover—Kexts下即可。
SSDT-UIAC.dsl转换为aml格式后,放入EFI—Clover—ACPI—patch下,同时config.plist的ACPI—SortedOrder中加入SSDT-UIAC.aml

五、USB调试

在修改好所有驱动后,需要在config.plist中Kernel and Kext Patches——kextstoPatch加入解除USB限制补丁。

Comment: change 15 port limit to 20 in AppleUSBXHCIPCI
Name: AppleUSBXHCIPCI
Find: <83bd8cfe ffff10>
Replace: <83bd8cfe ffff15>
//此补丁仅适用于10.11
Comment: change 15 port limit to 26 in AppleUSBXHCIPCI
Name: AppleUSBXHCIPCI
Find: <83bd8cfe ffff10>
Replace: <83bd8cfe ffff1b>
Comment: USB port limit patch #1 10.15.x modify by DalianSky(credit ydeng)
Name: com.apple.iokit.IOUSBHostFamily
Find: 83FB0F0F
Replace: 83FB3F0F

Comment: USB Port limit patch #2 10.15.x modify by DalianSky
Name: com.apple.driver.usb.AppleUSBXHCI
Find: 83F90F0F
Replace: 83F93F0F
//仅适用于10.15

如果没有使用自己修改DSDT,则config.plist中的ACPI—DSDT—Patches需要加入以下补丁:

Comment: Rename EHC1 to EH01
Disabled: NO
Find: <45484331>
Replace: <45483031>
Comment: Rename EHC2 to EH02
Disabled: NO
Find: <45484332>
Replace: <45483032>
Comment:Rename XHC1 to XHC
Disabled: NO
Find: <58484331>
Replace: <584843>

否则就需要将DSDT中的EHC1、EHC2、XHC1(或者是其他类似代码)已经修改为EH01、EH02、XHC。

所有工作完成以后,可以使用U盘对所有接口进行测试,然后使用IORegistryEntry查看是否成功,也可在系统报告中查看USB3.0是否实现5G/s速度。


IORegistryEntry

系统报告

六、结语

由于手头的机器有限,以上的方法无法将方方面介绍到,仅提供整体思路以及个人经验,方便更好的来定制USB遮盖器。这套定制USB遮盖器的方法结合我之前的所有教程,使我的笔记本在10.12.6版本时实现了几乎所有macOS的功能,但在10.13后由于未知的原因,睡眠唤醒变成了关机。虽然如此,还是很能说明这套方法的可行度,希望能帮助到大家。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345