警告メッセージ

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

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

対象製品: Armadillo-410

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マスストレージデバイスとして認識された際のエクスプローラでの表示

カテゴリ: