シングルボードコンピュータLattePanda AlphaにmacOSをインストールした記事を書きました。その続編です。今回は、USB環境を整えました。
Table of Contents
USBポートの名前を調べる
LattePand Alphaには3個のUSB 3 Type-Aコネクタと、1個のUSB 3 Type-Cコネクタがついています。USB 3 Type-Cコネクタは電源供給に使っていますが、こういうタイプの変換器を使ってみたらUSB 3として機能していることが確認できました。
BIOS設定画面では、USB 3が4個あることになっていました。それぞれをenable/disableできます。
どうやらType-CのコネクタにはUSB 3が一本あって(Type-Cの本来の規格ではUSB 3は2本可能です)、それがPort1という名前になっているようです。ということは明らかにPort2, 3, 4が3個のType-Aのどれかに相当するはずです。BIOSで一つづつdisableにして、どのコネクタが使えなくなるのか確認しました。その結果、
上のよう名前が割り当てられていることがわかりました。以下、この名前でコネクタを区別していきます。
macOSのUSB個数制限
こちらで説明したようにEl Capitan以来のmacOSには、使えるUSBが最大15ポートであるという謎の制限があります。その制限に該当してしまうと、USBコネクタが使えなくなります。回避の方法はいくつかありますが、一番簡単で、副作用がなくて、macOSのアップデートに影響されない方法は、
- USBInjectAll.kextを使用して
- config.plistのBoot Argumentsで除外するポートを記述する
という方法です。これを行うためには、LattePanda Alphaのどのポート番号が使いたいUSBコネクタに対応しているのかを特定する必要があります。
Lattepanda AlphaのUSB構成
無対策で起動
まずは、USB個数制限に対してなんの対策もせずにmacOSを起動してみました。IORegistryExplorer.appなどのツールを使うと、macOSから見たハードウェア構成がわかります。IORegistryExplorer.appはAppleの開発サイトからダウンロードできます。
ここからAppleIDでログインして、Additional Toolsで検索して出てくるツールをダウンロードします。検索結果は複数出てきますが、最新のものをダウンロードすれば良いです。その中にIORegistryExplorer.appがあります。
IORegistryExplorerが起動したら、xhcで検索します。するとUSBポート一覧が出てきます。15個制限がかかっているので15個しか現れません。HSはHigh Speedの略でUSB 2のポートで、SSはSuper Speedの略でUSB 3のポートです。USRは何か不明ですが、SSよりも優先的に機能するポートのようですので、何か重要なものなのかもしれません。とりあえずここでは無視しました。
それぞれのポートをクリックすると右のエリアに詳細が出ます。ここで、port-statusが0の値になっているポートは未使用のポートで、0以外は現在使用中のポートです。
LattePanda AlphaについているPort1, 2, 3, 4にそれぞれUSB 2.0のデバイス(ここではLogitechの無線キーボード・マウス用USBドングルを使いました)を挿して変化を見ていきます。その結果、
- HS03 USB3 Port2のUSB 2.0
- HS05 USB3 Port3のUSB 2.0
- HS07 USB3 Poer4のUSB 2.0
であることがわかりました。Type-C(つまりPort1)には規格上はUSB 3.0が2本あり、それぞれにUSB 2.0が付属しているはずですが、反応しませんでした。テストにはApple社のMacBook用の純正Type-C –> display, USB, Type-C 変換器を使いました。この変換器の中でUSB 2.0が配線されていないのかもしれませんし、元々LattePandaで配線されていないのかもしれません。またこの変換機にはUSB Type-Aが1個しか付いていないので、もう一つのUSBも存在する可能性はあります。今回はType-Cは電源供給にしか使用するつもりがなかったので、これ以上は調べませんでした。
無反応のHSポートを除外する
LattePand AlphaのUSBポートにLogitech無線ドングルを挿しても反応しなかったポートは
- HS04
- HS05
- HS08
- HS10
でした。不要な様子ですのでこれらを除外します。こちらの方法を使います。つまりUSBInjectAll.kextを使った上で、config.plistのBootセクションに以下を書きます。
<key>Boot</key> <dict> <key>Arguments</key> <string>uia_exclude=HS04;HS05;HS08;HS10</string>
他に必要なArgumentsがあればスペースで区切って列挙しておけば良いです。また、Cloverの起動画面でOptionを選べば一時的にArgumentsを書き換えられます。一時的な試験の場合は、起動画面で書き換えるのが便利です。この結果、
このようになりました。優先的に選択されるHSのポートが減ったので、SSが増えました。結果としてSS04, SS05, SS06が増え、総数は全部で14になりました。15以下ですので、これ以上SSは無いと思われます。この状態では、4個のポートを除外しましたが、3個でも良いようです。
LattePanda AlphaのUSB構成
HS01, 02, 09は、USBコネクタの接続状態に関わらず常に使用中になっています。内部で使用されているようです。uia_excludeオプションで一つづつ除外して、何が動かなくなるかを確認しました。またSSポートもUSB 3のUSBメモリを挿して、動作を確認しました。その結果、SS01, 02, 03, 04がLattePanda AlphaのUSB 3コネクタに接続していて、SS05, 06は使われている様子はありませんでした。ということで、LattePanda AlphaのUSB構成が以下のようであることがわかりました。
- HS01 システムが使用中(搭載無線チップのBluetooth)
- HS02 システムが使用中(不明のUSBシリアル。M.2 E-keyソケット用?)
- HS03 USB3 Port2のUSB 2.0
- HS04 未使用?
- HS05 USB3 Port3のUSB 2.0
- HS06 未使用?
- HS07 USB3 Poer4のUSB 2.0
- HS08 未使用?
- HS09 システムが使用中(Arduinoに接続)
- HS10 未使用?
- SS01 USB3 Port1 (Type-C)
- SS02 USB3 Port3
- SS03 USB3 Port4
- SS04 USB3 Port2
- SS05 未使用?
- SS06 未使用?
HS02については確認しませんでしたが、M.2 E-keyにはUSB 2.0が出ていて、Bluetoothチップなどで使用します。なのでおそらくこれはM.2ソケットに接続されていると思います。
除外するUSBポート
何も除外しないと、最初に示したように、優先度の高い10個のHSと謎の2個のUSRから使用されて、SSは3個しか機能しません。すると、SS04が機能しないのでPort2のUSB 3が使えません。HSを1個以上除外すれば、SS04まで使用できることになります。そこで、
uia_exclude=HS10;SS05;SS06
をArgumentsに指定して、必要なUSBポートが全て動くようにしました。除外リストにSS05, SS06を含めなくても、15個制限に引っかかって除外されるので同じですが、覚書の意味から記載しました。今後、USBがらみで動作不良になるようでしたら、除外リストを再検討することにします。