注:該方法經(jīng)測試支持12、13、14、15系統(tǒng),需要配合不同的解除USB限制的補(bǔ)丁,才能正常驅(qū)動。
一直在思考如何簡單有效的將定制USB驅(qū)動的方法介紹給大家,但是遠(yuǎn)景掛掉了,收藏的資料也找不到了。只好在自己的電腦上反復(fù)試驗(yàn)確認(rèn)無誤后,才抽空寫了這個教程。這里感謝那些幫助過我的大神,等遠(yuǎn)景恢復(fù)后一定第一時間附上原貼及原作者。這里需要說明的是,教程定制的是遮蓋器,非驅(qū)動。目的是讓系統(tǒng)能夠正確檢測到usb,結(jié)果與驅(qū)動效果一樣,不影響使用以及睡眠問題。
目錄:
一、前言
二、準(zhǔn)備工具及基本驅(qū)動文件
三、獲取USB接口信息
四、兩種驅(qū)動方法
五、USB調(diào)試
六、結(jié)語
一、前言
對于大部分臺式機(jī)來說,黑蘋果的USB只需要最新的RehabMan-USBInjectAll即可驅(qū)動USB2.0和USB3.0,但是筆記本僅僅是正常驅(qū)動USB都不容易,睡眠喚醒出問題也往往都是USB出的幺蛾子。所以想要完美實(shí)現(xiàn)睡眠喚醒,USB完美驅(qū)動是必不可少的。實(shí)現(xiàn)所有USB接口如同win下一般,也是macOS重度使用者迫切需要的。下面就詳細(xì)介紹一下定制USB驅(qū)動的方法,如果使用RehabMan-USBInjectAll已經(jīng)能夠完美驅(qū)動所有USB接口,同時睡眠喚醒也正常的,這個教程就無所謂了,其他的朋友都可以嘗試。(這里不討論USB3.1接口)
目前,通過USB定制已經(jīng)解決的問題有USB2.0、3.0(5G/s)內(nèi)建問題,藍(lán)牙驅(qū)動問題或藍(lán)牙內(nèi)建問題(免驅(qū)藍(lán)牙無法驅(qū)動),攝像頭問題(主要是筆記本攝像頭),USB睡眠問題(如藍(lán)牙與攝像頭導(dǎo)致的秒醒問題,需要定義接口屬性port或dsdt打usb睡眠補(bǔ)?。?/em>。
二、準(zhǔn)備工具及基本驅(qū)動文件
定制USB的工具:
1、win平臺:
AIDA64(用以確認(rèn)所有USB接口以及設(shè)備對應(yīng)接口)
2、macOS平臺:
MaciASL(選用,編輯DSDT文件)
IORegistryEntry (用來確認(rèn)USB是否正常驅(qū)動
PlistEdit pro(編輯info.plist)
基本驅(qū)動:
1、USB_Injector.kext(方法一中使用)
遠(yuǎn)景中一位大神編寫的需要DSDT文件配合
2、USBInjectAll.kext(方法二中使用)
RehabMac大神編寫的萬能驅(qū)動,定制既是直接修改這個驅(qū)動
三、獲取USB接口信息
USB接口的基本結(jié)構(gòu)大致如下:(這里不討論USB3.1接口)
1、EHC1總線(第一組USB2.0接口)
2、EHC2 總線 (第二組USB2.0接口)
3、XHC1總線(USB3.0接口)
需要獲取的是EHC1、EHC2、XHC1中的接口數(shù)量,以及設(shè)備使用的接口(如藍(lán)牙、觸摸板、攝像頭等),需要在win平臺下,使用AIDA64工具,設(shè)備——USB下找到相關(guān)接口。
1、EHC1總線
EHC1下有兩個主接口port1與port2,port2無集線器直接忽略。port1下有8個接口,接口分別是11 ~ 18,其中13設(shè)備是指紋識別器,14是藍(lán)牙,16是攝像頭(記錄下來)。
2、EHC2總線
EHC1下有兩個主接口port1與port2,port2無集線器直接忽略。port1下有6個接口,接口分別是11 ~ 16,其中12設(shè)備是觸摸板(記錄下來)。
3、XHC1總線
XHC1下有21個接口,所有接口未被設(shè)備直接使用。
使用AIDA64查看所有USB接口信息,某個總線沒有,也沒有關(guān)系,如實(shí)記錄即可。需要說明的是被設(shè)備直接使用的大多為特殊接口,后面章節(jié)需要特殊定義,其他接口只需要定義USB2.0與USB3.0即可。
以上可以確定完整USB2.0接口,但是USB3.0則需要進(jìn)一步確認(rèn),這里需要用到DSDT文件(clover啟動項(xiàng)選擇頁面F4獲取,保存于ACPI 下,DSDT文件的編輯需要將格式由aml轉(zhuǎn)換為dsl,并在ACPI5.0下修復(fù)報錯才能保存,這里不討論)
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接口。
四、兩種驅(qū)動方法
下面開始根據(jù)USB接口信息開始定制USB驅(qū)動。DSDT中需要將所有EHC1改為EH01,EHC2改為EH02,XHCI改為XHC。
info中對USB接口的定義分別是0、3、255,既USB2.0、USB3.0、特殊端口
方法一:
1、獲得USB_Injector.kext
2、修改驅(qū)動下USB_Injector.kext—Contents—info.plist文件
將紅框中的電腦型號修改成當(dāng)前型號,確認(rèn)電腦型號后分別是-EH01,-EH02,-XHC(macOS對USB的識別,與win中EHC1,EHC2,XHCI不同)。
①EH01
ports下保留EHC1中的8個11 ~ 18接口,分別為PR11 ~ PR18,對應(yīng)DSDT中PR11~PR18。由于13設(shè)備是指紋識別器,14是藍(lán)牙,因此UsbConnector定義為255(特殊接口)。攝像頭0(USB2.0)即可,部分電腦則需要255(特殊接口),根據(jù)情況修改。PR11在部分電腦上會識別成集線器,也需要修改為255(特殊接口),根據(jù)情況修改。port-count填入接口數(shù)量,每個接口port中的值,如圖依次填入。model中填入電腦型號。
②EH02
ports下保留EHC2中的6個11 ~ 16接口,分別為PR11 ~ PR16,對應(yīng)DSDT中PR11~PR16。由PR11在部分電腦上會識別成集線器,也需要修改為255(特殊接口),根據(jù)情況修改。port-count填入接口數(shù)量,每個接口port中的值,如圖依次填入。model中填入電腦型號。
③XHC
ports下保留XHC1中的6個接口,分別為SSP1 ~ SSP6,對應(yīng)DSDT中SSP1 ~ SSP6。這里所有接口均為USB3.0,因此UsbConnector為3。
根據(jù)情況修改。這里的port-count填入是最大的數(shù),而不是數(shù)量,因?yàn)镠S01 ~ HS15加上SSP1 ~ SSP6總共21個,十六進(jìn)制為15,即使刪除HS01 ~ HS15,USB3.0總線接口數(shù)依然還是15,這個數(shù)能多不能少,否則會造成接口丟失。每個接口port中的值,如圖依次填入。model中填入電腦型號。
3、文件放置對應(yīng)位置
將修改好的驅(qū)動放在EFI—Clover—Kexts下即可,DSDT轉(zhuǎn)換為aml格式,放入EFI—Clover—ACPI—patch下,自動替換OEM中的DSDT。
方法二:
1、獲得USBInjectAll.kext
2、修改驅(qū)動下USBInjectAll.kext—Contents—info.plist文件
這里需要修改的位置在Configuration下內(nèi)容,下面的機(jī)型可以無視,不影響結(jié)果。這里EH01、EH02、HUB1、HUB2為USB2.0,其他為各種主板不同型號的USB3.0。根據(jù)AIDA64中獲取的信息找到對應(yīng)的名稱修改。
①EH01
ports下保留EH01中的8個11 ~ 18接口,分別為PR11 ~ PR18,由于13設(shè)備是指紋識別器,14是藍(lán)牙,因此UsbConnector定義為255(特殊接口)。攝像頭0(USB2.0)即可,部分電腦則需要255(特殊接口),根據(jù)情況修改。PR11在部分電腦上會識別成集線器,也需要修改為255(特殊接口),根據(jù)情況修改。這里的port-count與port都無需修改對所有設(shè)備通用。
②EH02
ports下保留EH02中的6個11 ~ 16接口,分別為PR11 ~ PR16。由PR11在部分電腦上會識別成集線器,也需要修改為255(特殊接口),根據(jù)情況修改。這里的port-count與port都無需修改對所有設(shè)備通用。
③XHC
win下設(shè)備管理器的通用串口控制器中查看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都無需修改對所有設(shè)備通用。
需要說明的是,部分電腦使用這個驅(qū)動是不需要定義USB3.0即可驅(qū)動USB3.0,這就需要刪除所有8086項(xiàng)。而部分電腦使用修改過USB的DSDT后也不需要在驅(qū)動中再次定義USB3.0,也需要刪除所有8086項(xiàng)。因此在修改過8086項(xiàng)后仍然無法驅(qū)動USB3.0,可以嘗試刪除所有8086項(xiàng)。
對于部分設(shè)備使用上述驅(qū)動,對應(yīng)設(shè)備依然無法驅(qū)動的,則需要SSDT-UIAC.dsl來修復(fù)
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為需要修復(fù)的接口
{
"UsbConnector", 3,//3是接口定義
"port", Buffer() { 0xa, 0, 0, 0 },
//{}內(nèi)為接口ID,SSP1為8086_8xxx中的第16個接口,十進(jìn)制為16,十六進(jìn)制則為0xa,以此類推。
}
}
}
})
}
}
3、文件放置對應(yīng)位置
將修改好的驅(qū)動放在EFI—Clover—Kexts下即可。
SSDT-UIAC.dsl轉(zhuǎn)換為aml格式后,放入EFI—Clover—ACPI—patch下,同時config.plist的ACPI—SortedOrder中加入SSDT-UIAC.aml
五、USB調(diào)試
在修改好所有驅(qū)動后,需要在config.plist中Kernel and Kext Patches——kextstoPatch加入解除USB限制補(bǔ)丁。
Comment: change 15 port limit to 20 in AppleUSBXHCIPCI
Name: AppleUSBXHCIPCI
Find: <83bd8cfe ffff10>
Replace: <83bd8cfe ffff15>
//此補(bǔ)丁僅適用于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需要加入以下補(bǔ)丁:
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盤對所有接口進(jìn)行測試,然后使用IORegistryEntry查看是否成功,也可在系統(tǒng)報告中查看USB3.0是否實(shí)現(xiàn)5G/s速度。
六、結(jié)語
由于手頭的機(jī)器有限,以上的方法無法將方方面介紹到,僅提供整體思路以及個人經(jīng)驗(yàn),方便更好的來定制USB遮蓋器。這套定制USB遮蓋器的方法結(jié)合我之前的所有教程,使我的筆記本在10.12.6版本時實(shí)現(xiàn)了幾乎所有macOS的功能,但在10.13后由于未知的原因,睡眠喚醒變成了關(guān)機(jī)。雖然如此,還是很能說明這套方法的可行度,希望能幫助到大家。