USB3.0ポートが機能していない?
ガジェット探偵事務所へようこそ!所長のマーロウ(@marlowesgadget)です。
CaseMODしたPowerMac i7に最新ブートローダーOpenCore0.7.0でHackintoshを楽しんでおります。Hackintosh運用歴は3年ほど。やっと初心者を抜け出した程度のスキルしかありませんが、初心者向けに基本テクを優しく紹介したいと思います。
OpenCoreとはなんぞや?という方は下記の記事からどうぞ。⬇
新型ブートローダーOpenCoreでHackintoshしてみる?【初心者向け/入門】
さて今回はHackintoshの鬼門・USBマッピングの方法について紹介したいと思います。
Hackintoshでブートが成功して喜んでいると、そのうち一部のUSB3.0ポートが動作しないことに気づくでしょう。
これはなんとも馬鹿げた理由でAppleがMackintoshで扱えるUSBポートの数をコントローラーあたり15に制限しているからです。
何もしないとUSB2.0から順番にUSBポートを使い始めるので、15個制限から溢れたUSB3.0ポートが使用できなくなるという問題です。
なおこの症状はATXなどポート数の多いマザーボードで発生するので、ノートPC等では無視することができるかもしれません。
この問題を回避するために、「使用していないUSBポートをカウントしないよう設定する」という方法が取られており、USBマッピングと呼ばれています。
※詳しい情報はBootMacOSさんの記事をご参考ください。本記事は初心者向けに要点のみ解説します。⬇
https://bootmacos.com/archives/9177
https://bootmacos.com/archives/1424
6進数を採用しているため。0を除くと最後は15(0xf)になる。桁を増やすと次は255個(0xFF)になるのが嫌だったようです。Appleが販売しているPCはMacProでもこの制限を超えず、USB拡張カードを追加した場合はコントローラーが別扱いになるので問題ないわけです。OS X 10.11ElCapitanから採用されシステム整合性保護とあわせてHackitonsherを恐怖のどん底に突き落としたとされています。
されません。USBハブには、異なる種類のポート制限があります。
準備
USBマッピングにはいろいろな方法があって、OpenCoreの公式ガイドではCorpnewt氏作成のUSBMapを使う方法が解説されていますが、コマンドベースなのでやや敷居が高いと思います。本記事で紹介するHackinToolはGUIなので使いやすいと思います。
準備するもの
- USBデバイス(ハブ、無線ドングル、カードリーダーなどマウントしないものが便利)
- Hackintool
- IORegistoryExplorer
- USBInjectAll.kext
IORegistoryExplorerはUSBポートを特定する時にHackintoolと併用すると便利です。
USBポートがすべて見えるようにする
マザーボードに搭載されているすべてのUSBポートが見えるよう設定します。
- KextにUSBInjectAllを追加
- config.plistのXhciPortLimitの設定をTrueにする
XhciPortLimitはKernel -> Quirks -> XhciPortLimitにあります⬇
使用しているUSBポートを特定
Hackintoolを起動して、タブをUSBに切り替えると、USBポートがズラッと表示されます。筆者のマザーボードはASUS ROG Strix Z390でして、全部で26個ありました。ポートの名前にHSやSSとついていますが、意味は次のとおりです。
- HS…High Speed. USB2.0のこと
- USR…なんらかの理由で表示されているダミーポート
- SS…Super Speed.USB 3.0のこと。
上から順番に認識されていくので、下の方にあるSSつまりUSB3.0が15から溢れて使用できなくなります。
緑でマーキングされているのは現在使用しているポートです。Device名が表示されるものもあります。Connectorは正しく表示されているとは限らないので、わかる範囲で修正しておきます。
用意したUSBデバイスを次々に空いているポートに刺して、緑に変わるか確認してポートを特定していきます。…とてもアナログな作業です。
このとき、IORegistoryExplorerも一緒にチェックすると情報が多いのでわかりやすいです。認識したポートの色が変わりますし、抜いたあとも記録を保持してくれます。
Hackintoolのコメント欄を右クリックするとテキストが入力できますので、ポートの情報を備忘として入力しておきます。
※Type-Cポートがある場合は当然ながらType-C対応のデバイスを刺します。
※USB3.0ポートならUSB3.0対応のデバイスを刺します。
使用していないポートが判明したら、Hackintoolの「−」ボタンで削除します。
⬆こんな感じになります。筆者はちょっと横着して、コメントを簡略してしまいましたが、詳しく書いたほうが後々助かると思います…。
ポートのうちHS06はUSB2.0ヘッダーに刺したBluetoothアンテナです。ほんとうはマザボ上の全部のヘッダーに抜き差しして確認したほうが良いのですが、面倒なのでとりあえずここで終了してしまいました。
USBPorts.kextを書き出す
Hackintoolの便利なところは、特定したポート情報を書き出して、kextにしてくれるところです。このkextファイルを追加するだけでポートを制限してくれます。
書き出しも簡単で、下のExportボタンを押すだけ。自動でデスクトップにファイルを書き出してくれます。このとき次の5つのファイルを作成してくれるのですが、必要なのはUSBPorts.kextだけです。
- SSDT-EC-USBX.aml
- SSDT-EC-USBX.dsl
- SSDT-UIAC.aml
- SSDT-UIAC.dsl
- USBPorts.kext
他のファイルを追加すると起動しなくなりますので注意…。筆者ボケてやってしまいました。。。
※最初に使用したUSBInjectAll.kextもこのとき一緒に削除しておきましょう。
あとはconfig.plistをスナップショットして再起動するだけです。
IORegistoryExplorerなどでポートが制限されているのを確認しておきましょう。
まとめ
以上、OpenCore環境におけるUSBマッピングの方法を解説してみました。Hackintoolのおかげでかなり簡単にできるようになりました。開発者の方には本当に頭が下がります。
ではでは。今後もOpenCore関係の入門用TIPSを執筆していきたいと思います。乞うご期待。
\ あわせて読みたい /