カーネルとユーザランドの設定 (CDC ACMドライバ編)

カーネルとユーザランドの設定 (CDC ACMドライバ編)

アットマークテクノのダウンロードサイトからダウンロード可能なカーネルは、Armadillo-400シリーズで動作させるための最低限のドライバのみ組み込まれており、その他のデバイスを利用する場合は自分でカーネルを再コンパイルして組み込む必要があります。

ロボットシステムでよく用いられる北陽電機のレーザ測域センサ URG シリーズも、Armadilloのデフォルトカーネルでは利用することができないデバイスの一つです。

ここでは、URGセンサを動作させるために必要な CDC ACMドライバの組み込み方を説明します。

Atmark-dist configuration

 + atmark-dist
   + linux-2.6.x -> ../linux-2.6.?? へのシンボリックリンク
 + linux-2.6.?? -> 以下は 2.6.26-at16 を仮定しています

上記のディレクトリ構成を仮定します。Atmark-dist を展開したディレクトリ内で

 $ make menuconfig

とコマンドを入力すると、以下のような画面が表示されます。

atmarkdist_atmarkdistconfig00.png
Atmark-dist Configuration初期画面

メニュー中央の青い長方形がカーソルです。 カーソルキーで上下に動かし、Enterキーで選択し、配下のサブメニューに入ります。

ここでは、Vendor/Product SelectionおよびKernel/Library/Defaults Selectionメニューを設定します。

Vendor/Product Selection

Vendor/Product Selectionでは、ターゲットのベンダとプロダクトを指定します。 (SnapGear) Vendorと表示されているところにカーソルを移動し、Enterをします。

atmarkdist_select_vendor00.png
Atmark-dist Configuration:ベンダ選択画面

ベンダ名はアルファベット順に並んでいるので、カーソルキーで上のほうに行き AtmarkTechno を Enter キーを押して選択します。

atmarkdist_select_vendor01.png
Atmark-dist Configuration:ベンダ選択 (AtmarkTechno)

次に、プロダクトを選択します。

atmarkdist_select_product00.png
Atmark-dist Configuration:プロダクト選択画面

アットマークテクノの製品名一覧が表示されるので、自分が使用しているプロダクト名 (ここでは Armadillo-440) を選択します。

atmarkdist_select_product01.png
Atmark-dist Configuration:プロダクト選択 (Armadillo-440)

Kernel/Library/Defaults Selection

VendorProduct Selectionメニューを抜け、Kernel/Library/Defaults Selectionメニューを選択します。

atmarkdist_customize_kernel.png
Atmark-dist Configuration:Kernel/Library選択画面

まず以下のように、カーネルソースとクロス開発環境およびライブラリを選択します。

  • Kernel: 前述の通りにディレクトリ構成を準備していれば自動で linux-2.6-x が選択される
  • (default) Cross-dev: デフォルトのまま。Armadillo-400系の場合は実質 armel
  • (None) Libc Version: デフォルトの None を選択

次は、このAtmark-dist Configurationの後に、カーネルやユーザランドの設定を行うかどうかの選択をします。

今回は、CDC ACMドライバを組み込むだけで、ユーザランドには手を加えないので、Customize Kernel Settings にのみスペースキーを押してチェックを入れます。

以上、設定が終了したら、Exit でメニューを抜けます。最後に Do you wish to save your new kernel configuration? と尋ねられるので Yes を選択して Atmark-Dist Configurationを終了します。

atmarkdist_exit_atmark_config.png
Atmark-dist Configuration:終了

カーネルの設定

Atmark-Dist Configurationを終了すると、シェル画面に戻り、コンパイルを開始します。しばらくするとカーネルの設定メニューが表示されます。

kernel_config00.png
Linux Kernel Configuration: 初期画面

Atmark-Dist同様、青い長方形がカーソルで、カーソルキーで上下に移動、Enterまたはスペースキーで選択します。

デバイスドライバを組み込むので、Device Driverを選択します。

kernel_config_devicedriver.png
Linux Kernel Configuration: Device Driver

下のほうにある USB Support サブメニューに入ります。

kernel_usb_support.png
Linux Kernel Configuration: USB Supportサブメニューを選択

CDC ACMドライバは USB Modem (CDC ACM) support というところにあります。

kernel_cdc_acm.png
Linux Kernel Configuration: USB Modem (CDC ACM) support

USB Modem (CDC ACM) support にカーソルを持っていき、スペースキーを押します。スペースキーを押すごとに、< >(無印) -> <M>(モジュール) -> <*> (組込ドライバ) のようにマークが変更されます。組込みドライバにする場合は、チェックボックスを以下のように <*> (アスタリスク) に設定します。

kernel_cdc_acm_embed.png
Linux Kernel Configuration: 組込型ドライバ設定

カーネルモジュール型ドライバにしたい場合は、チェックボックスを以下のように <M> に設定します。

kernel_cdc_acm_module.png
Linux Kernel Configuration: カーネルモジュール型設定

以上でCDC ACMドライバの設定は終わりです。Exitを何回か選択して Linxu Kernel Configuration を抜けます。

kernel_config_exit.png
Linux Kernel Configuration: 終了

最後にカーネル設定を保存するかどうか尋ねられるので、Yesと答えて終了します。

コンパイル

以上が終了したら、コンパイルを行います。 atmark-dist 直下のディレクトリで make clean と make を行います。 以前コンパイルしたオブジェクトファイルなどが残っている場合があるので、make clean は必ず行ってください。 コンパイルはPCの性能にもよりますが、数分から十数分かかります。

 atmark@atde3:~/work/atmarkdist/atmark-dist$ make
 make -C tools/sg-cksum
 make[1]: ディレクトリ `/home/atmark/work/atmarkdist/atmark-dist/tools/sg-cksum' に入ります
   :
  数分から十数分
   :
 /home/atmark/work/atmarkdist/atmark-dist/tools/cksum -b -o 2 /home/atmark/work/atmarkdist/atmark-dist/images/linux.bin.gz >> /home/atmark/work/atmarkdist/atmark-dist/images/linux.bin.gz
 make[1]: ディレクトリ `/home/atmark/work/atmarkdist/atmark-dist/vendors/AtmarkTechno/Armadillo-440' から出ます
 atmark@atde3:~/work/atmarkdist/atmark-dist$

コンパイルが終了すると、image ディレクトリの下に、linux.bin.gz, romfs.img.gz といったイメージファイルができているはずです。 途中でコンパイルエラーになっている場合、このイメージは作成されませんので、作成されたイメージファイルのタイムスタンプをよく確認してください。

 atmark@atde3:~/work/atmarkdist/atmark-dist$ ls -al images/
 合計 43296
 drwxr-xr-x  2 atmark atmark     4096 2012-08-19 12:47 .
 drwxr-xr-x 15 atmark atmark     4096 2012-08-19 12:47 ..
 -rwxr-xr-x  1 atmark atmark  3617965 2012-08-19 12:47 linux.bin
 -rw-r--r--  1 atmark atmark  1764568 2012-08-19 12:47 linux.bin.gz
 -rw-r--r--  1 atmark atmark 27803685 2012-08-19 12:47 romfs.img
 -rw-r--r--  1 atmark atmark 11071893 2012-08-19 12:47 romfs.img.gz

それぞれ、

  • linux.bin: Linux kernel。
  • linux.bin.gz: gzip 圧縮されたLinux kernel。これをArmadilloのkernel領域に書き込む。
  • romfs.img: ユーザランドイメージ。
  • romfs.img.gz: gzip圧縮されたユーザランドイメージ。これをArmadilloのuserland領域に書き込む。

となっています。

ダウンロード

作成したカーネルとユーザランドのイメージを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 を起動するとこのようなウインドウが現れます。

hermit_win32_start.png
Hermit-At Win32 起動画面

まず、使用するシリアルポートを選択します。 ここでは、COM2がArmadilloに接続されているシリアルポートです。

Memmapボタンを押してみてください。PCとArmadilloが正しく接続されており、ArmadilloがHermitのダウンロードモードになっていれば、メモリマップが表示されます。

hermit_win32_memmap.png
Hermit-At Win32 Memmap画面

表示を見てみると、RAMとFLASH領域があり、さらにFLASH領域は
  • config
  • userland
  • kernel
  • bootloader に分かれていることがわかります。

これから書き換えようとしているのは、kernel のカーネル領域と、userlandのユーザランド領域です。

カーネルの書き換え

まず、カーネルの書き換えを行います。 Erase ボタンを押し、Regionのプルダウンで kernelを選択し、実行ボタンを押します。

hermit_win32_erase_kernel.png
Hermit-At Win32 Erase画面

ダイアログが表示されカーネル領域が削除されます。

次にダウンロードボタンを押し、Image で先ほど作った linux.bin.gz を、Regionで kernel 選択します。

hermit_win32_download.png
Hermit-At Win32 Download画面

Image の右側の ... ボタンを押すと、ファイル選択のためのダイアログが開きます。ATDE3 for OpenRTM ではsambaが設定されていますので、アドレスバーのところに

 \\192.168.5.132 <- ATDE3 for OpenRTMのアドレス
 または
 \\192.168.5.132\atmark\work\atmarkdist\atmark-dist\images

のように、ATDEのアドレスを入力します。アカウント名(atmark)とパスワード(atmark)を入力し、先ほど作成したlinux.bin.gzのフォルダにアクセスし、ファイル (linux.bin.gz) を選択します。

hermit_win32_download_filadialog.png
Hermit-At Win32 ファイル選択画面

linux.bin.gz (拡張子が見えず linux.bin と表示されますが、種類がGZファイルとなっているほう) を選択します。以上が終わったら実行ボタンをクリックします。 書き込みダイアログが表示され、数分でカーネルの書き込みは終了します。

ユーザランドの書き換え

次にユーザランドを書き換えます。 カーネル同様、

  • Erase メニューで userland を削除
  • Download メニューで先ほど linux.bin.gz を選択した場所にある、romfs.img.gz を選択し、書き込み

を行います。 ユーザランドはファイルサイズが大きいため、書き換えには十数分かかります。

以上で、カーネルとユーザランドの書き換えは終了です。

デバイスの接続

URGセンサの接続

Armadilloのジャンパピンをオープンにして、電源を再投入します。この時URGセンサはまだ接続しないでください。

URGセンサはUSB Modeとして /dev/ttyACM0 (2つ目以降はttyACM1, ttyACM2, ...) というデバイス名で利用できます。

起動後、rootでログインして、デバイスが存在するかどうか確認してみてください。

 [root@armadillo440-0 (ttymxc1) ~]# ls /dev/ttyACM*
 ls: /dev/ttyACM*: No such file or directory

USGセンサはまだ接続されていないのでまだデバイスファイルは存在しません。 次に、URGセンサを接続してみます。URGセンサをArmadilloのUSBコネクタに接続すると以下のようなメッセージが表示されます。

 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

モジュールのロード

CDC ACMドライバをカーネルに直接組み込んだ場合は、/dev/ttyACM0 ができているはずです。モジュールとして組み込んだ場合は、ドラバモジュールをロードする必要があります。デバイスモジュールのロードには modprobe コマンドを使います。

 [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

以上で、CDC ACMドライバがシステムに組み込まれていることが確認できました。

モジュールの自動ロード

CDC ACMドライバをカーネルに直接組み込んだ場合は、URGセンサを接続しArmadilloを起動すると自動的にデバイスが利用可能になりますが、モジュールとして組み込んだ場合 modprobe でドライバモジュールを組み込む必要があります。

Armadillo の /etc/config/rc.local にmodprobeコマンドを追加することで、自動時に自動的にモジュールをロードするよう設定します。

 [root@armadillo440-0 (ttymxc1) ~]# vi /etc/config/rc.local

viエディタでrc.localのPATH設定を行っている部分の後ろくらいに以下のようなコマンドを入力します。

 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
 # ここまで

上述したように、/etc/config 以下のディレクトリは保存可能なコンフィギュレーション領域ですので flatfsd コマンドを使って保存することができます。

 [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

以上でURGセンサのためのCDC ACM USB Modemドライバの組込みは終了です。

ファイルダウンロード

この節で使用したファイルを以下からダウンロードできます。

ファイル名 (サイズ) 説明 日付
ドライバ設定: カーネルモジュール
cdcacm_mod_linux.bin.gz
1,764,568 bytes
CDC ACM ドライバを組み込んだArmadillo-440用カーネルイメージ。
CMSのシステムの都合上ファイル名が linux.bin_.gz となっています。
2012.08.19
cdcacm_mod_romfs.img.gz
11,071,893 bytes
CDC ACM ドライバを組み込んだArmadillo-440用ユーザランドイメージ。
CMSのシステムの都合上ファイル名が romfs.img_.gz となっています。
2012.08.19
cdcacm_mod_kernel_config.config
43,774 bytes
上記設定をしたLinuxカーネル設定ファイル。(元ファイル名は linux-2.6.x/.config) 2012.08.19
ドライバ設定: カーネル組込み
cdcacm_embd_linux.bin.gz
1,764,568 bytes
CDC ACM ドライバを組み込んだArmadillo-440用カーネルイメージ。
CMSのシステムの都合上ファイル名が linux.bin_.gz となっています。
2012.08.19
cdcacm_embd_romfs.img.gz
11,071,893 bytes
CDC ACM ドライバを組み込んだArmadillo-440用ユーザランドイメージ。
CMSのシステムの都合上ファイル名が romfs.img_.gz となっています。
2012.08.19
cdcacm_embd_kernel_config.config
43,774 bytes
上記設定をしたLinuxカーネル設定ファイル。(元ファイル名は linux-2.6.x/.config) 2012.08.19

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2160
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク