注:該方法經(jīng)測試支持12贤惯、13洼专、14、15系統(tǒng)孵构,需要配合不同的解除USB限制的補丁屁商,才能正常驅動。
一直在思考如何簡單有效的將定制USB驅動的方法介紹給大家颈墅,但是遠景掛掉了蜡镶,收藏的資料也找不到了。只好在自己的電腦上反復試驗確認無誤后恤筛,才抽空寫了這個教程官还。這里感謝那些幫助過我的大神,等遠景恢復后一定第一時間附上原貼及原作者毒坛。這里需要說明的是望伦,教程定制的是遮蓋器,非驅動煎殷。目的是讓系統(tǒng)能夠正確檢測到usb屯伞,結果與驅動效果一樣,不影響使用以及睡眠問題豪直。
目錄:
一劣摇、前言
二、準備工具及基本驅動文件
三顶伞、獲取USB接口信息
四饵撑、兩種驅動方法
五、USB調(diào)試
六唆貌、結語
一滑潘、前言
對于大部分臺式機來說,黑蘋果的USB只需要最新的RehabMan-USBInjectAll即可驅動USB2.0和USB3.0锨咙,但是筆記本僅僅是正常驅動USB都不容易语卤,睡眠喚醒出問題也往往都是USB出的幺蛾子。所以想要完美實現(xiàn)睡眠喚醒酪刀,USB完美驅動是必不可少的粹舵。實現(xiàn)所有USB接口如同win下一般,也是macOS重度使用者迫切需要的骂倘。下面就詳細介紹一下定制USB驅動的方法眼滤,如果使用RehabMan-USBInjectAll已經(jīng)能夠完美驅動所有USB接口,同時睡眠喚醒也正常的历涝,這個教程就無所謂了诅需,其他的朋友都可以嘗試。(這里不討論USB3.1接口)
目前荧库,通過USB定制已經(jīng)解決的問題有USB2.0堰塌、3.0(5G/s)內(nèi)建問題,藍牙驅動問題或藍牙內(nèi)建問題(免驅藍牙無法驅動)分衫,攝像頭問題(主要是筆記本攝像頭)场刑,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接口)
需要獲取的是EHC1腻异、EHC2、XHC1中的接口數(shù)量这揣,以及設備使用的接口(如藍牙悔常、觸摸板影斑、攝像頭等),需要在win平臺下机打,使用AIDA64工具矫户,設備——USB下找到相關接口。
1残邀、EHC1總線
EHC1下有兩個主接口port1與port2皆辽,port2無集線器直接忽略。port1下有8個接口芥挣,接口分別是11 ~ 18驱闷,其中13設備是指紋識別器,14是藍牙空免,16是攝像頭(記錄下來)空另。
2、EHC2總線
EHC1下有兩個主接口port1與port2蹋砚,port2無集線器直接忽略痹换。port1下有6個接口,接口分別是11 ~ 16都弹,其中12設備是觸摸板(記錄下來)娇豫。
3、XHC1總線
XHC1下有21個接口畅厢,所有接口未被設備直接使用冯痢。
使用AIDA64查看所有USB接口信息,某個總線沒有框杜,也沒有關系浦楣,如實記錄即可。需要說明的是被設備直接使用的大多為特殊接口咪辱,后面章節(jié)需要特殊定義振劳,其他接口只需要定義USB2.0與USB3.0即可。
以上可以確定完整USB2.0接口油狂,但是USB3.0則需要進一步確認历恐,這里需要用到DSDT文件(clover啟動項選擇頁面F4獲取,保存于ACPI 下专筷,DSDT文件的編輯需要將格式由aml轉換為dsl弱贼,并在ACPI5.0下修復報錯才能保存,這里不討論)
XHC1總線下的21個接口有15個HS01 ~ HS15磷蛹,6個SSP1 ~ SSP6吮旅,這里HS為USB3.0兼容USB2.0的接口,SSP為USB3.0接口(部分電腦代碼不同)味咳。由于EHC中已經(jīng)定義USB2.0庇勃,這里忽略掉所有的HS接口(DSDT文件刪除所有HS接口)檬嘀,僅保留SSP接口。
四责嚷、兩種驅動方法
下面開始根據(jù)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文件
將紅框中的電腦型號修改成當前型號碗旅,確認電腦型號后分別是-EH01,-EH02镜悉,-XHC(macOS對USB的識別祟辟,與win中EHC1,EHC2侣肄,XHCI不同)旧困。
①EH01
ports下保留EHC1中的8個11 ~ 18接口,分別為PR11 ~ PR18稼锅,對應DSDT中PR11~PR18吼具。由于13設備是指紋識別器,14是藍牙矩距,因此UsbConnector定義為255(特殊接口)拗盒。攝像頭0(USB2.0)即可,部分電腦則需要255(特殊接口)锥债,根據(jù)情況修改陡蝇。PR11在部分電腦上會識別成集線器,也需要修改為255(特殊接口)哮肚,根據(jù)情況修改毅整。port-count填入接口數(shù)量,每個接口port中的值绽左,如圖依次填入悼嫉。model中填入電腦型號。
②EH02
ports下保留EHC2中的6個11 ~ 16接口拼窥,分別為PR11 ~ PR16戏蔑,對應DSDT中PR11~PR16蹋凝。由PR11在部分電腦上會識別成集線器,也需要修改為255(特殊接口)总棵,根據(jù)情況修改鳍寂。port-count填入接口數(shù)量,每個接口port中的值情龄,如圖依次填入迄汛。model中填入電腦型號。
③XHC
ports下保留XHC1中的6個接口骤视,分別為SSP1 ~ SSP6鞍爱,對應DSDT中SSP1 ~ SSP6。這里所有接口均為USB3.0专酗,因此UsbConnector為3睹逃。
根據(jù)情況修改。這里的port-count填入是最大的數(shù)祷肯,而不是數(shù)量沉填,因為HS01 ~ HS15加上SSP1 ~ SSP6總共21個,十六進制為15佑笋,即使刪除HS01 ~ HS15翼闹,USB3.0總線接口數(shù)依然還是15,這個數(shù)能多不能少蒋纬,否則會造成接口丟失橄碾。每個接口port中的值,如圖依次填入颠锉。model中填入電腦型號法牲。
3、文件放置對應位置
將修改好的驅動放在EFI—Clover—Kexts下即可琼掠,DSDT轉換為aml格式拒垃,放入EFI—Clover—ACPI—patch下,自動替換OEM中的DSDT瓷蛙。
方法二:
1悼瓮、獲得USBInjectAll.kext
2、修改驅動下USBInjectAll.kext—Contents—info.plist文件
這里需要修改的位置在Configuration下內(nèi)容艰猬,下面的機型可以無視横堡,不影響結果。這里EH01冠桃、EH02命贴、HUB1、HUB2為USB2.0,其他為各種主板不同型號的USB3.0胸蛛。根據(jù)AIDA64中獲取的信息找到對應的名稱修改污茵。
①EH01
ports下保留EH01中的8個11 ~ 18接口,分別為PR11 ~ PR18葬项,由于13設備是指紋識別器泞当,14是藍牙,因此UsbConnector定義為255(特殊接口)民珍。攝像頭0(USB2.0)即可襟士,部分電腦則需要255(特殊接口),根據(jù)情況修改嚷量。PR11在部分電腦上會識別成集線器陋桂,也需要修改為255(特殊接口),根據(jù)情況修改津肛。這里的port-count與port都無需修改對所有設備通用章喉。
②EH02
ports下保留EH02中的6個11 ~ 16接口汗贫,分別為PR11 ~ PR16身坐。由PR11在部分電腦上會識別成集線器,也需要修改為255(特殊接口)落包,根據(jù)情況修改部蛇。這里的port-count與port都無需修改對所有設備通用。
③XHC
win下設備管理器的通用串口控制器中查看USB3.0硬件ID咐蝇,可確定USB3.0為8086_8xxx涯鲁。
由于我的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 },
//{}內(nèi)為接口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調(diào)試
在修改好所有驅動后,需要在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(或者是其他類似代碼)已經(jīng)修改為EH01、EH02潘懊、XHC姚糊。
所有工作完成以后,可以使用U盤對所有接口進行測試授舟,然后使用IORegistryEntry查看是否成功救恨,也可在系統(tǒng)報告中查看USB3.0是否實現(xiàn)5G/s速度。
六释树、結語
由于手頭的機器有限肠槽,以上的方法無法將方方面介紹到,僅提供整體思路以及個人經(jīng)驗奢啥,方便更好的來定制USB遮蓋器秸仙。這套定制USB遮蓋器的方法結合我之前的所有教程,使我的筆記本在10.12.6版本時實現(xiàn)了幾乎所有macOS的功能桩盲,但在10.13后由于未知的原因寂纪,睡眠喚醒變成了關機。雖然如此正驻,還是很能說明這套方法的可行度弊攘,希望能幫助到大家。