使用するUSBポートを15個指定する (OpenCore編)

ここではUSBInjectAll.kextを使っていますが、最近はサポートが途絶えているので、以下の方法がよりシンプルでおすすめです。

———————————-

(以下は今でも有効ですが、古い情報です。)

OpenCoreではconfig.plistでXhciPortLimitをtrueにすれば15個制限を解除できます。Cloverでのパッチ作業より楽です。でもUSBInstallAll.kextとSSDTで使用する15個を指定する従来の方法も可能で、その方式がおすすめです。

OpenCoreで15個制限を全撤廃

macOS El Capitanから使用可能なUSBポートの数が、 コントローラ当たり15までと制限されました。その解説と、Cloverのconfig.plist書く制限解除パッチを以下の記事で紹介しました。この記事では、AppleUSBXHCIPCI.kextにパッチを当ててました。

OpenCoreでは、config.plistのKernel, QurksのXhciPortLimit項目をtrueにしておくと(デフォルトはfalse)、必要なパッチを当ててくれます。 AppleUSBXHCIPCI.kextの他に、AppleUSBXHCI.kextとIOUSBHostFamily.kextにパッチを当ててくれるようです。このパッチは、各種macOSバージョンに合わせた内容が必要なので、その点にも対応してくれているようです。なので、簡単に15個制限を解除できます。

しかし、OpenCoreのReferenceマニュアルにはこんな注意書きがあります。

このオプションは、可能な限り避けてください。USBポート制限は、locationIDの書式で割り当てられたビット数による制限です。この制限は、OSを大々的に変更しない限り解除できません。正しい解決策は、使わないポートを除外して、使用したいUSBポート15個を選定することです。

つまり、macOS内部で使用しているプロパティのlocationIDの中で、ポートを識別するための変数に、どうやら4ビットしか割り当てられていない様子です。15個を超えるポートを使用可能にすると、違うポートに同じIDが割り当てられる可能性があるわけで、とても危険なことだと推測できます。実際には15個制限を外したことで問題が発生した事例は、報告も無いし経験もしていませんが、避ける方が良いでしょう。XhciPortLimitの使用は、macOSをインストールする際や、使用するポートを取捨選択する作業の時だけに制限すべきでしょう。

OpenCoreで使用する15個を指定する

そこで、15個制限を撤廃するのではなく、必要な15個のポートだけを登録するようにします。ますはマシンのUSBポート割り当てを調べて、使用したい15個のUSBポートを選定します。この方法は、以下で説明しました。OpenCoreならば、この手順の中で、一時的にXhciPortLimitをtrueにすることで簡単に15個制限解除できるので、作業が楽になる思います。

macOSは発見した15個までのUSBポートをアプリケーションに提供します。なので、使用する15個のポートを決定したら、その15個のポートだけがマシンに存在しているかのようにmacOSに伝えます。これにはいろいろな方法が可能ですが、USBInjectAll.kextと専用のSSDTを使用するのが一番おすすめだと思います。以下の記事で、仕組みと設定方法を説明しました。

上の記事では、Cloverで使うための方法を書いていますが、OpenCoreでも同じように設定できます。ただし、kextとSSDTファイルを置く場所は、Cloverと違うディレクトリです。つまり、kextはKextsに、

SSDTは(SSDT-UIAC.amlという名前にしました)ACPIに置きます。

また、OpenCoreでは、config.plistにも、使用するkextとDSDTを記述する必要があるのは、すでに説明した通りです。ProperTreeのsnapshot機能を使えば、kextとSSDTを正しいディレクトリに置くだけで、config.plistの設定をしてくれるので楽です。

まとめ

OpenCoreでもUSBポート15個制限に対応するため、Cloverで使っていたUSBInjectAll.kextとSSDT-UIAC.amlをOpenCoreのESPに入れました。config.plistにも登録しました。これらは、Cloverの時と同じように、OpenCoreでも機能して、必要な15個のUSBポートが使えるようになりました。

11件のコメント

  1. Hackintoolを使って設定ができそうです
    https://www.tonymacx86.com/threads/the-new-beginners-guide-to-usb-port-configuration.286553/

    使わないUSBポートを削除して
    動かしたいUSBポートを15個残し
    USBの選択が終了したら
    設定ファイルをエクスポート
    エクスポートすると
    SSDT-UIAC.aml SSDT-EC.aml USBPorts.kext
    の3ファイルが出来て、
    USBInjectAll.kextとUSBPorts.kextを置き換えて完成という事でいいのでしょうか

    この方法ならわかりにくいDSLファイルの記述やコンパイル作業をしなくて済みそうです

    1. ありがとうございます。試してみました。問題なく動きますね。出来上がるUSBPorts.kextはInfo.plistだけの内容のkextで、そのUSB情報はここで作ったSSDT-UIAC.amlと同じになりますね。昔こういうkextを作るガイドに従って作ったことがあったのですが、その後あまり見かけないのでUSBInjectAll.kextとSSDTの組み合わせでやってました。でもこれなら簡単に作れそうで良いですね。USBPorts.kextだけをしばらく使ってみます。

  2. 余談ですが こちらのリンクのように
    https://www.tonymacx86.com/threads/guide-usb-power-property-injection-for-sierra-and-later.222266/page-83
    もちろんUSBを既にmappingしてるのは当然、 SSDT-USBXをこちらから落としてACPIに入れる、config.plistに反映させると
    なんと実機macのようにiPadやiPhoneがまともな速度で充電できるようになります。(環境によって異なるかもしれません)
    SidecarができないRyzenでDuet Displayが有線でもまともに使えるようになるので激アツです。

  3. Dortania のガイドでは、USBMap.command を使用する方法が紹介されていますね。

    その注意書きを見ると、
    > Note: Do not use either the SSDT-UIAC.aml or USBInjectAll with the USBmap.kext. This kext we just made should be used by itself with no other USB kexts besides XhciUnsupported if your system needs it. Reason for this is USBInjectAll is no longer being maintained and the USBmap.kext version is how real Macs USB map as well so as close to “Apple Like” as possible to fit the OpenCore mood.
    とあり、USBMap.command が生成する USBmap.kext だけを使用し、SSDT-UIAC.aml や USBInjectAll.kext は除去するのが現在主流の流儀のようです。

    実際に手元の Mojave/i5 9400/RX580/ASUS Prime Z390-P でガイド通りに設定したところ、問題なく動作しました。
    USBMap.command 起動時のメッセージでなぜか USBInjectAll: Not Loaded と表示されましたが一連の手順に支障はありませんでした。

    コマンドの使用感としては、手持ちの機器(私は iPhone と Lightning ケーブルを使いました。充電開始の音が鳴るので接続確認に便利!)を順番に抜き差ししていくだけでポート特定が進み、設定ファイルがほぼ全自動で作成できるので非常に楽でした。
    そちらでも動作確認できましたら推奨手順として記載してもよろしいかと存じます。

    末筆ながら、以前よりこのサイトの情報にはお世話になっていましたが、これまでは特に有益と思えるような情報を持ちあわせていなかったためこれが初コメントです。どなたかのお役に立てば幸い。

    1. ありがとうございます。ご指摘の通りこのページの情報は古い感じになりました。Hackintoolを使ってインジェクトkextを作る方法を以下に書いておいたので、記事にもリンクを貼っておきました。USBMap.commandはシンプルで良いですね。以下の記事にも追記しておきました。

      https://bootmacos.com/archives/9177

      ちなみにUSBInjectAllを作られたRehabManさんは、ここ1年以上コミュニティに現れてなくて、Redditには感謝を述べるスレッドも立っていました。お元気だと良いのですが。

      1. 確認しました。Hackintool は落としただけで試していませんが、GUI なのでとっつきやすそうですね。ありがとうございます。

        作者さんはコロナのこともあり少し心配ですね。仙人にありがちな雲隠れだとよいのですが……。

        1. Appleに就職したのではないかという冗談も流れていたので、そういう明るい展開だと良いですね。

          1. RehabManさんの感謝スレッドは、当時を回想しながらニヤニヤしながら読んでました。。。w
            全盛期にはほとんど読むのはRehabManの怒涛のサポートだったような気がします。あれだけやればバーンナウトしちゃってもおかしくないかなっとかいう気もありますね。w
            失踪時期が2019年4月のトニーさんとこのフォーラムらしいですね?一本釣りされて宇宙船のラボでA*mへのMacOS実装に汗をかいてるのを仮想できちゃいますねぇ。。。w
            どうも、仮想化関連のGuruみたいな方も、失踪?というかいなくなって悲しいっていうことをおっしゃってる方もいますので、これも一本釣りされてるのかとか疑っちゃいますね???

    2. お疲れ様です。
       USBMap.command でCatalinaで使って、USBmap.kext を作ってみました。(i7 8700(iMac19.2),ASUS PRIME-H370-A,RX-570)、ほぼ問題ありませんでしたが、USR1になぜかついていないUSB機器があったところくらいの問題で、plistを後から加工する程度で問題無く使えました。plistを加工して、サブ機のi5 9400F(iMac19,1)にも対応できました。
       Clover,Open Coreとも問題ありませんでした。Big Sur Beta1(今ここから書いています)でも問題はありませんでした。
       使い勝手から言うと、Hackintoolだと、全てのポートを出すInjectができるので、その点が楽かもという感じで、どちらも、plistには問題なしです。以下にメモりました。
       https://mifmif.mydns.jp/alpha/?p=474
       

      1. 報告ありがとうございます。いただいたリンク先を、USBMap.commandを追記した部分に掲載させていただきました。

返信を残す

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