usb 1-1: new full speed USB device using fsl-ehci and address 4
usb 1-1: device descriptor read/64, error -71
usb 1-1: configuration #1 chosen from 1 choice
[root@armadillo440-0 (ttymxc1) /etc]# modprobe cdc-acm
Using /lib/modules/2.6.26-at16/kernel/drivers/usb/class/cdc-acm.ko
cdc_acm 1-1:1.0: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
[root@armadillo440-0 (ttymxc1) /etc]# ls -l /dev/ttyACM*
crw-rw---- 1 root root 166, 0 Aug 19 14:55 /dev/ttyACM0
PATH=/bin:/sbin:/usr/bin:/usr/sbin
# ここから
if test -f /lib/modules/2.6.26-at16/kernel/drivers/usb/class/cdc-acm.ko; then
echo -n "Loading CDC ACM driver"
modprobe cdc-acm
check_status
fi
# ここまで
[root@armadillo440-0 (ttymxc1) ~]# flatfsd -s
flatfsd: saving fs to partition 0, tstamp=1
flatfsd: Wrote 5720 bytes to flash in 1 seconds
Armadilloを再起動して、ドライバ組み込まれるかどうかを確認します。
起動中以下のようなメッセージが出るか
Loading CDC ACM driverUsing /lib/modules/2.6.26-at16/kernel/drivers/usb/class/cdc-acm.ko
cdc_acm 1-1:1.0: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
done
dmesg コマンドを使って確認することができます。
cdc_acm 1-1:1.0: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
カーネルとユーザランドの設定 (CDC ACMドライバ編)
アットマークテクノのダウンロードサイトからダウンロード可能なカーネルは、Armadillo-400シリーズで動作させるための最低限のドライバのみ組み込まれており、その他のデバイスを利用する場合は自分でカーネルを再コンパイルして組み込む必要があります。
ロボットシステムでよく用いられる北陽電機のレーザ測域センサ URG シリーズも、Armadilloのデフォルトカーネルでは利用することができないデバイスの一つです。
ここでは、URGセンサを動作させるために必要な CDC ACMドライバの組み込み方を説明します。
Atmark-dist configuration
上記のディレクトリ構成を仮定します。Atmark-dist を展開したディレクトリ内で
とコマンドを入力すると、以下のような画面が表示されます。
メニュー中央の青い長方形がカーソルです。 カーソルキーで上下に動かし、Enterキーで選択し、配下のサブメニューに入ります。
ここでは、Vendor/Product SelectionおよびKernel/Library/Defaults Selectionメニューを設定します。
Vendor/Product Selection
Vendor/Product Selectionでは、ターゲットのベンダとプロダクトを指定します。 (SnapGear) Vendorと表示されているところにカーソルを移動し、Enterをします。
ベンダ名はアルファベット順に並んでいるので、カーソルキーで上のほうに行き AtmarkTechno を Enter キーを押して選択します。
次に、プロダクトを選択します。
アットマークテクノの製品名一覧が表示されるので、自分が使用しているプロダクト名 (ここでは Armadillo-440) を選択します。
Kernel/Library/Defaults Selection
VendorProduct Selectionメニューを抜け、Kernel/Library/Defaults Selectionメニューを選択します。
まず以下のように、カーネルソースとクロス開発環境およびライブラリを選択します。
次は、このAtmark-dist Configurationの後に、カーネルやユーザランドの設定を行うかどうかの選択をします。
今回は、CDC ACMドライバを組み込むだけで、ユーザランドには手を加えないので、Customize Kernel Settings にのみスペースキーを押してチェックを入れます。
以上、設定が終了したら、Exit でメニューを抜けます。最後に Do you wish to save your new kernel configuration? と尋ねられるので Yes を選択して Atmark-Dist Configurationを終了します。
カーネルの設定
Atmark-Dist Configurationを終了すると、シェル画面に戻り、コンパイルを開始します。しばらくするとカーネルの設定メニューが表示されます。
Atmark-Dist同様、青い長方形がカーソルで、カーソルキーで上下に移動、Enterまたはスペースキーで選択します。
デバイスドライバを組み込むので、Device Driverを選択します。
下のほうにある USB Support サブメニューに入ります。
CDC ACMドライバは USB Modem (CDC ACM) support というところにあります。
USB Modem (CDC ACM) support にカーソルを持っていき、スペースキーを押します。スペースキーを押すごとに、< >(無印) -> <M>(モジュール) -> <*> (組込ドライバ) のようにマークが変更されます。組込みドライバにする場合は、チェックボックスを以下のように <*> (アスタリスク) に設定します。
カーネルモジュール型ドライバにしたい場合は、チェックボックスを以下のように <M> に設定します。
以上でCDC ACMドライバの設定は終わりです。Exitを何回か選択して Linxu Kernel Configuration を抜けます。
最後にカーネル設定を保存するかどうか尋ねられるので、Yesと答えて終了します。
コンパイル
以上が終了したら、コンパイルを行います。 atmark-dist 直下のディレクトリで make clean と make を行います。 以前コンパイルしたオブジェクトファイルなどが残っている場合があるので、make clean は必ず行ってください。 コンパイルはPCの性能にもよりますが、数分から十数分かかります。
コンパイルが終了すると、image ディレクトリの下に、linux.bin.gz, romfs.img.gz といったイメージファイルができているはずです。 途中でコンパイルエラーになっている場合、このイメージは作成されませんので、作成されたイメージファイルのタイムスタンプをよく確認してください。
それぞれ、
となっています。
ダウンロード
作成したカーネルとユーザランドのイメージをArmadilloに書き込み(ダウンロード)ます。 (組込みの分野では、ROM領域へプログラムを書き込むことを一般にダウンロードと呼びます。)
カーネルやユーザランドへのイメージの書き込みは以下のサイトが参考になります。
書き込みはLinuxからでも、Windowsからでも行うことができますが、ここでは、Windows用のHermit-At Win32を用いてイメージを書き込む方法を説明します。
PCとArmadilloの接続
PCにシリアルポートがある場合は、PCとArmadilloをシリアルケーブルで接続します。 PCにシリアルポートがない場合、USB-シリアル変換コネクタなどを用いてArmadilloとPCを接続してください。 デバイスマネージャでどのシリアルポートがArmadilloにつながっているか確認してください。
ジャンパピンの変更
ArmadilloのDCコネクタ付近に4本(2x2)のピンヘッダが出ています。 このうち、逆サイドのLANコネクタやUSBコネクタに近い2ピンをジャンパでショートさせます。 これで、hermitによりROM書き込みモードになります。 この段階ではまだArmadilloに電源を入れないでください。
Hermit-At Win32
Hermit-At Win32 WindowsからArmadilloのフラッシュメモリ領域に各種イメージを書き込むためのツールです。 以下のサイトからダウンロードできます。
hermit.exe を起動するとこのようなウインドウが現れます。
まず、使用するシリアルポートを選択します。 ここでは、COM2がArmadilloに接続されているシリアルポートです。
Memmapボタンを押してみてください。PCとArmadilloが正しく接続されており、ArmadilloがHermitのダウンロードモードになっていれば、メモリマップが表示されます。
これから書き換えようとしているのは、kernel のカーネル領域と、userlandのユーザランド領域です。
カーネルの書き換え
まず、カーネルの書き換えを行います。 Erase ボタンを押し、Regionのプルダウンで kernelを選択し、実行ボタンを押します。
ダイアログが表示されカーネル領域が削除されます。
次にダウンロードボタンを押し、Image で先ほど作った linux.bin.gz を、Regionで kernel 選択します。
Image の右側の ... ボタンを押すと、ファイル選択のためのダイアログが開きます。ATDE3 for OpenRTM ではsambaが設定されていますので、アドレスバーのところに
のように、ATDEのアドレスを入力します。アカウント名(atmark)とパスワード(atmark)を入力し、先ほど作成したlinux.bin.gzのフォルダにアクセスし、ファイル (linux.bin.gz) を選択します。
linux.bin.gz (拡張子が見えず linux.bin と表示されますが、種類がGZファイルとなっているほう) を選択します。以上が終わったら実行ボタンをクリックします。 書き込みダイアログが表示され、数分でカーネルの書き込みは終了します。
ユーザランドの書き換え
次にユーザランドを書き換えます。 カーネル同様、
を行います。 ユーザランドはファイルサイズが大きいため、書き換えには十数分かかります。
以上で、カーネルとユーザランドの書き換えは終了です。
デバイスの接続
URGセンサの接続
Armadilloのジャンパピンをオープンにして、電源を再投入します。この時URGセンサはまだ接続しないでください。
URGセンサはUSB Modeとして /dev/ttyACM0 (2つ目以降はttyACM1, ttyACM2, ...) というデバイス名で利用できます。
起動後、rootでログインして、デバイスが存在するかどうか確認してみてください。
USGセンサはまだ接続されていないのでまだデバイスファイルは存在しません。 次に、URGセンサを接続してみます。URGセンサをArmadilloのUSBコネクタに接続すると以下のようなメッセージが表示されます。
モジュールのロード
CDC ACMドライバをカーネルに直接組み込んだ場合は、/dev/ttyACM0 ができているはずです。モジュールとして組み込んだ場合は、ドラバモジュールをロードする必要があります。デバイスモジュールのロードには modprobe コマンドを使います。
以上で、CDC ACMドライバがシステムに組み込まれていることが確認できました。
モジュールの自動ロード
CDC ACMドライバをカーネルに直接組み込んだ場合は、URGセンサを接続しArmadilloを起動すると自動的にデバイスが利用可能になりますが、モジュールとして組み込んだ場合 modprobe でドライバモジュールを組み込む必要があります。
Armadillo の /etc/config/rc.local にmodprobeコマンドを追加することで、自動時に自動的にモジュールをロードするよう設定します。
viエディタでrc.localのPATH設定を行っている部分の後ろくらいに以下のようなコマンドを入力します。
上述したように、/etc/config 以下のディレクトリは保存可能なコンフィギュレーション領域ですので flatfsd コマンドを使って保存することができます。
Armadilloを再起動して、ドライバ組み込まれるかどうかを確認します。
起動中以下のようなメッセージが出るか
dmesg コマンドを使って確認することができます。
以上でURGセンサのためのCDC ACM USB Modemドライバの組込みは終了です。
ファイルダウンロード
この節で使用したファイルを以下からダウンロードできます。
1,764,568 bytes
CMSのシステムの都合上ファイル名が linux.bin_.gz となっています。
11,071,893 bytes
CMSのシステムの都合上ファイル名が romfs.img_.gz となっています。
43,774 bytes
1,764,568 bytes
CMSのシステムの都合上ファイル名が linux.bin_.gz となっています。
11,071,893 bytes
CMSのシステムの都合上ファイル名が romfs.img_.gz となっています。
43,774 bytes