USB ターゲット (USB Gadget) の設定

このドキュメントでは組込み Linux 開発用 CPU ボード Bishop を USB ターゲット (USB Gadget) として使用する手順を紹介します。

Bishop の USB ターゲットサポートは実験的なものです。正式にはサポートしていません。

1. 概要

Linux カーネルに含まれる USB デバイスドライバは、

  • USB ホスト
  • USB ターゲット (USB Gadget)

の2種類に大別されます。

通常の使用では、Bishop「に」USB 接続されたデバイス (マウスや、USB カメラなど) を動作させる USB ホストドライバしか意識しませんが、USB ターゲットのドライバを使うことで、Bishop「を」USB バス上のデバイスとして動作させることができます。

標準 Linux カーネルに含まれる USB ターゲットのドライバには

  • USB-Ether
  • USB-シリアル変換器
  • USB マスストレージ
  • MIDI

などがあります。

以降では 例として USB-Ether を有効にする手順を説明します。

2. Linux カーネルのビルド

USB ターゲットとして Linux カーネルを再構築します。

$ cd linux-2.6.26.8-pylone0
$ make ARCH=arm menuconfig
  Device Drivers ->
    [*] USB support->
      <*> USB Gadget Support
        -- USB Gadget Support->
             USB Peripheral Controller->
               ( ) Renesas M66592 USB Peripheral Controller
               (X) S3C2410 USB Device Controller
               ( ) Dummy HCD (DEVELOPMENT)
        <M> USB Gadget Drivers
        <M>   Ethernet Gadget (with CDC Ethernet support)
        [*]     RNDIS support (Bishop を Windows からも認識させるために必要)
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnu- uImage modules

ここでは USB-Ether をモジュールとしますので、make のターゲットとしてuImage に加えて modules が必要です。

ビルドが終わったら arch/arm/boot/uImage と drivers/usb/gadget/g_ether.koが生成されていることを確認してください。

3. 動作確認

USB ターゲットを有効にしたカーネルで Bishop を起動して、g_ether.ko モジュールの動作確認をします。

Bishop 上で g_ether.ko をロードしてIPアドレスを割り当て:

bishop:#~ insmod g_ether.ko
bishop:#~ ifconfig usb0 <IPアドレス> netmask <マスク>

この時のアドレスは eth0 などと重複しないネットワークにしてください。

4. USB ホスト側の設定

これまでの手順により g_ether モジュールが組み込まれた Bishop をUSB ホストに接続するとベンダ ID が 0x0525、プロダクト ID が 0xA4A2 のUSB-Ether コンバータとして認識されます。

USB ホスト側のネットワークアダプタ設定をすれば Bishop が USB 接続の LAN インタフェースとして使うことができます。

ping を Bishop → ホスト、 Host ← Bishop で送ったり、Telnet や SSHでログインしてみると確認できるでしょう。

以降では USB ホスト側の具体的な手順について説明します。

4.1. USB ホストが Linux の場合

ほとんどの環境では Bishop を USB ホストに接続すると usbnet ドライバ がロードされネットワークインタフェース usb0 [1] として認識される筈です。

もし認識されなければ usbnet モジュールの有無を確認してください。

# modprobe usbnet

usbnet モジュールが無ければホスト側 Linux を再構築する必要があります。

Device Drivers->
  [*] Network device support ->
    USB Network Adapters ->
     <M> Simple USB Network Links (CDC Ethernet subset)
      [*] Embedded ARM Linux links (iPaq, ...)

認識が成功したら、インタフェースに IP アドレスを振ります。この時のネットワークアドレスは Bishop 側の設定に合わせておきます。

# ifconfig usb0 <IPアドレス> netmask <マスク>

4.2. USB ホストが Windows の場合

Linux カーネルのソースコードに含まれる INF ファイル (Documentation/usb/linux.inf) を使って、Windows に標準で含まれる RNDIS ドライバを使用します。

ホスト側の USB コネクタに Bishop を接続すると、新しいネットワークインターフェースとして認識されドライバが要求されます。ウィザードに従って linux.inf を直接指定すれば 標準 RNDIS ドライバがインストールされます。

後は Linux の場合と同様に、適宜 IP アドレスとネットワークアドレスを設定すれば Bishop をネットワークアダプタとして使用できます。

5. 関連リンク

  1. ^ 通常 0 ですが、既に別の USB-Ether が使用されていると変わります。
cc