Hackintosh | 解決 Mojave USB 數量限制

Hackintosh | 解決 Mojave USB 數量限制

來談點不一樣的。最近一直為黑蘋果升級 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 檔,簡單來說就是

  1. 識別有用到的 USB 插槽的編號
  2. 將不會用到的編號從檔案剔除

如此一下就不必擔心那些沒用到的編號佔了原本的 USB 數量名額。那 ssdt 又是什麼呢?這邊可以想像成電源管理的一個描述檔就好了~

因為 tonymacx86 那邊大大發的文實在太長,後來我找到一個用 Hackintool 、比較方便的解決方法(但原理基本上相同)。

好酸 XDD

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 (上圖右上)

重新開機後,一樣打開 Hackintool 的 USB 頁面,並把下方 USB Ports 裡面的全選,點選 Delete 移除,再按旁邊的 Refresh 。

接下來,為了確保 USB 2 與 USB 3 不互相干擾我們識別編號,必須先將 USB 3 停用:

在 Clover 裡面增加 boot 的 flag:-uia_exclude_ss

記得將鍵盤滑鼠接到 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 ,重新開機就完成囉!

Leave a reply (please do not include URL in reply)