Azure IoT Edge for Linux on Windows に USB デバイスを接続する方法
適用対象: IoT Edge 1.5
IoT Edge 1.4
重要
サポートされているリリースは、IoT Edge 1.5 LTS と IoT Edge 1.4 LTS です。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日にサポートが終了します。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。
シナリオによっては、ワークロードでデータを取得したり、USB デバイスと通信したりする必要があります。 Azure IoT Edge for Linux on Windows (EFLOW) は仮想マシンとして実行されるため、これらのデバイスを仮想マシンに接続する必要があります。 この記事では、usbipd-win という名前の USB/IP オープンソース プロジェクトを使用して、USB デバイスを EFLOW 仮想マシンに接続するために必要な手順について説明します。
Windows マシンで USB/IP プロジェクトを設定すると、Arduino のフラッシュ、USB シリアル デバイスの接続、EFLOW 仮想マシンからスマートカード リーダーへの直接アクセスなど、一般的な開発者の USB に関するシナリオが可能になります。
警告
USB over IP は、Windows ホスト OS と EFLOW 仮想マシンの間のネットワークを使用して USB デバイスをリダイレクトするための汎用メカニズムを提供します。 ネットワーク待ち時間の影響を受けやすい一部のデバイスでは、問題が発生する可能性があります。 また、ドライバーの互換性の問題により、一部のデバイスが想定どおりに機能しない場合があります。 運用環境にデプロイする前に、デバイスが想定どおりに動作することを確認してください。 USB/IP テスト済みデバイスの詳細については、USBIP-Win - Wiki - Tested Devices を参照してください。
前提条件
- Azure IoT Edge for Linux on Windows 1.3.1 以降の更新プログラム。 EFLOW リリース ノートの詳細については、EFLOW リリースに関するページを参照してください。
- x64/x86 プロセッサを搭載したマシンが必要です。usbipd-win は ARM64 をサポートしていません。
Note
Azure IoT Edge for Linux on Windows のバージョンを確認するには、[プログラムの追加と削除] に移動し、Azure IoT Edge を検索します。 インストールされているバージョンは、Azure IoT Edge の下に一覧表示されます。 最新バージョンに更新する必要がある場合は、「Azure IoT Edge for Linux on Windows の更新プログラム」を参照してください。
UsbIp-Win プロジェクトをインストールする
USB デバイスの接続のサポートは、EFLOW ではネイティブに使用できません。 次の手順を使用して、オープンソースの usbipd-win プロジェクトをインストールする必要があります。
- usbipd-win プロジェクトの最新リリースのページに移動します。
- usbipd-win_x.y.z.msi ファイルを選択してダウンロードします (ダウンロードしたインストーラーを信頼するかどうかを確認する警告が表示される場合があります)。
- ダウンロードした usbipd-win_x.y.z.msi インストーラー ファイルを実行します。
Note
代わりに、Windows パッケージ マネージャー (winget) を使用して usbipd-win プロジェクトをインストールすることもできます。 winget が既にインストールされている場合は、コマンド winget install --interactive --exact dorssel.usbipd-win
を使用して usbipd-win をインストールします。 --interactive
パラメーターを使用しない場合、winget はドライバーのインストールに必要な場合に、コンピューターを直ちに再起動することがあります。
UsbIp-Win は次をインストールします。
usbipd
という名前のサービス (USBIP Device Host)。 このサービスの状態は、Windows のサービス アプリを使用して確認できます。- コマンド ライン ツール
usbipd
。 このツールの場所は、PATH 環境変数に追加されます。 - すべてのローカル サブネットにサービスに接続することを許可する、
usbipd
と呼ばれるファイアウォール規則。 このファイアウォール規則は、アクセス制御を微調整するために変更を加えることができます。
この時点で、USB デバイスを共有するために Windows でサービスが実行され、共有デバイスに接続するために必要なツールが EFLOW 仮想マシンにインストールされます。
警告
PowerShell セッションを開いている場合は、必ずセッションを閉じて、新しいセッションを開いて usbipd
コマンド ライン ツールを読み込みます。
EFLOW VM に USB デバイスを接続する
次の手順は、USB デバイスを EFLOW VM に接続するための EFLOW PowerShell コマンドレットのサンプルを示します。 必要なコマンドを手動で実行する場合は、usbip-win の使用方法に関するページを参照してください。
重要
次の関数は、運用環境のデプロイで使用することを意図していないサンプルです。 運用環境で使用する場合は、機能を検証し、これらのサンプルに基づいて独自の関数を作成してください。 サンプル関数は変更および削除される可能性があります。
EFLOW-Util に移動し、EFLOW-USBIP サンプル PowerShell モジュールをダウンロードします。
[管理者として実行] で開始して、管理者特権の PowerShell セッションを開きます。
ダウンロードした EFLOW-USBIP モジュールをインポートします。
Import-Module "<path-to-module>/EflowUtil-Usbip.psm1"
Windows に接続されている USB デバイスをすべて一覧表示します。
Get-EflowUSBDevices
すべてのネットワーク インターフェイスを一覧表示し、Windows ホスト OS の IP アドレスを取得する
ipconfig
EFLOW に接続するデバイスの "バス ID" を選択します。
Add-EflowUSBDevices -busid <busid> -hostIp <host-ip>
デバイスが EFLOW VM に正しく接続されたことを確認します。
Invoke-EflowVmCommand "lsusb"
EFLOW でデバイスの使用が完了した後は、USB デバイスの接続を物理的に解除するか、管理者特権の PowerShell セッションからこのコマンドを実行します。
Remove-EflowUSBDevices -busid <busid>
重要
EFLOW VM から USB デバイスへの接続は、再起動後に維持されません。 再起動後に USB デバイスを接続するには、起動時に実行される bash スクリプトを作成し、usbip
bash コマンドを使用してデバイスを接続する必要がある場合があります。 EFLOW VM 側でデバイスを接続する方法の詳細については、Add-EflowUSBDevices を参照してください。
USB over IP の詳細については、WSL への USB デバイスの接続と GitHub の usbipd-win リポジトリを参照してください。
次のステップ
IoT Edge for Linux on Windows を使用して Linux コンテナーを使用する IoT Edge モジュールを開発する手順に従って、IoT Edge for Linux on Windows でモジュールを開発およびデバッグします。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示