警告メッセージ

Howtoは、Armadilloシリーズを有効に活用するための参考資料です。使用ソフトウェアのバージョンなど諸条件の差異によって、記載内容と実際の動作が異なる場合があります。また、すべての機能検証や長期の動作試験を行ったものではありませんので、必ずご使用目的に適合した検証・試験を行ってください。

Howto : Armadillo-800 EVAのUSBデバイス機能を使用する

対象製品: Armadillo-800 EVA

Armadillo-800 EVA を Debian GNU/Linux で起動し、USB デバイス機能を使用する方法を説明します。

本Howtoで使用するソフトウェアは次のとおりです。

Linux カーネルソースアーカイブlinux-2.6.35-a800eva-at2.tar.gz
Linux カーネルパッチlinux-2.6.35-a800eva-at2_usb-gadget.patch
Debian GNU/Linux ルートファイルシステムアーカイブdebian-squeeze_a800eva_20120222.tar.gz

本Howtoで作成するソフトウェアのバイナリファイルは以下よりダウンロードすることが出来ます。

Linux カーネルイメージlinux-a800eva-usb-gadget.bin
USB ガジェットカーネルモジュールアーカイブmodules.tar.gz

本Howtoで動作確認を行った作業用PCの環境は次のとおりです。

OSWindows 7 Professional Service Pack 1
VMwareVMware Workstation 7.1.5
ATDE4(amd64向け VMware仮想イメージファイル)atde4-20111228-amd64.zip

1. Linux の USB デバイス機能

Linux の USB デバイス機能は、USB ファンクションコントローラードライバおよび USB ガジェットドライバが提供します。

ドライバ 機能
USB ファンクションコントローラードライバ USB ファンクションコントローラーの制御を行う
USB ガジェットドライバ USB 周辺機器が持つ Ethernetやマスストレージなどの機能を提供する

ユーザーランドからUSB デバイス機能を使用するためのアプリケーションは、使用する USB ガジェットドライバが持つ機能により異なります。Ethernet機能を使用する場合はifconfigなどを、マスストレージ機能を使用する場合は、mountなどを使用します。

2. LinuxカーネルイメージとUSBガジェットカーネルモジュールの作成

USBファンクションコントローラードライバを有効化したLinuxカーネルイメージと、USBガジェットカーネルモジュールを作成します。

はじめに、ソースコードの準備を行います。Linux カーネルのソースアーカイブを展開し、パッチを適用します。


[atde ~]$ ls
linux-2.6.35-a800eva-at2.tar.gz  linux-2.6.35-a800eva-at2_usb-gadget.patch
[atde ~]$ tar zxvf linux-2.6.35-a800eva-at2.tar.gz
[atde ~]$ cd linux-2.6.35-a800eva-at2
[atde ~/linux-2.6.35-a800eva-at2]$ patch -p 1 < ../linux-2.6.35-a800eva-at2_usb-gadget.patch

次に、カーネルコンフィギュレーションの変更を行います。Armadillo-800 EVAのデフォルトコンフィギュレーション(armadillo800eva_android_defconfig)を適用した後に、USBファンクションコントローラードライバ(USB_GADGET_R8A66597)を有効に設定します。USBガジェットドライバはモジュールに設定します。

Armadillo-800 EVA で動作確認済みの USB ガジェットドライバは以下の通りです。

カーネルコンフィギュレーション 機能
USB_ETH Ethernet
USB_MASS_STORAGE マスストレージ
USB_G_SERIAL シリアル
USB_CDC_COMPOSITE Ethernet + シリアル
USB_G_ARMADILLO Ethernet + シリアル + Webカメラ
USB_G_WEBCAM Webカメラ

Webカメラ機能を使用するためには、専用のアプリケーションを作成する必要があります。Webカメラ機能の使用方法については「Howto: Armadillo-800 EVAをUVCカメラとして使用する」を参照してください。


[atde ~/linux-2.6.35-a800eva-at2]$ make ARCH=arm armadillo800eva_android_defconfig
[atde ~/linux-2.6.35-a800eva-at2]$ make ARCH=arm menuconfig
Device Drivers  --->
  [*] USB support  --->
    <*>   USB Gadget Support  --->
      USB Peripheral Controller (Renesas R8A66597 USB Peripheral Controller)
      (X) Renesas R8A66597 USB Peripheral Controller
      ( ) Renesas M66592 USB Peripheral Controller
      ( ) Dummy HCD (DEVELOPMENT)
      <M>   USB Gadget Drivers
      <M>     Ethernet Gadget (with CDC Ethernet support)
      [ ]       RNDIS support
      [*]       Ethernet Emulation Model (EEM) support
      <M>     Mass Storage Gadget
      <M>     Serial Gadget (with CDC ACM and CDC OBEX support)
      <M>     CDC Composite Device (Ethernet and ACM)
      <M>     Armadillo composite gadget (EXPERIMENTAL)
      [ ]       RNDIS + CDC Serial + UVC configuration
      [*]       CDC Ethernet + CDC Serial + UVC configuration
      <M>     USB Webcam Gadget

最後に、ビルドを実行します。作成されるLinuxカーネルイメージ(Image)は、linux-a800eva-usb-gadget.binと同じです。また、USBガジェットカーネルモジュール(*.ko)は、modules.tar.gzに含まれている同名のファイルと同じです。


[atde ~/linux-2.6.35-a800eva-at2]$ make ARCH=arm armadillo800eva_android_defconfig
[atde ~/linux-2.6.35-a800eva-at2]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
    :(ビルドには数分かかります)
[atde ~/linux-2.6.35-a800eva-at2]$ ls arch/arm/boot/Image
arch/arm/boot/Image
[atde ~/linux-2.6.35-a800eva-at2]$ ls drivers/usb/gadget/*.ko
drivers/usb/gadget/g_armadillo.ko  drivers/usb/gadget/g_mass_storage.ko
drivers/usb/gadget/g_cdc.ko        drivers/usb/gadget/g_serial.ko
drivers/usb/gadget/g_ether.ko      drivers/usb/gadget/g_webcam.ko

USBガジェットカーネルモジュールと、機能の対応は以下の通りです。

カーネルモジュール名 機能
g_ether.ko Ethernet
g_mass_storage.ko マスストレージ
g_serial.ko シリアル
g_cdc.ko Ethernet + シリアル
g_armadillo.ko Ethernet + シリアル + Webカメラ
g_webcam.ko Webカメラ

3. Linuxカーネルイメージの更新

Linuxカーネルイメージを、内蔵ストレージにインストールします。

Linuxカーネルイメージをインストールするには、Debian GNU/Linuxで起動する必要があります。ブートローダーの保守モードで以下のように設定し、起動します。


hermit> setbootdevice mmcblk0p2
hermit> setenv console=ttySC1,115200 noinitrd rootwait root=/dev/mmcblk0p2
hermit> boot

ログイン後、インストールしてください。


[armadillo ~]# ls
linux-a800eva-usb-gadget.bin
[armadillo ~]# rm -f /boot/*.bin
[armadillo ~]# cp linux-a800eva-usb-gadget.bin /boot/Image.bin
[armadillo ~]# sync

手順を誤った場合、Debian GNU/Linuxが起動できなくなる可能性があります。起動できなくなった場合は、「Armadillo-800 EVA 製品マニュアル」を参照してDebian GNU/Linuxをリカバリしてください。

4. ハードウェアの設定

ディップスイッチの設定と、USBケーブルの接続を行います。

USBデバイスインターフェース(CON24)とUSBホストインターフェース(CON20)は共通の信号を使用しているため、同時に使用することができません。USBデバイスインターフェースを有効にするには、ディップスイッチのUSB0設定(SW1.6)をONにする必要があります。ディップスイッチの設定変更は、Armadillo-800 EVAに電源を投入する前に行う必要があります。

SW1.6設定 動作
OFF USBデバイスインターフェース(CON24)無効/USBホストインターフェース(CON20)有効
ON USBデバイスインターフェース(CON24)有効/USBホストインターフェース(CON20)無効

USBデバイスインターフェース(CON24)と作業用PCは、USBケーブル(Aオス - Bオス)で接続します。

5. 動作確認

USB デバイス機能の動作確認を行います。ここでは例としてEthernet機能を使用します。

5.1. カーネルモジュールの登録

USBガジェットカーネルモジュールの登録を行います。

Armadillo-800 EVA を Debian GNU/Linux で起動し、insmodコマンドでUSBガジェットカーネルモジュール "insmod g_ether.ko" を登録します。登録が完了すると ATDE から Armadillo-800 EVA が USBデバイスとして認識されます。


[armadillo ~]# ls
g_ether.ko
[armadillo ~]# insmod g_ether.ko
g_ether gadget: using random self ethernet address
g_ether gadget: using random host ethernet address
usb0: MAC 7e:5c:95:ee:93:36
usb0: HOST MAC 6e:69:f2:bb:1d:cb
g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
g_ether gadget: g_ether ready
g_ether gadget: high speed config #1: CDC Ethernet (EEM)
[armadillo ~]#

複数のUSBガジェットドライバを同時に登録することはできません。すでに登録されたUSBガジェットドライバがある場合は、rmmodで削除後に登録してください。

ATDE から Armadillo-800 EVA を認識できない場合は、ホストOSが先に認識している可能性があります。VMware製品のドキュメントを参照し、ATDE で認識できるよう設定してください。例として、「Workstation ユーザーマニュアル」を参照し、VMware Workstation 7.1.5で設定する例を記載します。

  1. VMware Workstationを起動する
  2. ATDEをパワーオンする
  3. メニューの「VM(M)」「取外し可能デバイス(R)」「Ethernet Gadget」を選択する
  4. 「接続(ホストから切断)(C)」をクリックする
  5. ダイアログボックスが表示されるため「OK」をクリックする

5.2. ネットワークの疎通確認

pingコマンドによるネットワークの疎通確認を行います。

はじめに、USBデバイスのネットワークインターフェース(usb0)を、Armadillo-800 EVA と ATDE の両方で活動状態にします。


[armadillo ~]# ifconfig usb0 192.168.100.1 up

[atde ~]$ sudo ifconfig usb0 192.168.100.2 up

Armadillo-800 EVA および ATDEがすでにネットワークに接続している場合は、別ネットワークのIPアドレスを指定する必要があります。

pingコマンドを使用してネットワークの疎通確認を行います。


[armadillo ~]# ping -c 4 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_req=1 ttl=64 time=13.1 ms
64 bytes from 192.168.100.2: icmp_req=2 ttl=64 time=3.99 ms
64 bytes from 192.168.100.2: icmp_req=3 ttl=64 time=5.04 ms
64 bytes from 192.168.100.2: icmp_req=4 ttl=64 time=3.53 ms
[armadillo ~]#

[atde ~]$ ping -c 4 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_req=1 ttl=64 time=4.46 ms
64 bytes from 192.168.100.1: icmp_req=2 ttl=64 time=2.18 ms
64 bytes from 192.168.100.1: icmp_req=3 ttl=64 time=7.95 ms
64 bytes from 192.168.100.1: icmp_req=4 ttl=64 time=2.69 ms
[atde ~]$
カテゴリ: