サイトアイコン Boot macOS

ASUS MAXIMUS XI HEROのUSBを設定する

ASUS マザーボードのUSB設定をしました。使わないUSBポートの番号を調べ、その番号をconfig.plistに書きます。これでmacOSの個数制限によりUSB 3が使えなくなる事態を回避します。以下の記事で紹介しているように、ASUS MAXIMUS HEROマザーボードに9900Kを搭載したマシンは順調に稼働しています。

 久々に最新パーツで組んでみたところ、macOSがすんなり動きました。インテルの第9世代CoreプロセッサCoffee Lake-S Refresh搭載のZ390チップセットマザーボードです。スロット数で選んだマザーボード最新パーツでHackintoshを作る上で、マザーボードは選択肢が豊富なパーツです。市販の300シリーズチップセット搭載マザーボードのほとんどでHackintosh可能です。拡張スロット構成、SATA/USB/m.2コネクタ構成、追加機能、色とデザインなど考慮して、各人の目的や好みに合わせて自由に選んで良いです。だいたいどれでもちゃんと動...
9900K搭載Z390マザーボードでHackintoshを作る - Boot macOS

今回、回避しようとしているのは、macOSのUSB個数制限です。macOS El Capitanから使用可能なUSBポートの数が、 コントローラ当たり15までと制限されまてしまいました。理由は不明です。この対策は何通りかありますが、15個の制限は残したまま、使用しないUSBポートを除外するようconfig.plistに設定するのが一番良いと思います。

追記:この記事ではUSBの15個制限を簡易的に回避します。本気で対応するには、この記事の方法よりも、以下をお薦めします。この記事の結論を先に書いておきます。 15個の制限を外すパッチとUSBInjectAll.kextを併用すると全てのUSBポートが使えるようになる (tonymacx86のMultiBeast方式) 15個制限解除パッチを使用せずに、USBInjectAll.kextのみを使って、実際に使用するポートを15個まで選択できる (お勧めの方式)El Capitanから使用可能なUSBポートの数が、 コントローラ当たり15までと制限されました。その後のSierraでもHigh Si...
USBポートを設定する - Boot macOS

上の記事では、MSI Z97A Gaming 7マザーボードを例に、使用しないポートをconfig.plistに書くことで、必要なUSBポートが使用可能になるよう設定しました。同じ手順をASUS MAXIMUS XI HEROマザーボードでも行いました。

USBInjectAll.kext

まずはUSBInjectAll.kextを入手してEFI/CLOVER/kexts/Otherフォルダに入れます。

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

このkextは、チップセットで用意されているUSBポートの全てをmacOSから参照できるように設定する機能があります。この記事で利用しようとしている機能、config.plistの起動オプションで使用しないポートを除外する機能は、このkextが提供しています。

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

まずは、何も対策しないとどのUSBポートが見えているのかを確認します。IORegistryExplorer.appなどのツールを使うと、macOSから見たハードウェア構成がわかります。

mac.softpedia.com

IORegistryExplorer.appを起動して、右上の虫眼鏡アイコンのところに、xhcと入力します。するとXHC関係の情報が現れます。全く対策しない状態のASUS MAXIMUS XI HEROマザーボードでは、以下のような結果になりました。

XHCの下にHS01~14とUSR1が見えています。これらが現在OSが認識しているUSBポートです。macOSは15個しか認識しないので、アドレスの低い方から15個のポートが見えています。マザーボードにはこれ以外にもUSBポートがあるのですが、15個超えているものは見えません。

USRを除外する

HSはHigh Speedの略でUSB 2.0のことです。USRは、tonymacx86の説明によると何らかの都合で見えてしまっているダミーのポートらしいです。なので除外しても良いらしいです。とりあえずUSR1を除外してみましょう。USBInjectAll.kextを使用した上で、config.plistのBoot Argumentsに以下のように指定します。

    <key>Boot</key>
    <dict>
        <key>Arguments</key>
        <string>uia_exclude=USR1</string>

この結果、IORegistryExplorer.appの表示が以下のようになりました。

新たにUSR2が見えるようになりました。実はこれも実存しない不要なポートらしいです。これも除外しましょう。

    <key>Boot</key>
    <dict>
        <key>Arguments</key>
        <string>uia_exclude=USR1;USR2</string>

この結果、IORegistryExplorer.appの表示が以下のようになりました。

不要なUSR1, USR2を消したので、ようやくSSが見えてきました。SSはSuper Speedの略で、USB 3のポートを示しています。

HS (USB 2.0) ポートを特定する

この段階で見えているHSポートであるHS01からHS14の14個が、マザーボードにあるとmacOSが認識している全てのUSB 2.0ポートです。これがどこのポートなのか特定していきます。ちょっと大変な作業ですが、マザーボードの構成を把握できるので、達成感はあります。

マザーボード上のUSB 2.0ピンソケットを調べるためには、こんなアダプタがあると便利です。

それぞれのポートに対応する番号を調べるためには、

  1. それぞれのポートにUSB機器(無線アダプタやマウスなど)を接続し、
  2. IORegistryExplorer.app の表示の変化を確認する

ことで、特定できます。下の例は、とあるUSB 2.0ポートにLogicoolの無線キーボードアダプタを挿入してみたところです。HS11のport-statusが、最初は0x0だったのですが、下の図のように0x1100に変化しました。これで、このポートはHS11だということがわかります。USB 3のポートの場合、2.0と3の両方を持っていますから、USB 3.0のデバイスを挿せばUSB 3.0の番号が、USB 2.0のデバイスを接続すれば、USB 2.0端子の番号の、それぞれの該当項目が変化します。

こうしてASUS MAXIMUS XI HEROマザーボードのUSB 2.0を調べました。各ポートの番号は以下のようになっていました。

HS09HS10は、マザーボード上のUSB 3.1 Gen 1ポートに接続しています。マニュアルには下のような図面があります。マザーボード上にU31G1_910と書かれたソケットがあり、ここにUSB 3.1 Gen 1が2本出ています。それぞれに付随しているUSB 2.0端子がHS09とHS10に接続しています。


HS13は、マザーボード上のUSB 2.0端子に接続しています。マニュアルには下のような図面があります。マザーボード上にはUSB_E12, USB_E34という名称のソケットがあり、ここにUSB 2.0が4ポート出ています。ただ、これらの4ポートは内部でUSBハブに接続していて、HS13が大元になっているようです。今回は、この基板上USB 2.0端子の一つにBluetoothユニットを接続しています。なので、HS13だけは除外できない重要なポートです。

バックパネル部分は以下になります。

少し面白い発見だったのはHS01です。IORegistryExplorer.appの検索窓の文字を消すと、絞込み機能が無効になり、全ての情報が見えるようになります。そしてHS01の詳細を見てみます。すると以下のように、名前がAURA MOTHERBOARDになっていて、製造者名はAsusTek Computer Inc.と表示されます。どうやらマザーボードの電飾ユニットに接続されている様子です。もしもこれをプログラムできればmacOSから電飾をコントロールできるのかと思われます。

マザーボードが使っているUSB 2.0はもう一つあります。HS14です。これはバックパネルにアンテナが出ているインテル製のWiFi/Bluetoothモジュールが使っています。この無線モジュールは、内部がA/E KeyのM.2ソケットになっているのですが、このKeyのソケットにはUSB 2.0が1個含まれています。そのUSB 2.0がHS14に接続されているようです。BIOSで無線モジュールをEnabledにして起動すると以下のようにBluetooth Host Controllerと表示されます。Disableにした時は何も接続されない状態の表示になります。idVendorの項目を見ると0x8087です。これはインテル社のIDです。

Bluetooth以外のHS (USB 2.0)を全部除外する

USR1, USR2を除外したことで、USB 3としてはSS01があることはわかりました。他のUSB 3ポートは15個の制限で隠されています。そこで、全てのUSB 3ポートを調べるために、絶対必要なHS以外を一時的に除外します。Bluetoothaは基板のHS13に接続されているので、これが無いとキーボードとトラックパッドの操作できなくなってしまいます。そこで、これ以外のHSを全部除外してみます。Boot Argumentsに以下を書いてみました。

    <key>Boot</key>
    <dict>
        <key>Arguments</key>
        <string>>uia_exclude=USR1;USR2;HS01;HS02;HS03;HS04;HS05;HS06;HS07;HS08;HS09;HS10;HS11;HS12;HS14</string>

この結果、IORegistryExplorer.appの表示が以下のようになりました。

HS13を含めて全部で11項目あります。15個未満なので、これで全てです。ということでこのマザーボードにはSS01からSS10までの10個のUSB 3があることがわかりました。

このマザーボードはインテルのZ370チップセットを使っているのですが、インテルの仕様によるとUSB 2.0が14本、USB 3.1が10本あり、最大で14本のUSB 2.0/3.1を使用できることになっています。このマザーボードはチップセットが提供するUSBの全てを使っているようです。

SS (USB 3) ポートを特定する

USB 3であるSSがSS01からSS10まで10個見えるようになりました。これらのうちバックパネルのSSを特定しました。これにはUSB 3.0のUSBメモリを挿しながら調べました。

このマザーボードはHSとSSの数字部分が対応しているようです。バックパネル写真に合わせると以下のようです。ちなみに、バックパネルのUSB 3ポートには、青いポートにSS、そして赤いポートにSS10と表示が書いてあるのですが、これはそれぞれ3.1 Gen 1とGen 2を示しているようです。10というのはおそらくGen 2の転送速度である10 Gbpsのことだと思います。

SS09SS10はマザーボード上のUSB 3.1 Gen 1ポートであるU31G1_910に接続しています。マニュアルの図を再掲します。

SS01SS02は発見できませんでした。上で書いたように、このマザーボードはUSB 3.1とこれに付随するUSB 2.0のそれぞれのHSとSSに、同じ番号を割り当てています。HS01はマザーボードの電飾コントローラと思われるので、これに対応するSS01は存在しないのかと推測されます。SS02とこれに関係する可能性のあるHS02は、共に発見できませんでした。このマザーボード上にはUSB 3.1 Gen 2のコネクタもついています。U31G2_2という名前です。別売の「USB 3.1 Gen 2 ポート増設用モジュール」というものを接続するコネクタらしいのですが、手元に無いのでチェックできませんでした。SS02とHS02は、このU31G2_2に接続しているのかもしれません。

必要なUSBポートを選んで他を除外する

さて以上からほぼ全てのUSBポートの番号がわかりました。ここから、使用したいUSBポートを最大15個選び、それ以外の使用しないポートを除外する設定をします。

基板上の3.1 Gen 1コネクタを使用しない場合

マザーボード上のUSB 3.1 Gen 1ポートであるU31G1_910を使用しない場合を考えます。基板上のUSB 2.0コネクタに関しては、Bluetoothモジュールが使用するのでこれ (HS13) は外せません。HS13と、バックパネルのポートを全て使うことにすると、必要なポートは以下のようになりました。

  1. HS03 バックパネルUSB 3のUSB 2.0 (4列上から3番目、赤、”SS10”)
  2. HS04 バックパネルUSB 3のUSB 2.0 (4列上から4番目、赤、”SS10”)
  3. HS05 バックパネルUSB 3のUSB 2.0 (Eternetの下、赤、”SS10″)
  4. HS06 バックパネルUSB TYPE CのUSB 2.0 (Eternetの下)
  5. HS07 バックパネルUSB 3のUSB 2.0 (4列上から1番目、青、”SS”)
  6. HS08 バックパネルUSB 3のUSB 2.0 (4列上から2番目、青、”SS”)
  7. HS11 バックパネルUSB 2.0 (PS/2の真下, 無表記)
  8. HS12 バックパネルUSB 2.0 (PS/2の下, “BIOS”)
  9. HS13 基板の2.0端子USB_E12, USB_E34 (USB2.0 Hub経由)
  10. SS03 バックパネルUSB 3 Gen 2 (4列上から3番目、赤、”SS10”)
  11. SS04 バックパネルUSB 3 Gen 2 (4列上から4番目、赤、”SS10”)
  12. SS05 バックパネルUSB 3 Gen 2 (Eternetの下、赤、”SS10″)
  13. SS06 バックパネルUSB TYPE CのUSB 3 Gen 2 (Eternetの下)
  14. SS07 バックパネルUSB 3 Gen 1 (4列上から1番目、青、”SS”)
  15. SS08 バックパネルUSB 3 Gen 1 (4列上から2番目、青、”SS”)

なんと全部でちょうど15個です。そこで、これ以外を除外するよう設定します。

    <key>Boot</key>
    <dict>
        <key>Arguments</key>
        <string>uia_exclude=USR1;USR2;HS01;HS02;HS09;HS10;HS14;SS01;SS02</string>

末尾に近いSS09以降は、除外リストに入れる必要はないです。この結果、IORegistryExplorer.appの表示が以下のようになりました。

基板上の3.1 Gen 1コネクタを使用する場合

大抵のPCケースには全面パネル近辺にUSB 3.1 Gen 1ポートが2個付いています。これを使用するためには、マザーボード上のU31G1_910に接続することになります。U31G1_910は、HS09, HS10, SS09, SS10です。先のリストは最大限度の15個に達しているので、4個を削除しないとこれらを使えません。そこでバックパネルにあるUSB 3.1 Gen 1の青いポートであるHS07, HS08, SS07, SS08を除外することにしました。なんとなく残念ですが仕方ないです。そうすると使用するポートは以下になります。

  1. HS03 バックパネルUSB 3のUSB 2.0 (4列上から3番目、赤、”SS10”)
  2. HS04 バックパネルUSB 3のUSB 2.0 (4列上から4番目、赤、”SS10”)
  3. HS05 バックパネルUSB 3のUSB 2.0 (Eternetの下、赤、”SS10″)
  4. HS06 バックパネルUSB TYPE CのUSB 2.0 (Eternetの下)
  5. HS09 マザーボードの3.1 Gen 1端子U31G1_910に付随するUSB2.0
  6. HS10 マザーボードの3.1 Gen 1端子U31G1_910に付随するUSB2.0
  7. HS11 バックパネルUSB 2.0 (PS/2の真下, 無表記)
  8. HS12 バックパネルUSB 2.0 (PS/2の下, “BIOS”)
  9. HS13 基板の2.0端子USB_E12, USB_E34 (USB2.0 Hub経由)
  10. SS03 バックパネルUSB 3 Gen 2 (4列上から3番目、赤、”SS10”)
  11. SS04 バックパネルUSB 3 Gen 2 (4列上から4番目、赤、”SS10”)
  12. SS05 バックパネルUSB 3 Gen 2 (Eternetの下、赤、”SS10″)
  13. SS06 バックパネルUSB TYPE CのUSB 3 Gen 2 (Eternetの下)
  14. SS09 マザーボードのU31G1_910の USB3.1 Gen 1
  15. SS10 マザーボードのU31G1_910の USB3.1 Gen 1

これ以外を除外するには以下のように設定します。

    <key>Boot</key>
    <dict>
        <key>Arguments</key>
        <string>uia_exclude=USR1;USR2;HS01;HS02;HS07;HS08;HS14;SS01;SS02;SS07;SS08</string>

この結果、IORegistryExplorer.appの表示が以下のようになりました。

補足:バックパネルのUSBポート

マザーボードのマニュアルに掲載されているバックパネルのポートの説明図は以下です。USB 3ポートのうち、青いポートがGen 1ポート、赤いポートとType CポートがGen 2ポートのようです。

つづき:USB構成を記述したSSDTを作る

この記事では起動オプションで使用USBポートを指定しています。USBInjectAllの機能をフルに活用するためには、SSDTファイルを作ることが理想的です。続きは以下の記事をご覧ください。

 USBInjectAll.kextの役割を確認するために外して調べてみました。マザボ搭載USBポートの情報を正しく反映するために必要でした。さらに正確に反映させるためのSSDTを作りました。USBInjectAll.kextの役割このkextを外してみるRehabManさんが開発してくれているUSBInjectAll.kextは、いつも使用しているのですが、そのありがたみがイマイチ理解できていませんでした。そこで外してみたらどうなるのか調べました。USBポートの状態を調べるために、macOSから見えるハードウェア構成を確認するツールであるIORegistryExplorerを使用...
15個制限を回避するUSBInjectAll.kextの役割と使用法 - Boot macOS
モバイルバージョンを終了