Armadillo-410 液晶モデル開発セット で USB デバイス機能を使用する方法を説明します。
今回実現するUSBデバイス機能は以下の通りです。
- USBマスストレージ
Armadillo-410に接続されたマイクロSDメモリカードを、USBマスストレージとしてホストから使用できるようにします。
本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の環境は次のとおりです。
OS | Windows 7 Professional Service Pack 1 |
---|---|
VMware | VMware 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マスストレージデバイスとして認識された際のエクスプローラでの表示