Howto

Armadillo-410 液晶モデル開発セット で USB デバイス機能を使用する

Armadillo-410 液晶モデル開発セット で USB デバイス機能を使用する方法を説明します。

今回実現するUSBデバイス機能は以下の通りです。

  • USBマスストレージ

Armadillo-410に接続されたマイクロSDメモリカードを、USBマスストレージとしてホストから使用できるようにします。

この機能では、Armadilloに接続されたマイクロSDメモリカードのデータを、Armadilloとホストで共有する事はできません。

本Howtoは参考情報ですので、動作を保証するものではありません。 また、ハードウェアを一部改造する必要がありますので、十分ご注意ください。

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

Linux カーネルソースアーカイブlinux-2.6.35-at-alpha4.tar.gz
Linux カーネルパッチ(USBデバイス対応)linux-2.6.35-usb-device-only.patch
Linux カーネルパッチ(Armadillo-410対応)linux-2.6.35-at-alpha4_a410.diff

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

Linux カーネルイメージlinux-a400-usb-gadget.bin.gz
マスストレージ USB ガジェットカーネルモジュールg_mass_storage.ko

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

OSWindows 7 Professional Service Pack 1
VMwareVMware Workstation 7.1.6
ATDE3(VMware仮想イメージファイル)atde3-20120709.zip

本Howtoで使用する機材は次のとおりです。

Armadillo-410 液晶モデル開発セット
作業用PC
USBケーブル(Aオス - Aオス)
マイクロSDメモリカード
シリアルクロスケーブル

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-at-alpha4.tar.gz     linux-2.6.35-usb-device-only.patch
linux-2.6.35-at-alpha4_a410.diff
[atde ~]$ tar zxf linux-2.6.35-at-alpha4.tar.gz
[atde ~]$ cd linux-2.6.35-at-alpha4
[atde ~/linux-2.6.35-at-alpha4]$ patch -p 1 < ../linux-2.6.35-usb-device-only.patch
[atde ~/linux-2.6.35-at-alpha4]$ patch -p 1 < ../linux-2.6.35-at-alpha4_a410.diff

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

[atde ~/linux-2.6.35-at-alpha4]$ make armadillo400_defconfig
[atde ~/linux-2.6.35-at-alpha4]$ make menuconfig
Linux Kernel Configuration
Device Drivers --->
    [*] USB support --->
        < > Support for Host-side USB
        < > Inventra Highspeed Dual Role Controller (TI, ADI, ...)
            *** NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may ***
        <*> USB Gadget Support --->
            [*] Debugging information files (DEVELOPMENT)
            (2) Maximum VBUS Power usage (2-500 mA)
            USB Peripheral Controller (Freescale USB Device Controller) --->
                Freescale USB Device Controller
            [*] Apply static IRAM patch
            [*] Peripheral Only but OTG
            <M> USB Gadget Drivers
            <M> Mass Storage Gadget
            *** OTG and related infrastructure ***
        < > GPIO based peripheral-only VBUS sensing 'transceiver'
        [ ] Generic ULPI Transceiver Driver
        < > NOP USB Transceiver Driver

最後に、ビルドを実行します。作成されるLinuxカーネルイメージとUSBガジェットカーネルモジュール(*.ko)は、本Howtoよりダウンロードして入手することもできます。

[atde ~/linux-2.6.35-at-alpha4]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- && gzip -c arch/arm/boot/Image > linux-a400-usb-gadget.bin.gz
    :(ビルドには数分かかります)
[atde ~/linux-2.6.35-at-alpha4]$ ls drivers/usb/gadget/*.ko
drivers/usb/gadget/g_mass_storage.ko

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

作成したLinuxカーネルイメージを、Armadillo-410のフラッシュメモリに書き込みます。

Armadillo のオンボードフラッシュメモリを書き換える手順につきましては、 Armadillo-400シリーズソフトウェアマニュアル「6. フラッシュメモリの書き換え方法」をご確認ください。

4. ハードウェアの改造

ArmadilloにACアダプタを接続しないでください。 本Howtoでは、ハードウェアを改造して、USBホスト側からArmadillo電源(Vbus)を供給するため、 USBホスト側から電源(Vbus)が供給されている状態でArmadilloにACアダプタを接続すると、 USBホスト側のハードウェアやArmadilloが故障する恐れがあります。

Armadillo-410をUSBホスト側からの電源供給(+5V)で動作する様に改造します。 改造箇所は以下の通りです。

改造箇所USBコネクタ(CON5)1番ピン(VBUS)と5V電源入力コネクタ(CON13)2番ピンを接続してください

今回は、はんだ付けの代わりにICテストリードで上記各ピンを接続しました。

ICテストリード外観

ICテストリード接続写真 - USBコネクタ(CON5)1番ピン側

ICテストリード接続写真 - 電源入力コネクタ(CON13)2番ピン側

5. ハードウェアの準備

Armadilloに対しジャンパスイッチの設定と、メモリカードおよびケーブルの接続を行います。

  • Armadillo-410拡張ボードのジャンパスイッチJP2は未接続にしてください。
  • Armadillo-410のマイクロSDスロット(CON1)にFAT32でフォーマットされたマイクロSDメモリカードを挿入してください。
  • Armadillo-410拡張ボードのDSUB9ピンコネクタ(CON3)と作業用PCのRS232Cポートをシリアルクロスケーブルで接続してください。

以上でハードウェアの準備が完了しました。

6. 動作確認

USB デバイス機能(マスストレージ機能)の動作確認を行います。

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

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

Armadillo-410 を 起動し、insmodコマンドでUSBガジェットカーネルモジュール を登録します。登録が完了すると 作業用PC から Armadillo-410 に接続されたSDメモリカードが USBマスストレージデバイスとして認識されます。

作業用PCでteratermを起動して、Armadillo-410のシリアルコンソールポートを使用可能な状態にしてください。 次にArmadillo-410を作業用PCと接続してArmadilloに電源を投入します。 Armadillo-410拡張ボードのUSBコネクタ(CON5)2段のうちの下段と作業用PCのUSBポートをUSBケーブル(Aオス - Aオス)で接続してください。作業用PCからUSBケーブル経由でArmadillo-410に電源が供給されます。

次にマスストレージ USBガジェットカーネルモジュールファイルを作業PCからArmadillo-410に転送してください。 今回は、lrzコマンドを使用してシリアルコンソール経由でモジュールファイルを転送します。

ファイル転送の手順

Armadilloにログイン後、以下のコマンドを実行してください。

[root@armadillo440-0 (ttymxc1) ~]# lrz
lrz waiting to receive.**B0100000023be50

teratermのファイルメニューから転送->ZMODEM->送信を選択して、g_mass_storage.koファイルを転送してください。

teraterm ZMODEMファイル送信メニュー選択画面

ファイル転送完了後、insmodコマンドでUSBガジェットカーネルモジュールを登録します。 登録が完了すると 作業用PC から Armadillo-410 に接続されたSDメモリカードが USBマスストレージデバイスとして認識されます。

[root@armadillo440-0 (ttymxc1) ~]# ls
g_mass_storage.ko
[root@armadillo440-0 (ttymxc1) ~]# insmod g_mass_storage.ko file=/dev/mmcblk0 stall=0
Using g_mass_storage.ko
g_mass_storage gadget: Mass Storage Function, version: 2009/09/11
g_mass_storage gadget: Number of LUNs=1
 lun0: LUN: removable file: /dev/mmcblk0
g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
g_mass_storage gadget: g_mass_storage ready
fsl-usb2-udc: bind to driver g_mass_storage
[root@armadillo440-0 (ttymxc1) ~]# g_mass_storage gadget: high speed config #1: Linux File-Backed Storage

WindowsでUSBマスストレージデバイスとして認識された際のエクスプローラでの表示