ASUS ROG STRIX Z490-G GAMINGのUSBを設定する

ASUSのZ490マザーボードROG STRIX Z490-G GAMINGのUSBポートを調査して、USBPorts.kextを作りました。レジストリに何故か現れないオンボードUSB 2.0ピンの割り当てを探し当てました。また、15個制限撤廃パッチが危険なことを確認しました。

USBポート設定の手順

前回作成したASUS Z490マザーボードマシンのUSBポートを設定し、El Capitanで導入されたUSBポート数15個制限に対処します。このマシンのOSはmacOS Catalina 10.15.5でブートローダーはOpenCoreです。

USBポート設定の方法はこちらで紹介した方法です。

以下の手順で行います。この作業のツールには、ProperTreeとHackintoolを使います。

  1. 一時的に15個制限を撤廃して全部のUSBポートが見えるようにします。
  2. USBコネクタに無線ドングルやメモリを挿して、ポートが割り当てられた名前を特定します。
  3. 15個以内で使用したいポートを選びます。
  4. 使用する15個以内のポートとそのコネクターを記述したUSBPorts.kextを作ります。
  5. 15個制限撤廃を中止して、USBPorts.kextを有効にして再起動します。

15個制限を撤廃する

ポートの調査のために、OpenCoreのUSB 15個制限撤廃quirkであるXhciPortLimitを使います。まず、エディタやProperTreeなどでconfig.plistを開いて、XhciPortLimitをtrueにします。つぎに再起動して、HackintoolでUSB一覧を見ると、レジストリーに現れるXHCポートの一覧が出ます。このマザーボードでは、以下のように21個のポートが見えていました。Hackintoolでは既にZ490マザーボードにも対応してくれているらしく、コントローラ名にComet Lakeの文字が読めます。

USB ports map.

上の図では、HS11にだけデバイスが見えます。操作のために、以前紹介したトラックパッド付き無線キーボードを使っているので、その2.4 GHz無線ドングルが見えています。2.4 Gの文字の続きは文字化けしています。(「システム情報」で確認したら意味不明の漢字の羅列になってました。)

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を以下に公開しておきます。

注意していただきたいのは、この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個制限撤廃するパッチは副作用があることがわかりました。

返信を残す

メールアドレスが公開されることはありません。