USBポートを設定する

追記:この記事ではUSBの15個制限を簡易的に回避します。本気で対応するには、この記事の方法よりも、以下をお薦めします。


この記事の結論を先に書いておきます。

  • 15個の制限を外すパッチとUSBInjectAll.kextを併用すると全てのUSBポートが使えるようになる (tonymacx86のMultiBeast方式)
  • 15個制限解除パッチを使用せずに、USBInjectAll.kextのみを使って、実際に使用するポートを15個まで選択できる (お勧めの方式)

El Capitanから使用可能なUSBポートの数が、 コントローラ当たり15までと制限されました。その後のSierraでもHigh Sierraでも同じです。理由は不明です。15ポートもあれば十分と思われるかもしれませんが、そうでもありません。まず、USB 3ポートは、互換性のためにUSB 2.0の端子も持っています。なので、2ポート分としてカウントされます。また、USB 2.0の端子から先にアサインされるので、USB 3の端子が使えず、USB 3のポートがUSB 2.0相当になってしまうこともあります。その対策について説明します。

無も対策しない場合のUSB構成

まずは、何も対策しないとどうなるかを見て見ましょう。IORegistryExplorer.appなどのツールを使うと、macOSから見たハードウェア構成がわかります。 ちなみに表示される情報は、Cloverのパッチや各種kextが機能した後の結果で、マザーボードのUEFIが提示しているオリジナルの構成ではありません。

mac.softpedia.com

IORegistryExplorer.appを起動して、右上の虫眼鏡アイコンのところに、xhcと入力します。するとXHC関係の情報が現れます。XHCの下にHS01やSSP1と見えているのが、現在OSが認識しているUSBポートです。HSはHigh Speed、SSPはSuper Speed PlusでそれぞれUSBの速度のモードです。HSがUSB 2.0で、SSPはUSB 3です。

全く対策しない状態の手元のマザーボード(MSI Z97A Gaming 7)では、以下のような結果になりました。

USB 2.0がHS01からHS14までの14本あり、USB 3がSSP1の1本あるという結果です。このマザーボードには、実際には他にもSSP2からSSP6の5本のUSB 3があるのですが、15本の制限を超えてしまったので、見えなくなっています。そのポート、例えばSSP6に接続しているUSBポートにUSB 3のUSBメモリを挿しても読み書きできません。(ちなみに、そのポートにUSB 2.0のUSBメモリを刺すと、2.0の端子はHS10に接続されているので、読み書きできます。)

解決策1:15個の制限を取り払う

解決策の一つは、上限15個の制限を外すパッチを当てることです。次の手順で15個の制限を外して、チップセットに接続された全てのUSBポートを使用できます。

  1. config.plistにポート数を増やすパッチを当てる
  2. USBInjectAll.kextを使用する

1. 2.の両方を実施する必要があります。片方だけではダメです。この解決策の問題点は、パッチパターンがmacOSのバージョンごとに異なることです。パッチは、macOSの該当するバージョンにしか効きません。今使っているmacOS用のパッチが見つからない場合は、解決策2に進んでください。

ポート数を増やすパッチ

まずは、AppleUSBXHCIPCI.kextに以下のパッチを当てます( New USB Raise Port Limit Patch for High Sierra | tonymacx86.com より)。

<dict>
<key>Comment</key>
<string>Change 15 port limit to 24 in XHCI</string>
<key>Find</key>
<data>g32MEA==</data>
<key>Name</key>
<string>AppleUSBXHCIPCI</string>
<key>Replace</key>
<data>g32MGw==</data>
</dict>

これは10.13 PB1をインストールした100シリーズマザーボード用のパッチと書いてありましたが、正式版10.13でZ97チップマザーボードでも動きました。

一方で、10.13.4からは違うパッチを当てないといけないようです。

www.insanelymac.com

後にも書きましたが、ポート数を増やすパッチはmacOSのマイナーバージョンごとに違っています。マイナーアップデートの都度対応する必要があり、お勧めの方法ではないです。

USBInjectAll.kextを使用

次にUSBInjectAll.kextをEFI/CLOVER/kexts/Otherもしくはバージョン番号のフォルダに入れます。

RehabMan / OS-X-USB-Inject-All / Downloads — Bitbucket

このkextは、チップセットで用意されているUSBポートの全てをmacOSから参照できるように設定する機能があります。Z97チップセットのUSBは、PCIeのvender-id/device-idが8086/8cb1に割り当てられています(IORegistryExplorer.appで見ることができます)。USBInjectAll.kextの中のInfo.plistの8086_8xxxというキーを見ると、HS01からHS14とSSP1からSSP6までの20のポートがあることがわかります。

config.plistへのパッチ当てとUSBInjectAll.kextを使った結果を以下に示します。

このように、全てのUSBポートが使えるようになっていることがわかります。これで、順番の最後尾に並んでいたUSB 3も全て機能します。簡単に全USBを使えるように設定できました。tonymacx86で配布しているMultiBeastというインストールツールは、この手法を使っています。

実際に使っているUSBポートを特定する

上記の解決策で、全部のUSBが使えるようになります。簡単ですが、多少問題があります。まずは、そもそもmacOSが何らかの理由で15個に制限しているのに、その上限を増やしてしまって大丈夫なのかという懸念です。今のところ問題点は報告されていませんが、将来、何らかの副作用が出てくる可能性は否定できません。もう一つは、パッチの内容が、OSのバージョンやチップセットによって変わるらしいことです。今回のHigh Sierraへの移行にあたっても、パッチが更新されました。Sierraの時のパッチでは、上限を回避できないようです。この先のバージョンアップでも対応が必要になると思われます。

一方、USBInjectAll.kextは、名前は、「全てのUSBポートをインジェクトする」ですが、実際には、一部のUSBポートを遮断する機能があります。たとえば、もともとある20個のポートのうち、任意のポートを指定して、使用しないよう設定することができます。実際に使用しているポートだけを15個選んで設定すれば、15個の上限を外す必要は無くなります。そうすればconfig.plistに素性の良くないパッチを書き込む必要がなくなります。USBInjectAll.kextの方は、RahabManさんによってこまめに更新されているので、今後も安心して使用できます。

使用しないポートを除外するためには、実際に使っているUSBポートを特定する必要があります。ちょっと大変な作業ですが、マザーボードの構成を把握できるので、達成感はあります。それぞれのポートの番号は、

  1. それぞれのポートにUSB機器を接続し、
  2. IORegistryExplorer.app の表示の変化を確認する

ことで、特定できます。下の例は、とあるUSB 3ポートにUSB 3.0メモリを挿入してみたところです。SSP5のport-statusが、最初は0x0だったのですが、下の図のように0x1400に変化しました。(kUSBBusCurrentAllocationの値も変化しました。)これで、このポートはSSP5だということがわかります。このポートに、USB 2.0のデバイスを接続すれば、USB 2.0端子の番号もわかります。

こうして手元のマザーボードを調べて見ました。各ポートの番号は以下のようになっていました。

  • HS01 基板上のUSB 3の2.0端子 (フロントパネルで使用)
  • HS02 基板上のUSB 3の2.0端子 (フロントパネルで使用)
  • HS03 バックパネルのUSB 3の2.0端子
  • HS04 不明
  • HS05 バックパネルのUSB 2.0
  • HS06 バックパネルのUSB 2.0
  • HS07 不明
  • HS08 不明
  • HS09 バックパネルのUSB 3の2.0端子
  • HS10 バックパネルのUSB 3の2.0端子
  • HS11 基板上のUSB 2.0 (フロントパネルで使用)
  • HS12 基板上のUSB 2.0 (未使用)
  • HS13 基板上のUSB 2.0 (未使用)
  • HS14 基板上のUSB 2.0 (Bluetoothで使用)
  • SSP1 基板上のUSB 3 (フロントパネルで使用)
  • SSP2 基板上のUSB 3 (フロントパネルで使用)
  • SSP3 バックパネルのUSB 3
  • SSP4 不明
  • SSP5 バックパネルのUSB 3
  • SSP6 バックパネルのUSB 3

HS01,02,03,09,10は、それぞれSSP1,2,3,5,6のUSB 3ポートに含まれているUSB 2.0端子です。HS14はBluetoothモジュールに接続しているので、これを無効にするとキーボードもトラックパッドも使えなくなります。不明とあるポートは発見できませんでした。マザーボード上で配線されていないのかもしれません。

解決策2:使うポートを15個以下に選別する

行方不明のポートを使うことはありませんし、マザーボード上で接続していない端子のポートも当分は使いません。これを考えるとUSBポートを15個以下に絞り込むことができます。上の例では、HS04, HS07, HS08, HS12, HS13, SSP4は除外して良いです。

USBInjectAll.kextに除外するポートを伝える方法は、いくつかあるようですが、最も簡単なのは、Cloverのブートオプションで伝える方法です。HS04, HS07, HS08, HS12, HS13, SSP4を除外したい場合は、config.plistのBootキーの中にあるArgumentsキーに、

<key>Boot</key>
<dict>
    <key>Arguments</key>
    <string>uia_exclude=HS04;HS07;HS08;HS12;HS13;SSP4</string>

と書いておけば良いです。もしもすでに他のオプションが書いてあったら、空白で区切って追記します。例えば-vが書いてあって

<string>-v</string>

これを残したかったら、以下のようにします。

<string>-v uia_exclude=HS04;HS07;HS08;HS12;HS13;SSP4</string>

このconfig.plistで起動した結果を以下に示します。使用している14個のポート、HS01, 02, 03, 05, 06, 09, 10, 11, 14およびSSP1, 2, 3, 5, 6が機能していることがわかります。これなら15個未満ですので、config.plistへのパッチは不要です。

解決策3:DSDTを変更してUSBポートを選別する

こちらの記事でDSDTの変更でUSBポートを選別する方法を書いておきました。

3件のコメント

  1. 【[config.plist]で除外ポートを指定したのに除外されない問題について】

    9900K搭載Z390の記事を参考にして以下構成で作ってみました。
    特に問題もなく、バッチリ動作しております。

    OS:mojave 10.14.6
    Clover:5033
    マザボ:ASUS ROG STRIX H370-i GAMING
    CPU:Intel core i5 8400
    GPU:ROG-STRIX-RX560-O4G-GAMING
    メモリ:Crucial DDR4 2666 8GBx2
    SSD:シリコンパワー SSD 512GB SATA3 6Gb/s 2.5インチ 7mm

    そして、現在こちらの記事を参考にUSB15個制限対策を行っております。
    記事の説明通りUSBポートを特定し、解決策2を実行致しました。

    HS04とHS09とHS10が不要だったため、
    HackintoshのSSDをiMac(Sierra)に接続し[config.plist]を以下のように編集。

    -v uia_exclude=HS04;HS09;HS10

    編集後SSDをHackintoshに戻し起動。
    問題なく起動後[IORegistryExplorer.app]にてxhcを確認したところ、
    HS04とHS09とHS10が消えずに表示されたままでした。

    起動中のHackintoshの[EFI]をマウントし確認しましたが、
    [USBInjectAll.kext]は[EFI/CLOVER/kexts/Other]の中にしっかり入っています。
    [config.plist]も編集されたものが間違いなく入っていました。

    その後、何度か再起動を繰り返しましたが結果は変わりませんでした。
    HS04とHS09とHS10が消えない点について、思い当たる問題点はございますでしょうか?

    ご助言頂ければ幸いです。よろしくお願い致します。

    1. ありがとうございます!!
      SMBIOSをiMac 19.2にしていたので、頂いた情報で無事解決致しました。

      調べが甘かったですね。
      お騒がせ致しました。

wakemars へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です