來談點不一樣的。最近一直為黑蘋果升級 Mojave 10.14 之後、 USB 3.0 的數量限制所困擾。平常拍照完,習慣將記憶卡的的照片存到外接硬碟上,但由於數量上限,沒辦法同時將讀卡機與外接硬碟同時接在主機囧。
quick and dirty 的做法是找到對應版本的 patch (1, 2),用 Clover 新增上去,並加上 .kext 檔在 EFI/CLOVER/kexts/Others
裡面,但這個做法並不是長久之計,一旦更新 OS 版本,就必須找新的 patch 補上,但很可能新版本推出時還沒有熱心網友提供 patch ,例如現在最新版 macOS 為 10.14.6 ,但網頁只整理到 10.14.5 而已。
另一個方法就是為自己的主機客製一個 ssdt 檔,簡單來說就是
- 識別有用到的 USB 插槽的編號
- 將不會用到的編號從檔案剔除
如此一下就不必擔心那些沒用到的編號佔了原本的 USB 數量名額。那 ssdt 又是什麼呢?這邊可以想像成電源管理的一個描述檔就好了~
因為 tonymacx86 那邊大大發的文實在太長,後來我找到一個用 Hackintool 、比較方便的解決方法(但原理基本上相同)。
Hackintool 如圖示,是黑蘋果的瑞士刀,除了可以 patch 顯示卡、 USB 、音訊,也可以用來檢查 kext 是否為最新,如果熟悉操作的話,可以免除原本冗長的 patch 步驟。
事前準備:下載 kext 與 USB controller 更名
1. 從這邊下載最新的 USBInjectAll.kext ,解壓縮後 Release 那個資料夾裡面的就是了。將他存到 EFI/CLOVER/kexts/Others
裡面,這個 .kext 檔是用來識別我們主機上的 USB 編號,最後生成專屬的 patch 檔後,就不需要這個 .kext 檔了。
2. 因為 USBInjectAll.kext 識別到的 USB 控制器有一定的命名條件,這邊需要以 Clover 來做名稱的 patch :在 ACPI 頁面點選 List of Patches 就可以找到所需的 patch :
- XHC1 → XHC
- XHCI → XHC
- EHC1 → EH01
- EHC2 → EH02
重新啟動後,打開 Hackintool ,並點選 USB 頁面,觀察 USB Controllers 是否有改成 EH01, 02, XHC :
接下來,因為主機板晶片組型號不同,會需要不同的 .kext 檔,這邊要觀察的是 XHC 的 Device ID (上圖右上)
- 若為 1E31, 8C31, 8CB1, 8D31, 9C31, 9CB1 其一,則需裝 FakePCIID.kext 以及 FakePCIID_XHCIMux.kext
- 若為 8D31, A2AF, A36D, 9DED 其一,需下載的則為 XHCI-unsupported.kext
重新開機後,一樣打開 Hackintool 的 USB 頁面,並把下方 USB Ports 裡面的全選,點選 Delete 移除,再按旁邊的 Refresh 。
接下來,為了確保 USB 2 與 USB 3 不互相干擾我們識別編號,必須先將 USB 3 停用:
記得將鍵盤滑鼠接到 USB 2.0 插槽上。重新開機後,打開 Hackintool 的 USB 頁面,接著拿一個 USB 2.0 的設備插在每個會用到的 USB 插槽(USB 2 及 3 都要)。如果有成功辨識到,該插槽那欄會變成綠底。
完成後,刪掉那些不是綠底的插槽,只留下綠底的:
應該會比這篇圖上的還要多一些。
接著要改測試 USB 3.0 ,所以要將 boot 的 flag 改成 -uia_exclude_hs
,重新啟動打開 Hackintool 後,拿一個 USB 3.0 的設備插在每個會用到的 USB 插槽(USB 2 及 3 都要,如果有 Type-C 接孔,則正反都要試試看),最後一樣留下綠底的就好。
最後,點選下方最右邊的 Export 輸出 ssdt ,預設是存在桌面喔。
如果有 SSDT-EC.aml 這個檔案,則將他放到 EFI/CLOVER/ACPI/patched
路徑下。
接下來,這邊有兩種做法,第一種是把 SSDT-UIAC.aml 、 SSDT-USBX.aml (如果有生成的話)存到 EFI/CLOVER/ACPI/patched
路徑下;第二種(筆者這邊所採用的),是把 USBPorts.kext 放到 EFI/CLOVER/kexts/Others
,二種方法選一種做就好。
最後,把 boot 的 flag -uia_exclude_hs
移除,如果使用第二種做法,也要移除事前準備所下載的 USBInjectAll.kext ,重新開機就完成囉!