この記事では、Forlinx Embedded OK3568-C 開発ボードを使用して USBNET モードを実装する方法を紹介します。その前に、USB ガジェットとは何かを知る必要があります。USB ガジェットとは、USB ペリフェラル モードで USB 経由でホストに接続するために開発された電子デバイスを指します。
たとえば、携帯電話が USB ケーブルを介して PC に接続されている場合、その携帯電話は USB ガジェットです。同様に、記事では携帯電話が OK3568-C開発ボードに置き換えられています。
ガジェット フレームワークは、最下層で一連の標準 API を提供し、USB デバイス コントローラー (UDC) ドライバーはこの API セットを実装します。異なる UDC (通常は SoC の一部) には異なるドライバーが必要であり、同じ UDC に基づく異なるボードであってもコードを変更する必要があります。USBNET を実装したい場合は、RNDIS と呼ばれるドライバーも必要です。RNDIS ドライバーはカーネル内に存在するため、構成エントリーを見つけてカーネルにコンパイルするだけで済みます。
まずソース カーネル ディレクトリに移動し、menuconfig グラフィカル構成画面に入ります。
menuconfig を入力するときは、環境を指定する必要があります。それ以外の場合、make menuconfig を直接実行して入力されるグラフィカル構成インターフェースは X86 用です。
以下の図に示すように、ARM アーキテクチャは正しいグラフィカル構成インターフェイスです。
/ を押して検索インターフェイスに入ります。
rndis を直接検索し、「USB Gadget」という単語が含まれるディレクトリを見つけます。複数のパスがあることがわかります。USB ガジェット ディレクトリに直接入力して、RNDIS を構成するオプションであることを確認できます。
検索後の最終パスは次のように表示されます。
RNDIS ドライバーをオンにし、以下の円で示すように、いくつかのネットワーク プロトコル構成を選択します。
USB ガジェットの事前構成済み構成を見つけて、RNDIS をカーネルにコンパイルします (モジュールにコンパイルすることを選択した場合、カーネルだけをコンパイルしても a.ko ファイルは生成されません。面倒なマウント手順を節約するために、この記事では RNDIS をカーネル)。
構成が完了したら、Exit キーを押して終了し、「保存するかどうか」で「はい」を選択します。
ソース コード ディレクトリに戻ってビルドを開始します。Sh スクリプトを実行し、defconfig コマンドをコメント アウトして .config ファイルを生成し、menuconfig 設定が有効になるようにします。コメントの場所は以下の通りです。
保存して終了し、カーネルを個別にコンパイルして、./build を実行します。Sh カーネルをソース コード ディレクトリにコピーします。コンパイル後、ブートします。IMG ファイルはカーネル ディレクトリに生成されます。
Rockchip が提供する書き込みツールである RKDevTool を使用して、1 回の手順でイメージを更新します。Recovery キーを押したままにして、プログラミング ツールに LOADER デバイスが見つかったことが表示されるまで Reset を押し、その後 Recovery キーを放します。
図内の位置を置き換えて、デバイス パーティション テーブルをクリックし、[実行] をクリックします。デバイスが再起動すると書き込みが完了し、右側に書き込みの進行状況が表示されます。開発ボードが再起動した後、ifconfig -a は usb0 ノードが生成されたことを示します。
より興味深い機能のいくつかは、Linux USB ガジェット デバイス ドライバーを使用して実現できます。
- 1. 組み込み製品内の特定のストレージ デバイス、またはストレージ デバイスの特定のパーティションは、PC によって U ディスクとして認識されます。
- 2. 組み込みデバイスが USB 経由で PC に接続されると、PC 側に新しいネットワーク接続が表示されます。組み込みデバイスにはネットワーク カード デバイスも含まれます。IP アドレスを設定し、一般に USBNET として知られるネットワーク通信を実行できます。
今回はUSB 3.0インターフェイスを使用するため、Type-C 5Vから3.3V Type-Aをアクティブにするために「detect」を使用する必要があり、p40のpin1をC23のプラス極に接続するようにハードウェアが変更されます。ディップスイッチをオンに設定し、デュアルオス USB ケーブルを挿入します。
USB 出力をデバイスに強制する
エコー周辺機器 > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode
印刷情報は次のように表示されます。
このノードはデバイス マネージャーのネットワーク アダプター上で表示され、IP を構成できます。
ネットワーク接続を確認すると、認識されていないネットワークが表示されます。これも IP で構成します。OK3568-C 開発ボードで構成された IP と同じネットワーク セグメント内にある必要があることに注意してください。
OK3568-C 開発ボードを使用して、コンピューターによって構成された IP に ping を実行すると、ping できることがわかります。
OK3568-C 開発ボードが USBNET 機能とネットワーク共有を実現していることがわかります。
元は www.forlinx.net で公開されています。