ASUSのZ490マザーボードROG STRIX Z490-G GAMINGのUSBポートを調査して、USBPorts.kextを作りました。レジストリに何故か現れないオンボードUSB 2.0ピンの割り当てを探し当てました。また、15個制限撤廃パッチが危険なことを確認しました。
Table of Contents
USBポート設定の手順
前回作成したASUS Z490マザーボードマシンのUSBポートを設定し、El Capitanで導入されたUSBポート数15個制限に対処します。このマシンのOSはmacOS Catalina 10.15.5でブートローダーはOpenCoreです。
Intel第10世代デスクトップCPU 10600を搭載したASUSのZ490マザーボードに、OpecCoreで起動するmacOS Catalinaをインストールしました。とりあえずは動く状況です。CPU, iGPU, スリープは動いていますが、オンボードのEthernet, サウンドがまだ動きません。参考にしたページSchmockLoadさんが、GIGABYTE Z490 Vision Dにインストールした様子をGitHubにまとめてくれていたので最初はこれを参考にしていました。でも作業を進めているうちに、OpenCoreが0.5.9になり、ガイドのページも更新されて、なんとComet Lake-S用のconfig.plistを作... Comet Lake-S 10600とZ490でmacOSを動かす - Boot macOS |
USBポート設定の方法はこちらで紹介した方法です。
macOSのUSB 15個制限を解決するために、使用する15個未満のUSBポートを決定し、macOSに伝えます。以前の記事でいくつかの方法を紹介しましたが、今回はHackintoolを使ってkextを作ります。作業が楽で、作ったkextを1個インストールするだけなので簡単でした。USBポート個数対処の方法今までの記事では、USBポート個数制限に対処する方法として、 AppleUSBXHCIPCI.kextにパッチを当てる OpenCoreのconfig.plistでXhciPortLimitをtrueにする DSDTを書き換えて使用する15個のUSBポートを指定する USBInjectAll.kextとブートオプション... 15個制限のためのUSBPorts.kextをHackintoolで作る - Boot macOS |
以下の手順で行います。この作業のツールには、ProperTreeとHackintoolを使います。
- 一時的に15個制限を撤廃して全部のUSBポートが見えるようにします。
- USBコネクタに無線ドングルやメモリを挿して、ポートが割り当てられた名前を特定します。
- 15個以内で使用したいポートを選びます。
- 使用する15個以内のポートとそのコネクターを記述したUSBPorts.kextを作ります。
- 15個制限撤廃を中止して、USBPorts.kextを有効にして再起動します。
15個制限を撤廃する
ポートの調査のために、OpenCoreのUSB 15個制限撤廃quirkであるXhciPortLimitを使います。まず、エディタやProperTreeなどでconfig.plistを開いて、XhciPortLimitをtrueにします。つぎに再起動して、HackintoolでUSB一覧を見ると、レジストリーに現れるXHCポートの一覧が出ます。このマザーボードでは、以下のように21個のポートが見えていました。Hackintoolでは既にZ490マザーボードにも対応してくれているらしく、コントローラ名にComet Lakeの文字が読めます。
上の図では、HS11にだけデバイスが見えます。操作のために、以前紹介したトラックパッド付き無線キーボードを使っているので、その2.4 GHz無線ドングルが見えています。2.4 Gの文字の続きは文字化けしています。(「システム情報」で確認したら意味不明の漢字の羅列になってました。)
macOSの操作には純正キーボードとトラックパッドがお勧めです。しかしBluetooth (BT) 接続なので、OS起動前段階のBIOSやCloverの操作で使えないことがあります。なので非常用に非BT方式のトラックパッド付き無線キーボードを調達しました。BIOSとCloverの設定macOSが起動する前段階で、BIOS (UEFI) の設定を変えたい、Cloverの設定を変えたい、EFI Shellを使いたいなど、キーボードを使いたい場面は多いです。ポインティングデバイスも使いたいかもしれません。そこで、macOS起動前に使用する入力装置の選択肢について考えてみます。Bl... 格安のトラックパッド付き無線キーボード - Boot macOS |
USBポートを特定する
初期状態では、Connectorの種類がでたらめです。またCommentの欄は空白です。そこで、USB 2.0と3.0のUSBデバイスをポートに一つ一つ挿しては外して調べます。バックパネルに出ているUSBポートはType-AとType-Cのコネクタになっているので調査は簡単です。でもマザーボード上のコネクタは通常のUSBコネクタではなく、内部接続用のヘッダピンとType-C用の特殊なコネクタ (Key-Aという名前らしいです) です。そこで、従来型USBヘッダピンをType-Aに変換するアダプター(USB 2.0用とUSB 3.1用)と、Key-AをType-Cに変換するアダプターを、それぞれ用意しました。
試験のために使うUSB 2.0デバイスには、出所不明のUSB WiFiドングルを使いました。USBメモリを使うと外す時にアンマウントの手間が不要ですが、無線ドングルならいきなり抜けます。USB 3.0のデバイスとしてはUSBメモリーを使いました。USBデバイスを挿していくと、Hackintoolの一覧の該当するポート名の行にデバイスの情報が現れます。これにより、ポート名と実際のポートの割り当てが特定できます。この時に、そのポート名のコネクタータイプ (USB2, USB3, Type-C Sw, Type-C, Internalのいずれか)を選択しておきます。またコメント欄に、対応する物理ポートの情報を英語でメモ書きしておくと、その内容がkextに反映されます。将来のメンテナンスなどの時に便利です。
バックパネルのType-Cは、反対向きに挿しても同じSS04に接続されました。これはスイッチで切り替えているようなのでコネクタタイプをTypeC+Swに設定します。一方で、オンボードのType-Cは、反対向きに挿すとそれぞれSS05とSS06に接続します。なのでUSB 3.2が2本使われている本格的なTypeCのようです。この作業により、上の図のポートの全てが、それぞれバックパネル(ASUSの仕様書に合わせてRearとコメントしました)とマザーボード上(仕様書に合わせてFrontとコメントしました)のUSBコネクタであることを確認しました。こうして完成したUSBポート一覧が以下です。何故かHS06が見当たりません。
オンボードUSB 2.0が見つからない
上の結果では、Z490-Gマザーボード上のUSB 2.0が見つかりませんでした。これは、昔ながらの黒いピンヘッダで、マニュアルにUSB_E12とUSB_E34と書かれています。
一つのヘッダピンに2個のUSB 2.0が配線されているので、合計4個のUSB 2.0が行方不明です。マザーボードのヘッダピンに、Type-A変換アダプタを挿して、USBデバイスを付けても、HackintoolやIORegistryExplorerの一覧に出てきません。USBメモリを付けても、マウントされずファインダーにも現れません。Windowsでは試していませんが、BIOSではここに挿したUSBメモリが起動ドライブとして見えています。macOSだけの問題のようです。Hackintoshで、純正WiFi/BluetoothモジュールをPCIe接続する場合、基板上のUSB 2.0ヘッダピンに信号を接続するのが一般的です。USB 3.1の2.0信号ピンに接続しても良いのですが、コネクタを付け替えるのが面倒です。なので、できればマザーボード上のUSB 2.0ヘッダピンを使いたいところです。
そこで怪しいのが欠番のHS06です。上のUSBポート一覧はHackintoolの画面をですが、IORegistryExplorerで調べてもやはりHS06は見えません。見えていないHS06がオンボードUSB 2.0である可能性が高いです。ASUSの最近のマザーボードでは(Z390がそうでしたが)オンボードのUSB 2.0は、USBハブを通して分割されて実装されているようです。このマザーボードも、HS06をハブで4個に分割してヘッダピンに接続していると思われます。もしかしたらハブを使っているために、レジストリーに現れないのかもしれません。
ということで、HackintoolのExportボタンで作ったUSBPorts.kextのInfo.plistに、HS06のエントリーを追加してみることにしました。具体的には、以下の記述を、HS05とHS07の記述の間に挿入しました。base64のBgAAAA==は、0x06000000です。
<key>HS06</key> <dict> <key>Comment</key> <string>Front USB 2.0 (USB_E1234)</string> <key>UsbConnector</key> <integer>255</integer> <key>name</key> <string>HS06</string> <key>port</key> <data> BgAAAA== </data> </dict>
こうして作成したUSBPorts.kextを使って起動した結果が以下です。目論見通り、HS06が現れて、それがUSB2.0 Hubに接続されている様子が表示されました。この状態で、Type-Aアダプタを経由してUSBメモリを接続すると、macOSのファインダー上に正しくマウントされました。
ここで作成したUSBPort.kextのInfo.plistを以下に公開しておきます。
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time. USBPorts.Info.plist_ASUS_Z490G - Pastebin.com - Pastebin |
注意していただきたいのは、このplistの中の、25行目と344行目です。それぞれ、
<key>iMac19,1-XHC</key>
と
<string>iMac19,1</string>
となっています。これは機種IDをiMac19,1にした場合の設定です。実はこの後、iMac20,1が発売されたので、config.plistの設定をCPUが合致するiMac20,1に変更しました。そしたらこのkextが動かなくなって悩んだのですが、ここに機種ID依存の設定が入っていました。Hackintool.appは、稼働しているマシンの機種IDを自動的に書き込んでくれます。なので、後から機種IDを変更する場合は、ここも変更する必要があります。
ASUS Z490-GのUSBポート一覧
ASUS Z490マザーボードROG STRIX Z490-G GAMINGのUSBポートは以下のように割り当てられていました。このマザーボードを使う方は参考になさってください。
- HS01:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から1番目(基板から遠い方)
- HS02:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から2番目
- HS03:リアパネルEthernet直下のUSB 3.2 Gen 2 Type-A
- HS04:リアパネルUSB 3.2 Gen 2 Type-C
- HS05:マザーボード上のUSB 3.2 Gen 2 Key-A
- HS06:ハブ経由でマザーボード上のUSB 2.0 USB_E12とUSB_34に接続
- HS07:マザーボード上のUSB 3.2 Gen1 U32G1_78
- HS08:マザーボード上のUSB 3.2 Gen1 U32G1_78
- HS09:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から3番目
- HS10:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から4番目(基板側)
- HS11:リアパネルに2個あるUSB 2.0 Type-Aの上(基板から遠い方)
- HS12:リアパネルに2個あるUSB 2.0 Type-Aの下(基板側)
- SS01:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から1番目(基板から遠い方)
- SS02:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から2番目
- SS03:リアパネルEthernet直下のUSB 3.2 Gen 2 Type-A
- SS04:リアパネルUSB 3.2 Gen 2 Type-C
- SS05:マザーボード上のUSB 3.2 Gen 2 Key-A
- SS06:マザーボード上のUSB 3.2 Gen 2 Key-A
- SS07:マザーボード上のUSB 3.2 Gen1 U32G1_78
- SS08:マザーボード上のUSB 3.2 Gen1 U32G1_78
- SS09:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から3番目
- SS10:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から4番目(基板側)
リアパネルの配置は以下になりました。
マザーボード上のUSBピンの割り当ては以下です。
15個のポートを選別する
こうして全てのポートがHackintoolに現れるようになったところで、全部で15個になるように選別します。今回は、マザーボード上のUSB 3.1ポートを全て使わない設定にしました。バックパネルのポート全てと、マザーボード上のUSB 2.0ポートだけを有効にします。ということで、以下の15個のポートを使うことにしました。
- HS01:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から1番目(基板から遠い方)
- HS02:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から2番目
- HS03:リアパネルEthernet直下のUSB 3.2 Gen 2 Type-A
- HS04:リアパネルUSB 3.2 Gen 2 Type-C
- HS06:ハブ経由でマザーボード上のUSB 2.0 USB_E12とUSB_34に接続
- HS09:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から3番目
- HS10:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から4番目(基板側)
- HS11:リアパネルに2個あるUSB 2.0 Type-Aの上(基板から遠い方)
- HS12:リアパネルに2個あるUSB 2.0 Type-Aの下(基板側)
- SS01:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から1番目(基板から遠い方)
- SS02:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から2番目
- SS03:リアパネルEthernet直下のUSB 3.2 Gen 2 Type-A
- SS04:リアパネルUSB 3.2 Gen 2 Type-C
- SS09:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から3番目
- SS10:リアパネルに4個あるUSB 3.2 Gen 1 Type-Aの上から4番目(基板側)
HackintoolのExportボタンを使って15個制限版USBPorts.kextを作ります。全部を有効にしたUSBPorts.kextは、後に使用するポートを変更する場合に再利用できるので、USBPorts_all.kextというように改名して保存しておくことにしました。個数を制限したUSBPorts.kexを使い、XhciPortLimitをfalseにして起動したところ、以下のようになりました。全部で15個が有効になっています。マザーボード上のUSB 2.0 (HS06) も使えているので無線カードの使用にも問題ありません。
15個制限撤廃パッチは危険
今回の作業中に、USBポート一覧表に異常な現象が発生して、15個制限撤廃パッチはやはり危険なのではと実感しました。そのことをご紹介します。
USBポート一覧表をもう一度見てみましょう。上の一覧にUSBコントローラ(XHC)の情報が書いてあります。そのIDが0x14です。USB Portsの一覧には、Location IDの項目があり、XHC IDの0x14に引き続き1番から番号が振られています。つまり、0x141, 0x142, 0x143, …と順番にLocation ID番号が振られています。OpenCoreのマニュアルによると、macOSのLocation IDが4ビットしかないのに無理して個数を増やしているのが、15個制限撤廃パッチの問題点だと書いてありました。なので、macOSが正式に使っているLocation IDは、この場合、0x141から0x14Fまでの15種類だと思われます。パッチで15個以上のポートを有効にしてしまったので、0x14Fの次に来るSS05はIDが0x140になり、次のSS06以降では再び0x141に戻ってしまっています。つまりSS06以降のポートには、HS01以降のポートと同じLocation IDが割り当てられてしまっています。
Location IDが重複していては、何かの不具合が出ても不思議ではありません。さらには、本来割り当てされないはずの0番、つまり0x140のIDが割り当てられていることも問題のようでした。
ポートを調査している段階では、Location ID 0x140はSS05に割り当てられていました。これはマザーボード上のType-C (key-A) のUSB 3.1 Gen2の2個のうちの一つでした。ここにMacBookなどで使用する以下のようなType-Cアダプタ
を接続した時の一覧を下に示します。このアダプタには、USB 3.1 Gen1 Type-Aが3個、HDMIコネクタ、SDカードリーダーが装備されています。その結果、SS05に変換器の中にあるUSB3.0 Hubが現れています。また、HS05にもUSB 2.0 Hubが現れています。ここまでは正常なのですが、リアパネルに接続されているはずのHS03にも何故かUSB3.0 Hubが現れ、さらにはこれもリアパネルのHS04にも、NS1081という謎のデバイスが現れています。しかも、HS03に現れるUSB3.0 Hubの表示は、現れたり消えたりを毎秒数回繰り返し不安定です。謎のデバイスであるNS1081を検索したところ、SDカードなどをUSB接続するコントローラチップのようです。アダプタ内部のハブとデバイスが、全く関係ないポート(HS03とHS04)に不安定に現れてしまっているようです。ちなみにType-Cの向きを変えて、USB 3.1としてSS06の方を使用すると、このような不具合は発生しませんでした。本来使用されない0番のLocation ID (0x140) が割り当てられたSS05ポートが活性化してしまったので、このような不具合が発生しているのではと思われます。15個制限をパッチで回避したための副作用なのでしょう。
今回行ったように、15個を指定するkextを作って、XhciPortLimitをfalseにしていれば、このような異常現象は発生しません。15個制限撤廃パッチは、インストール直後の調整用の場面でのみ使用し、使い続けない方が良いと思いました。
まとめ
ASUSのROG STRIX Z490-G GamingマザーボードのUSBポート名を特定して、使用する15個を選択するkextを作りました。無線カードで使用するオンボードのUSB 2.0がレジストリに現れないので、kextで指定したところ認識できました。また15個制限撤廃するパッチは副作用があることがわかりました。