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マザーボードでも行いました。
Table of Contents
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から見たハードウェア構成がわかります。
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ピンソケットを調べるためには、こんなアダプタがあると便利です。
それぞれのポートに対応する番号を調べるためには、
- それぞれのポートにUSB機器(無線アダプタやマウスなど)を接続し、
- 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を調べました。各ポートの番号は以下のようになっていました。
- HS01 AsusTek社のAURA MOTHERBOARDが使用
- HS02 (不明, マザーボード上のU31G2_2の可能性あり)
- HS03 バックパネルUSB 3のUSB 2.0 (4列上から3番目、赤、”SS10”)
- HS04 バックパネルUSB 3のUSB 2.0 (4列上から4番目、赤、”SS10”)
- HS05 バックパネルUSB 3のUSB 2.0 (Eternetの下、赤、”SS10″)
- HS06 バックパネルUSB TYPE CのUSB 2.0 (Eternetの下)
- HS07 バックパネルUSB 3のUSB 2.0 (4列上から1番目、青、”SS”)
- HS08 バックパネルUSB 3のUSB 2.0 (4列上から2番目、青、”SS”)
- HS09 マザーボードの3.1 Gen 1端子U31G1_910に付随するUSB2.0
- HS10 マザーボードの3.1 Gen 1端子U31G1_910に付随するUSB2.0
- HS11 バックパネルUSB 2.0 (PS/2の真下, 無表記)
- HS12 バックパネルUSB 2.0 (PS/2の下, “BIOS”)
- HS13 マザーボードの2.0端子USB_E12, USB_E34 (USB2.0 Hub経由)
- HS14 マザーボード上のWiFi/Bluetoothモジュールが使用
HS09とHS10は、マザーボード上の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メモリを挿しながら調べました。
- SS01 (不明, 未使用?)
- SS02 (不明, マザーボード上のU31G2_2の可能性あり)
- SS03 バックパネルUSB 3.1 Gen 2 (4列上から3番目、赤、”SS10”)
- SS04 バックパネルUSB 3.1 Gen 2 (4列上から4番目、赤、”SS10”)
- SS05 バックパネルUSB 3.1 Gen 2 (Eternetの下、赤、”SS10″)
- SS06 バックパネルUSB TYPE CのUSB 3.1 Gen 2 (Eternetの下)
- SS07 バックパネルUSB 3.1 Gen 1 (4列上から1番目、青、”SS”)
- SS08 バックパネルUSB 3.1 Gen 1 (4列上から2番目、青、”SS”)
- SS09 マザーボードのU31G1_910の USB3.1 Gen 1
- SS10 マザーボードのU31G1_910の USB3.1 Gen 1
このマザーボードはHSとSSの数字部分が対応しているようです。バックパネル写真に合わせると以下のようです。ちなみに、バックパネルのUSB 3ポートには、青いポートにSS、そして赤いポートにSS10と表示が書いてあるのですが、これはそれぞれ3.1 Gen 1とGen 2を示しているようです。10というのはおそらくGen 2の転送速度である10 Gbpsのことだと思います。
SS09とSS10はマザーボード上のUSB 3.1 Gen 1ポートであるU31G1_910に接続しています。マニュアルの図を再掲します。
SS01とSS02は発見できませんでした。上で書いたように、このマザーボードは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と、バックパネルのポートを全て使うことにすると、必要なポートは以下のようになりました。
- HS03 バックパネルUSB 3のUSB 2.0 (4列上から3番目、赤、”SS10”)
- HS04 バックパネルUSB 3のUSB 2.0 (4列上から4番目、赤、”SS10”)
- HS05 バックパネルUSB 3のUSB 2.0 (Eternetの下、赤、”SS10″)
- HS06 バックパネルUSB TYPE CのUSB 2.0 (Eternetの下)
- HS07 バックパネルUSB 3のUSB 2.0 (4列上から1番目、青、”SS”)
- HS08 バックパネルUSB 3のUSB 2.0 (4列上から2番目、青、”SS”)
- HS11 バックパネルUSB 2.0 (PS/2の真下, 無表記)
- HS12 バックパネルUSB 2.0 (PS/2の下, “BIOS”)
- HS13 基板の2.0端子USB_E12, USB_E34 (USB2.0 Hub経由)
- SS03 バックパネルUSB 3 Gen 2 (4列上から3番目、赤、”SS10”)
- SS04 バックパネルUSB 3 Gen 2 (4列上から4番目、赤、”SS10”)
- SS05 バックパネルUSB 3 Gen 2 (Eternetの下、赤、”SS10″)
- SS06 バックパネルUSB TYPE CのUSB 3 Gen 2 (Eternetの下)
- SS07 バックパネルUSB 3 Gen 1 (4列上から1番目、青、”SS”)
- 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を除外することにしました。なんとなく残念ですが仕方ないです。そうすると使用するポートは以下になります。
- HS03 バックパネルUSB 3のUSB 2.0 (4列上から3番目、赤、”SS10”)
- HS04 バックパネルUSB 3のUSB 2.0 (4列上から4番目、赤、”SS10”)
- HS05 バックパネルUSB 3のUSB 2.0 (Eternetの下、赤、”SS10″)
- HS06 バックパネルUSB TYPE CのUSB 2.0 (Eternetの下)
- HS09 マザーボードの3.1 Gen 1端子U31G1_910に付随するUSB2.0
- HS10 マザーボードの3.1 Gen 1端子U31G1_910に付随するUSB2.0
- HS11 バックパネルUSB 2.0 (PS/2の真下, 無表記)
- HS12 バックパネルUSB 2.0 (PS/2の下, “BIOS”)
- HS13 基板の2.0端子USB_E12, USB_E34 (USB2.0 Hub経由)
- SS03 バックパネルUSB 3 Gen 2 (4列上から3番目、赤、”SS10”)
- SS04 バックパネルUSB 3 Gen 2 (4列上から4番目、赤、”SS10”)
- SS05 バックパネルUSB 3 Gen 2 (Eternetの下、赤、”SS10″)
- SS06 バックパネルUSB TYPE CのUSB 3 Gen 2 (Eternetの下)
- SS09 マザーボードのU31G1_910の USB3.1 Gen 1
- 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 |