2009年10月14日水曜日

ZD1211B 進展!

ZD1211B を搭載した USB Wi-Fi アダプタ PLANEX GW-US54GXS が、無事にアクセスポイントモード(master mode)で使えるようになりました。同じドライバで、managed mode の WPA2 も OK です。まとめると、確認できたのは

  • master mode で、WEP 104 ビット
  • managed mode で、WPA2 (TKIP)
wpa_supplicant では master mode の WPA は対応できないようですが、私の用途では問題ありません。

wpa_supplicant は、Debian に標準で付いていた 0.6.4 ではダメみたいで、ZyDAS 専用の(昨日紹介したパッケージに含まれている)バージョンが必要のようです。ただし、こいつは 0.4.7 をベースにしているようで、コマンドラインオプションが少し違うようなのです。そのため、単純に ZyDAS 用の wpa_supplicant で上書きインストールしてしまうと、標準の ifup が動かなくなります。。。/etc/wpa_supplicant ディレクトリにあるスクリプトを修正すれば対応可能かも知れませんが、まだ試していません。

いずれにしても、アクセスポイントモードと WPA2 のクライアントモードを、同一のドライバと wpa_supplicant で対応できるようになったので、ちょっと前進しました。明日は ifup を動くようにして、rc.d 下のスクリプトで何も考えずにブートできるようにするのが目標です。果たしてうまくいくのでしょうか?

補足 (備忘録)

ZyDAS 用の wpa_supplicant を make しようとしたら、openssl のヘッダファイルがなくて失敗しました。Debian のどのパッケージに含まれるのか、しばらく悩んだのですが、libssl-dev の中に無事に見つけました。

2009年10月13日火曜日

ZD1211B の master mode

なんのことやら分からんタイトルですが。

ZyDAS 社 ZD1211B を搭載した USB Wi-Fi アダプタで Wi-Fi のアクセスポイントを作ろうとしています。v2.6.28-79d042a-oer23 に入ってくるドライバだと、ZD1211B はアクセスポイントになれない(master mode になれない)のですが、ZyDAS 社が供給している vendor driver だと master mode になれるのだそうです。vendor driver の入手先がいろいろ変わっているようで、どうも、現在はここにあるのが最新みたいです。

そのままではコンパイルが通らず、ちょっと調整が必要でした。その辺は、また書きたいと思います。

さっそく master mode を試したところ、ちゃんとアクセスポイントになりました。すばらしい。しかし、ドライバが全体に枯れていない感じで、ちょっとしたことで Oops メッセージを出したり、固まったりします。一つは、試しにクライアントから WEP の認証をしくったら、Oops しました。あと、WPA を試そうとしたら、動きがおかしくなりました。これはどうも、上記サイトからダウンロードする専用の WPA supplicant を使わないといけないみたいです。カーネルが固まると、そのたびにテスト用カーネルのリブートが必要ですし、その間はネットワークが繋がらないのでシリアルコンソールからの作業になりますし、なかなか前に進めません。

しかし、ぜひともアクセスポイントモードは実現したいので、もう少し頑張ってみようと思います。

2009年10月9日金曜日

ToUcam でもダメだった

ToUcam Pro II を使ってみましたが、やっぱりドライバがこけたり、画像にノイズが乗ったりします。これはドライバの問題だな、と決め付けることしました。明日以降、新しいドライバを試してみようと思います。

あと、Wi-Fi の master モードを試したいんだなー。することはたくさんあります。幸せです。

2009年10月8日木曜日

ToUcam Pro II を借りた

同僚から ToUcam Pro II を借りたので、これも試してみようと思います。

2009年10月7日水曜日

ノイズは、こんな感じ~

poi1007_9_linux2_1 昨日の続きです。ffmpeg で JPEG ファイルが作れたので、ちょっと載せてみます。ね、ノイズが乗るでしょう? 職場の先輩から ToUcam Pro II を借りられることになったので、今度比較してみようと思います。

ちなみに、コマンドはこんな感じー。

$ ffmpeg -f rawvideo -s 640x480 -r 1 -t 1 -i /dev/video0 -f image2 \
  ~/tmp/poi1007_9_linux2_%d.jpg 

ffmpeg の使い方も、いまひとつ良く分かっていません。

2009年10月6日火曜日

webcam は繋がったが…

CIMG6892 Linux 2.6.28 のカーネルに、webcam のデバイスドライバが含まれていることが分かったので、家に帰って、さっそく手持ちの webcam (Logitech QuickCam Pro 4000) を BeagleBoard に繋いでみました。当初想像した uvc ドライバではなく pwc ドライバで認識されたのが予想外でしたが、とりあえず繋がりました。

しばらく試行錯誤した後、一応、ffmpeg で動画の取り込みができることが分かりました。ばんざい! でも、いろいろ問題があります。一つはドライバが不安定なこと。ときどき、/dev/video0 をオープンできなくなることがあります。もう一つは、動画に変なノイズ(ブロックノイズやモスキートノイズではない)が乗ることです。とりあえず、最低限の確認はできたので、これで良しとします。次回は、何か別の webcam を探してこようと思います。

以下、備忘録です。

$ dmesg (の一部)
Linux video capture interface: v2.00
pwc: Philips webcam module version 10.0.13 loaded.
pwc: Supports Philips PCA645/646, PCVC675/680/690, PCVC720[40]/730/740/750 & PCVC830/840.
pwc: Also supports the Askey VC010, various Logitech Quickcams, Samsung MPC-C10 and MPC-C30,
pwc: the Creative WebCam 5 & Pro Ex, SOTEC Afina Eye and Visionite VCS-UC300 and VCS-UM100.
pwc: Logitech QuickCam 4000 Pro USB webcam detected.
pwc: Registered as /dev/video0.
$ setpwc -S 320,240,30
$ ffmpeg -f video4linux -s 320x240 -r 30 -t 10 -i /dev/video0 foo.mpg

参考

2009年10月5日月曜日

U-Boot (mkimage) のインストール

クロスコンパイルで、BeagleBoard 用カーネルの vmlinux まで生成できたのですが、やはり mkimage がないと uImage を生成できないことが分かりました。(当たり前か)

ということで、U-Boot をインストールしています。バージョンは u-boot-2009.08 です。今、ビルド中。。。こんな感じです。

$ export PATH=クロスコンパイラの入ったパス:$PATH
$ make CROSS_COMPILE=arm-unknown-linux-gnu- omap3_beagle_config
$ make CROSS_COMPILE=arm-unknown-linux-gnu- dep
$ make CROSS_COMPILE=arm-unknown-linux-gnu-

とりあえず、ビルドはできました。(しかし、なんで make install が無いんだ?)

さて、make uImage です。

  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.28-00008-g7f78d9f
Created:      Mon Oct  5 23:15:42 2009
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2702880 Bytes = 2639.53 kB = 2.58 MB
Load Address: 80008000
Entry Point:  80008000
  Image arch/arm/boot/uImage is ready

じゃかじゃーん。果たして、これで BeagleBoard はちゃんと起動するのでしょうか?

後記

無事にカーネルをブートできました。偶然かも知れませんが、元々動かしていたカーネルも、今回生成したカーネルも、GCC 4.3.2 によるものでした。以下に、ブートメッセージの一部を示します。

Linux version 2.6.28-00008-g7f78d9f (yokoyama@hogehoge) (gcc version 4.3.2 (crosstool-NG-1.4.2) ) #1 Mon Oct 5 22:38:50 JST 2009
CPU: ARMv7 Processor [411fc082] revision 2 (ARMv7), cr=10c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP3 Beagle Board
Memory policy: ECC disabled, Data cache writeback
OMAP3430 ES2.1
SRAM: Mapped pa 0x40200000 to va 0xd7000000 size: 0x100000
Reserving 15728640 bytes SDRAM for VRAM
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
Kernel command line: console=ttyS2,115200n8 root=/dev/mmcblk0p2 rootwait rootfstype=ext3 ro
Clocking rate (Crystal/DPLL/ARM core): 26.0/332/500 MHz

これで、カーネル周りの開発も行けそうです。ちょっと嬉しい。

ところで udev

BeagleBoard の Debian に dosfstools を入れて、mkdosfs をできるようにしたのですが、なんと /dev/sda1 がありません。udev のマニュアルとか眺めて頭を抱えていたのですが、実は /dev/mmcblk0p1 という名前で参照できることが分かりました。かなり時代に取り残されている私です。

make uImage と crosstool-ng

昨日、BeagleBoard 上のセルフコンパイルで Linux カーネルをビルドできるようになりました。というか、実はまだ BeagleBoard 用のカーネルではなくて、Debian ARM の標準カーネルなんですけど。vmlinux までは無事に生成できて、mkimage を動かしてみようと思ったのですが、ふと vmlinuz は要らんのか、と思いつきました。BeagleBoard の mkimage サンプルが、vmlinuz を使っているからです。

Linux カーネルについては、昔ちょっとだけ勉強したような気もするのですが、vmlinuz とか bzImage とか、忘れました。今日、会社の昼休みに U-Boot のドキュメントとか読んでみたのですが、mkimage の要求もよく分かりません。しかしいろいろググっていたところ、Linux のカーネルビルドで make uImage とかできることが分かり、そちらを試してみようと思っています。

さて。家に帰ってから早速 make uImage してみようと思ったのですが、やはり BeagleBoard 上でのセルフビルドには時間がかかります。一番の原因は、プロセッサの処理速度というよりも、ローカルディスクの容量と速度が不十分なことです。今は、カーネルソースを NFS サーバーに置いているのですが、やはりローカルディスクに敵いませんし、/tmp が SD カード上というのも(フラッシュメモリは書き換えに弱いので)不安が残ります。tmpfs を使えば良いのでしょうが、今度はメモリサイズが気になります。最終的にはセルフコンパイラの恩恵に与るとしても、普段の実験には Celeron 1.8GHz を使いたいと思いました。

そんな訳で、改めて crosstool を試してみることにしました。昨日の実験で、Linux カーネルのビルド方法を少しずつ思い出したのも、その決断を後押ししています。

最初、crosstool の 0.43 を試してみたのですが、なんと gcc が -march=armv7-a というオプションを受け付けないことが判明しました。どうも、GCC のバージョン 4.1.0 では古すぎるようです。再度ググってみたところ、今は crosstool-ng というのがあるそうで、そちらを試すことにしました。ng と言っても、無印 crosstool とはかなり違うようで、いきなり configure && make install が必要になったりしました。(後で分かりましたが、Linux カーネルのビルドを真似しているようです。)

crosstool-ng 1.4.2 のインストール後、

$ ct-ng arm-unknown-linux-gnu
$ ct-ng menuconfig
$ ct-ng build

としてみたのですが、途中で gcj がなんとかと言って落ちました。おおお、Java は要らん、Java は! という訳で、今度は ct-ng menuconfig で、Java と Fortran の選択を外してみました。再度 ct-ng arm-unknown-linux-gnu build したところ、今度は autoconf や automake のバージョンが古いといって怒られます。さらに、glibc-cvs-2.9 とかいうのを拾いにいって失敗したり、いろいろ苦労しました。結局、tar.gz から autoconf 2.60 と automake 1.10.2 をインストールし、さらに menuconfig で調整した結果、今のところかなり順調にビルドが進んでいます。

果たして、crosstool-ng は無事にインストールできるのでしょうか。そんでもって、BeagleBoard 用のカーネルのクロスビルドはできるのでしょうか!?

後記 1

とりあえず、セルフ環境での make uImage はうまく行きそうです。まだ、Debian ARM のカーネルで試しただけですが。

後記 2

crosstool-ng 1.4.2 での armel コンパイラは無事にビルドできました。最適な環境かどうか、また、今のところ BeagleBoard のカーネルがビルドできるかどうか不明ですが、とりあえず crosstool-ng 1.4.2 用の .config ファイルをここに置いておきます。

2009年10月4日日曜日

セルフ環境でカーネルビルド

土日は、BeagleBoard のセルフ環境でのカーネルビルドを実験しました。とりあえず、Debian のサイトから Linux-2.6.26 のソースを入手しました。しばらく手間取りましたが、カーネルをビルドできました。

今度は、BeagleBoard で実際にブートできるカーネルをビルドしてみようと思います。道のりは長いですが、頑張ります。

2009年9月26日土曜日

Wi-Fi が繋がって、快適に!

CIMG6854_ret ようやく、BeagleBoard に Wi-Fi でログインできるようになりました。ここまで、長かったーーー。今日は、焼肉パーティでもするかな?

昨日までに、USB Ethernet で接続できることを確認したのですが、今日は USB Wi-Fi で接続できるようになりました。WPA2 も OK です。OpenSSH デーモンを動かしたので、ssh でのログインも OK です。さっき、gcc をインストールして、簡単なコードをコンパイルできることも確認しました。

まずは Linux 2.6.28 のカーネルモジュール

先日、カーネルをグレードダウンしたので、まずはカーネルモジュールからインストールしました。現状、ネットワークが繋がっていないので、SD カードの ext3 を他のホストからマウントして、.deb ファイルを書き込みます。以下を入手してきて、インストールしました。

  • linux-image-2.6.28-oer23_1.0lenny_armel.deb
同時に USB Wi-Fi のファームウェア

同時に、USB Wi-Fi zd1211 のファームウェアも入手します。ここにいろいろ書いてありますが、私の場合は、以下を dpkg -i でインストールするだけで OK でした。あ、そうそう。後で必要になるので、iwconfig などをインストールしておきます。

  • http://ftp.debian.org/debian/pool/non-free/z/zd1211-firmware/zd1211-firmware_2.21.0.0-0.1_all.deb
  • wireless-tools_29-1.1_armel.deb
  • libiw29_29-1.1_armel.deb (← wireless-tools が要求します)
WPA, WPA2 を使う場合は、さらに以下が必要です。

  • wpasupplicant_0.6.4-3_armel.deb
  • libpcsclite1_1.4.102-1_armel.deb
  • libdbus-1-3_1.2.1-5+lenny1_armel.deb
zd1211-firmware 以外は、ここなどから入手できます。

Wi-Fi の設定とか

以下、WPA2 を使うことを前提としています。まず、WPA2 の事前共有鍵を設定します。SSID を foo、事前共有鍵のフレーズを korehahimitsuda と仮定します。

# wpa_passphrase foo wpa_passphrase > /etc/wpa_supplicant/wpa_supplicant.conf
次に、そのファイルをエディタで開き、次のように追記します。(実は、よく分からないで書いています。できたら、マニュアルを参照してください。)

network={
        proto=WPA WPA2
        key_mgmt=WPA-PSK
        pairwise=CCMP TKIP
        ssid="foo"
        #psk="korehahimitsuda"
        psk=...
}
次に、/etc/network/interfaces に追記します。(auto lo の後ろに、wlan0 を書き加えています。)

auto lo wlan0

iface wlan0 inet dhcp
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
これで、ifup wlan0 で Wi-Fi に繋がりますし、OS を再起動すれば自動的にネットワークが設定されます。

なお、OpenSSH の設定例は巷に溢れていますので、ここでは割愛させて頂きます。

autoboot のディレイ変更

U-Boot で、起動後の一定時間後に OS をブートするようになっているのですが、デフォルトは 10秒で、なんとも長いと思っていました。これを設定で変更できることが分かり(← 気づくのが遅い)、変更しました。

OMAP3 beagleboard.org # setenv bootdelay 3
OMAP3 beagleboard.org # saveenv
保証外でしょうけど、ここを参考にしてしまいました。

2009年9月25日金曜日

git で、linux-omap-2.6 の追っかけ

git の使い方を少し覚えたので、まずは linux-omap-2.6 と openembedded の「追っかけ」をすることにしました。linux-omap-2.6 は、枝の構造が複雑で、というか CVS に比べて枝の作成が容易なためか、枝の全貌を理解することは、ほとんど不可能です。とりあえず、昨日インストールしたカーネル v2.6.28-79d042a-oer23 のソースと、その前後関係を摑めるようにしました。

この辺を真面目に追いかけようとすると、Linux 2.6 のリポジトリ(特に ARM 周り)、linux-omap-2.6 のリポジトリ、BeagleBoard 向けのパッチを全てフォローしなくてはならず、それはほとんど無理な作業です。とりあえず、動けば正解のアプローチで、のんびりやろうと思います。

明日は、ネットワーク設定をして、カーネルのセルフコンパイルができるようになれば良いと思います。(そこまで進むのは無理かも)

2009年9月24日木曜日

Debian で Ethernet が繋がるようになった

今日の作業で、ようやく、BeagleBoard 上の Debian ARM で TCP/IP できるようになりました。これで、今後はシリアルケーブルなしにデバッグができるようになります。つーか、ネットワーク繋がらなくちゃ何もできないのですが。

先日までのトライで、lenny/v2.6.29-58cf2f1-oer44.1 を起動できるようになったものの、BeagleBoard (リビジョン B6)で USB (ハブ)を認識できないという問題を抱えていました。今日は、とりあえず、片っ端からいろいろなカーネルを立ち上げ、問題の切り分けをしてみました。(もしかすると、USB OTG ケーブルの問題なのかも知れませんが、極細の IC クリップがないとテスタを当てられないので、放置しています。いずれ余裕ができたら、もうちょっと切り分けしてみようと思います。)

まずは、Lenny 最新の v2.6.31-52a962f-ang3.1 を試してみます。しかし、カーネルの起動途中で固まってしまう現象にぶつかりました。今度は少し戻って、v2.6.29-58cf2f1-oer45.1。これは、上記 oer44.1 とほぼ同じ動作になります。

ここで、かなり行き詰まりを感じたのですが、v2.6.28 系列も試してみることにしました。これが少し億劫だったのは、上記サイトに、もはや v2.6.28 系列が置かれていないということです。アーカイブを探したところ、こちらのサイトに古いバージョンが置かれていることが分かりました。問題は(大したことではないが)、そこに uImage は置かれておらず、.deb ファイルから vmlinuz を展開し、そこから U-Boot の mkimage で uImage を生成しなくてはいけないという点です。以下、備忘録です。

まず、lenny/v2.6.28-79d042a-oer23 の .deb ファイルをダウンロードします。ここから入手できます。次に、これを展開します。.deb ファイルは(私の知る限り) ar フォーマットになっているので、次のように展開します。

$ ar xf linux-image*.deb
中から data.tar.gz というファイルが出てくるので、そこからさらに boot/vmlinuz-2.6.28-oer23 というファイルを取り出します。

ここからは、U-Boot の mkimage というツールが必要です。ここの説明にあるように QEMU 上で Debian を動かし、そこで mkimage するのが簡単ですが、QEMU と実世界(?)の間でファイル交換が必要になります。私は、QEMU 上の Debian から、ホストに sftp をかけてファイルを交換しました。mkimage が使えるようになったら、次のようにします。

$ mkimage -A arm -O linux -T kernel -C none -a 0x80008000 \
-e 0x80008000 -n "Linux" -d ./vmlinuz-2.6.28* uImage
できた uImage は、sftp で再び実世界に戻し、何らかの方法で SD カードの VFAT パーティションに書き込みます。(パーティションの作成やフォーマットには、ここにある video tutorial を見て、GParted を使うのが簡単です。慣れれば、例えば VFAT のフォーマットには mkdosfs -F32 -v /dev/sdf1 (注意: デバイス名は、作業環境に依存します)とかすれば、OK です。)

私の場合は、これで無事に USB ハブと USB-Ether アダプタ LUA-U2-KTX を認識できました。以下に、関連する dmesg を示します。

Linux version 2.6.28-oer23 (root@debian-armel) (gcc version 4.3.2 (Debian 4.3.2-
1.1) ) #1 Wed Apr 8 15:30:01 UTC 2009
CPU: ARMv7 Processor [411fc082] revision 2 (ARMv7), cr=10c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP3 Beagle Board
Memory policy: ECC disabled, Data cache writeback
OMAP3430 ES2.1
SRAM: Mapped pa 0x40200000 to va 0xd7000000 size: 0x100000
(略)
musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0
musb_hdrc: USB OTG mode controller at d80ab000 using DMA, IRQ 92
(略)
musb_hdrc musb_hdrc: MUSB HDRC host driver
musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 2
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
(略)
musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0
musb_hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine (X), bulk split (X),
 HB-ISO Rx (X), HB-ISO Tx (X), SoftConn)
musb_hdrc: MHDRC RTL version 1.400 
musb_hdrc: setup fifo_mode 4
musb_hdrc: 29/31 max ep, 16384/16384 memory
musb_hdrc: hw_ep 0shared, max 64
musb_hdrc: hw_ep 1tx, max 512
musb_hdrc: hw_ep 1rx, max 512
musb_hdrc: hw_ep 2tx, max 512
musb_hdrc: hw_ep 2rx, max 512
musb_hdrc: hw_ep 3tx, max 512
musb_hdrc: hw_ep 3rx, max 512
musb_hdrc: hw_ep 4tx, max 512
musb_hdrc: hw_ep 4rx, max 512
musb_hdrc: hw_ep 5tx, max 512
musb_hdrc: hw_ep 5rx, max 512
musb_hdrc: hw_ep 6tx, max 512
musb_hdrc: hw_ep 6rx, max 512
:musb_hdrc: hw_ep 7tx, max 512
musb_hdrc: hw_ep 7rx, max 512
musb_hdrc: hw_ep 8tx, max 512
musb_hdrc: hw_ep 8rx, max 64
musb_hdrc: hw_ep 9tx, max 512
musb_hdrc: hw_ep 9rx, max 64
musb_hdrc: hw_ep 10tx, max 512
musb_hdrc: hw_ep 10rx, max 64
musb_hdrc: hw_ep 11tx, max 256
musb_hdrc: hw_ep 11rx, max 256
musb_hdrc: hw_ep 12tx, max 256
musb_hdrc: hw_ep 12rx, max 256
musb_hdrc: hw_ep 13tx, max 256
musb_hdrc: hw_ep 13rx, max 4096
musb_hdrc: hw_ep 14shared, max 1024
musb_hdrc: hw_ep 15shared, max 1024
musb_hdrc: USB OTG mode controller at d80ab000 using DMA, IRQ 92
USB-Ethernet のほうは、こんな感じです。

eth0: register 'asix' at usb-musb_hdrc-1.1, ASIX AX8817x USB 2.0 Ethernet,
00:07:40:xx:xx:xx
udev: renamed network interface eth0 to eth1
明日以降、今度は USB Wi-Fi に挑戦し、それがうまく行っても行かなくても、本筋の作業に戻ろうと思います。さて、寝るとするか…。

2009年9月23日水曜日

とりあえず、ケーシング

CIMG6839 ケースに収まっていないと、いろいろと作業性が悪いので、家に転がっていたプラケースに収めてみました。電源の取り回しが悪いので、大容量の 5V 電源を使い、ボードと USB ハブに電源を分配する予定です。

NetBSD でも git clone できるようになった

久しぶりの日記です。

先日まで、NetBSD 3.1.1 上の git で git clone ができなかったのですが、新たにインストールした NetBSD 5.0.1 上で、git clone できることを確認しました。根本原因は追究していないのですが、おそらく依存するツールのバージョンの問題ではないかと推測しています。カーネルの相違というのは、あまり関係なさそうな気がするのですが。

いずれにしても、NetBSD 3.1.1 は保守が終わってしまっているので、パッケージ管理者やメーリングリストに照会するのもおかしな話なので、黙って 5.0.1 に移行しようと思います。

2009年9月16日水曜日

昨日の Debian

昨日の Debian 環境構築の詳報です。つーか、備忘録です。

SD カードイメージの作成

QEMU 環境で仮想ディスクイメージにインストールした Debian ARM を、SD カードに焼きました。qemu-system-arm が生成した img ファイルを、loop device に接続してマウントし、中身を tar.bz2 に吐き出します。問題は、img ファイルに FAT32 と ext3 のパーティションが入っているのに、loop デバイス自身はパーティションを認識する能力がないらしいことです。しようがないので、fdisk をかけてパーティションのオフセットを調べて、それを使ってマウントしました。例えば、次のような感じです。

$ fdisk 1gb.img
Command (m for help): u
Changing display/entry units to sectors

Command (m for help): p

Disk 1gb.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
  
  Device Boot      Start         End      Blocks   Id  System
1gb.img1              63      112454       56196    b  W95 FAT32
1gb.img2   *      112455     1783214      835380   83  Linux
1gb.img3         1783215     2088449      152617+   5  Extended
1gb.img5         1799280     2088449      144585   82  Linux swap / Solaris

Command (m for help): q

$ bc
512*112455
57576960
^D

$ sudo losetup -o 57576960 /dev/loop0 1gb.img
$ sudo mount -o ro /dev/loop0 /mnt

$ ls /mnt
bin   dev  home  lost+found  mnt  proc  sbin     srv  tmp  var
boot  etc  lib   media       opt  root  selinux  sys  usr

ログイン画面が出ない

uImage を FAT32 に、ファイルシステムの内容を ext3 に展開し、U-Boot も設定して BeagleBoard を起動してみました。おおお、無事に起動するー。途中で、ext3 のタイムスタンプが未来になっているとか言ってリブートがかかりましたが、2回目は OK でした。これはまた、別途検討。

もっと大きな問題は、なんとブートが成功してもシリアルポートに login: が出ません! というか、tty のエコーバックが全然出ない。でも、heartbeat しています。結論からいうと、/etc/inittab や securetty の設定を忘れてました。ドキュメントにちゃんと書いてあるのに、無視してました。そのため、思わず /etc/init.d/rc をデバッグしそうになったり、update_rc.d というコマンドを覚えたりしました。後者はこんなふうに使うそうです。

# update_rc.d -f cron remove
これをやっても、/etc/init.d/cron は消えません。再度有効にするには、
# update_rc.d cron defaults 89 11
とかするようです。(記憶で書いているので、間違っていたらごめんなさい。) 詳細は、この辺が詳しいです。(← マニュアル見ろよ! > 俺

もう一つ、mount の remount オプションを覚えました。この辺、うろ覚えでいつも混乱します。NetBSD だと、mount -uw / とかするんだよな、確か。Linux では、mount -o remount,rw / とかするみたい。昨日、/etc/init.d/rc をいじっていたら、ルートファイルシステムが readonly になってしまい、rc を戻せなくて焦ったのでした。(← 生兵法は怪我のもと)

あ、そうそう。シングルユーザーモードにする方法も思い出しました。カーネルに single というキーワードを渡せば良いみたいです。U-Boot だと、bootargs に single って追加してあげればカーネルに伝わります。

解決できていない問題

もう一つが、昨日(夜中に)書いた musb_hdrc の件です。これは重そうですが、解決しないとネットに繋がらないので、何もできません。。。昨日夜中までゴリゴリしていて睡眠不足なので、これは明日以降、挑戦してみます。

一方、bitbake console-image は 40時間後に終わった

QEMU で Debian ARM と戯れいていた間、実は OpenEmbedded の bitbake console-image は動き続けていました。もちろん、コンピュータは ESXi 上の仮想マシンなので、それに専念していた訳ではないのですが、ざっくり Celeron 430@1.80GHz でビルドに 40時間を要した計算です。うーん、気軽に make clean できる環境じゃあないな。ちなみに、ディスクはこんな感じ。

$ du -m --max-depth=1 .
1       ./bitbake
519     ./openembedded
1       ./build
17682   ./tmp
18201   .
18GB。。。ところで、Debian ARM の BeagleBoard ポーティングでも OpenEmbedded のカーネルパッチの成果を活用しているようで、OpenEmbedded も有用なプロジェクトではあります。。。

Debian、とりあえず起動

BeagleBoard B6 の上で、Debian (Lenny v2.6.29-ore44.1) がとりあえず動きました。いろいろ苦労したけど、詳細はまた明日。

いま一番ハマっているのは、USB OTG インターフェイスを認識しなくなったことです。こんな感じ。

# dmesg (抜粋)
[   23.012878] musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0
[   23.013092] musb_hdrc: ConfigData=0x33 (UTMI-16, HB-ISO Rx, SoftConn)
[   23.013092] musb_hdrc: MHDRC RTL version 1.400
[   23.013122] musb_core_init 1421: reconfigure software for static FIFOs
[   23.013946] musb_hdrc musb_hdrc: musb_init_controller failed with status -19
Ångström の 2.6.28 のカーネルでは、ちゃんと認識しているんだがなあ。とりあえず、動くカーネル(ソースは辿れないけど)と動かないカーネルがあるので、なんとか調査は可能かも。

そうそう。そろそろ git の勉強をしないと、カーネルの「追っかけ」が辛くなってきました。

2009年9月14日月曜日

QEMU で Debian のインストール

Debian 嫌いだって言ったけど。。。ま、いっか。

ここのサイトを見て、BeagleBoard 用の Debian をインストール中です。CentOS 上に QEMU を入れて、その上で試しているのですが、なかなか面白いです。これが ARM なのかー、ふーん、って感じです。これで Wi-Fi が動いたら嬉しいなあ。(なんとなく他力本願)

後記 (9月16日)

この日、夜中にずっと QEMU を動かしていたのですが、インストーラが途中で固まってました。原因は不明ですが、再トライです。今度は、インストーラをもっと冗長にすることにしました。具体的には、qemu の -append オプションに「priority=low」を追加します。この辺は、ここに詳しい説明があります。

また、インストーラ画面で、診断やシェルを獲得する方法も覚えました。Alt-F4 で診断画面が、また、Alt-F2 や F3 でシェルを獲得できます。

いま、これで再度挑戦中。どうなることやら。。。

ZyDAS ZD1211 の話とか

先日購入した Planex GW-US54GXS (チップは ZyDAS ZD1211B らしい)が、まだ Ångström Demo for BeagleBoard[1]で動いていません。少し情報収集をしたら、こんな議論が。 どうも、Ubuntu では動いているっぽいです。あと、Debian (私の好きくないディストリビューション)も BeagleBoard で動いているぽいです。ZD1211 の情報が書かれているのも、ちょっと触手を伸ばしたくなります。(私ってノンポリかも) どれくらいのサイズの SD カードがあれば動くんだろう。

(ちなみに、家の CentOS サーバーでは、今も OpenEmbedded で bitbake console-image が進行中です。)

[1] http://www.angstrom-distribution.org/demo/beagleboard/ にある、24-Mar-2009 版の uImage と、Angstrom-Beagleboard-demo-image-glibc-ipk-2009.X-stable-20090612--beagleboard.rootfs.tar.bz2 を使用。

2009年9月13日日曜日

Ångström デモのインストールまでできた

DSC_0238 外堀が埋まってきたこともあり、ようやく Ångström ディストリビューション(デモ)のインストールまで進みました。PC (ThinkPad T42) で Puppy Linux を起動し、そこから SD メモリのパーティションを切りました。(50MB を VFAT に、950MB を ext2。) サイズ的には余裕はあまりないのですが、VFAT に uImage を書き、ext2 にディストリビューションの tar ball を展開することで、Linux のブートを確認できました。(ちなみに、U-Boot まではボード上のフラッシュメモリに載せています。)

最近 Linux を使っていなかったため、ネットワークの設定などでハマりました。最初に、telnetd も sshd も動いてないなあ、どうやってネットからログインしたら良いんだ? と思ったのですが、dropbear というのが、SSH のサーバーなのでした。(知らないことばっかり。)

あと、ネットワークの自動設定にもハマりました。いろいろ調べて、/etc/network/interfaces というファイルに記述すれば良いことが分かりました。(参考) ただし、最初はリブート時に自動的にネットワークが立ち上がらず、なんでやねんと悩んでいたのですが、interfaces ファイル中に auto eth0 とか書いてないとダメみたいです。うーん、慣れの問題かとは思いますが、私は NetBSD みたいな単純な仕組のほうが好きだなあ。

ちなみに、別途購入した USB Wi-Fi はまだうまく行っていません。ZD1211B とかいうインターフェイスなのですが、ドライバがファームウェアをロードするところでコケます。ググってみると、この辺はみんなはまっているようで、鬼門みたいです。他に、アクセスポイントになれる USB Wi-Fi なら、なんでも良いんですけどね。とりあえず、焦らず情報収集をしてみようと思います。(最悪は、ベンダが書いたドライバをデバッグするはめになるのかも知れないが、できたら本質的でない部分は他力本願で行きたい。)

今日は、ここまで。また、ランニングに行ってこようかと思います。あ、そうそう。起動画面はこんな感じです。

とりあえず、1TB の NAS を用意して、後へはひけなくなった

OpenEmbedded が 10GB ものワークファイルを書き出してくれたため、私のしょぼい NAS (80GB の RAID 1)は溢れてしまいました。しかたがないので、清水の舞台から飛び降りる気持ちで 1TB のディスクを 2台購入。FreeNAS サーバーに増設しました。これで、もはやディスクに関しては御大臣状態です。

副作用として、デジカメ写真を初めとする各種電子データが一本のツリーで統合管理できるようになり、思わずディスクの掃除とか始めてしまいました。今までは「このファイル、どこかに保存したんだっけかなー。どの DVD-R に焼いたんだっけ? 焼いてないと困るから、こっちにもコピーしておこう」ということが多々あったのですが、これからは、ディスク上で find と grep と unzip を駆使すれば、機械的にファイルを見つけることができる…はずです。

閑話休題。開発環境のほうは、ESXi 上に CentOS などインストールして徐々に整いつつあるのですが、デスクトップの Linux 環境も必要です。これがないと、ext3 ファイルシステムを載せた SD メモリカードとか作るのが厄介なので。当初は VMware Workstation 上の Ubuntu でやろうと思っていたのですが、なぜか USB ペリフェラルが認識されず。しようがないので、Live CD の Linux を使おうかと画策中です。詳細は、また今度。

H 部長と Su さんに温かく見守って頂いているので、なんとしてでも BeagleBoard に USB カメラを繋ぐところまでは自力で頑張ってみようと思います。(← あー、宣言しちゃった。。。)

2009年9月7日月曜日

NFS に泣く

というわけで、しようがないので開発環境の構築です。crosstool というのを見つけてきて、こいつを使うことにしました。多少パワーツールの感じもありますが、普通にシェルスクリプトとかで書かれているので、精神衛生上は良いです。

しかーし。VMware ESXi 上に構築した Linux (Centos 5.3) を使っているのですが、NFS (Network File System) の性能が出ません(NFS サーバーは FreeNAS)。信じられないくらい遅いのです。しかし、NFS オプションをゴニョゴニョとチューニングしたら、ようやく 100Mbps 以上出るようになりました。これでようやく、まともな Linux 開発環境が整った気分です。

気分転換に、カメラのことを調べてみる

日曜日は停滞日でした。どっちかというと、平日のほうがモチベーションが高いです。休日はのんびりしたい、今日この頃です。

土曜日に Ubuntu を入れて、これで ext3 パーティションの入った SD メモリカードを作れるはずだったのですが、日曜日はだらけました。今朝になって、さっそく Ångström ディストリビューションのデモファイルシステムをダウンロードしようと思ったのですが、なんと Ångström のウェブサイトが落ちています、がーん。しようがないので、ARM 対応の QEMU でもビルドするか、と思ったのですが、NetBSD の pkgsrc で qt とかインストールしそうになり、まーしようがないかと思っていたら、途中の依存関係で、私の無停止サーバーが依存しているライブラリと重なり、厄介になったので QEMU インストールは一時停止しました。(← 日本語になっていない。

もう、あれですね。止められないサービスを動かす OS は、完全に別サーバーに分けたほうが良いのかも。でも、ESXi のメモリが不足気味だから止めておくか…。

閑話休題。しようがないので、今日は(通称) webcam のことを調べてました。アマチュア天文の世界では、Philips の SPC 900NC を初めとする ToUcam が有名ですが、最近は入手が困難になっているのでしょうか。他にいろいろ調べていたら、QHY CCDというかなり本格的なものを見つけました。各所で売られていますが、たとえば英国のModern Astronomy 社とかで売られています。Linux で使えれば、ちょっと検討するか。って、結構ハイスペックなカメラな気もします。惑星の写真撮るわけじゃないしな。H 部長に相談してみるか…。

2009年9月5日土曜日

Ubuntuのインストール

今日は、クロス環境のインストールにいそしもうと思っていたのですが、ふと、考えました。binutils や gcc では、どんなターゲットのツールを作ったら良いのでしょうか。

とりあえず、Ångström ディストリビューションを立ち上げるのが先決だと思いつき、デスクトップ環境に、VMware Workstation 6.5.3 の力を借りて Ubuntu 9.04 をインストールしてみました。

今日はそこで力尽き、妻と近所の焼鳥屋になだれ込みました。

2009年9月4日金曜日

OpenEmbedded

BeagleBoard のデモは、Ångström とかいうディストリビューションでできていて、なんでも OpenEmbedded とかいうツールでビルドするのだそうです。大抵こういう重々しい雰囲気のときは、若気の至り的な匂いがプンプンします。いわゆる、特定用途向けパワーツールを、極めて一般的にしてみました、みたいな。

OpenEmbedded というのも、目的が曖昧な割には徹底的に作ってしまったようなツールみたいで、ドキュメントも不足気味で、とりあえず動かしてみたのですが、一体裏で何をしているのか良く分かりません。個人的には、こういうパワーツールは苦手です。作った人には明確であっても、他人にはどうやって応用するのか、全然分かりません。

とりあえず、いきなりパワーツールで楽をしようとした私が悪いわけで、まずは素直に binutils、gcc のクロス環境から構築することにしました。ソースは FSF からダウンロードして、README と configure を見ながら、いろいろ苦吟しています。ああ、よく考えたら configure とか automake も、実はよく分かっていなかったんだっけ。プログラマ 35歳限界説って、そういうこと!? (← 違います

CentOS のパッケージ管理

RedHat 系 Linux から離れて、早 7年の私です。久しぶりに RedHat 系 Linux を使ったら、分からないことばかりで驚きました。

昔は、rpm コマンドを直接叩いていたと記憶しているのですが、最近は yum とかいうツールが流行のようです。説明はここが参考になりました。

さらに、公式(?)でないパッケージがあって、dag とかいうんだそうです。年寄には全然分からん。ここを参考にしました。 寄る年波には勝てません。

CentOS のインストール

VMware ESXi に、CentOS 5.3 をインストールしてみました。開発環境として使うためです。

最初インストールしていたら、インストーラがエラーを起こして失敗しました。このときは、テキストインストーラを使い、メモリは 256MB で、ディスクのパーティション設定を目視するようにしていました。再度、今度はグラフィカルインストーラで、メモリを 384MB、ディスクのパーティション設定をおまかせにしたら、無事にインストールできました。一度にいろいろ変えたので、何が原因か分かりません。ま、動けば正解ということで。

VMware Workstation 4.5.3 は、やはり時代遅れか?

昨日、VMware Workstation 4.5.3 上に最新の Debian を入れようとして、VMware をクラッシュさせたのですが、今日も懲りずに、今度は CentOS で試してみました。

しかーし。やっぱりダメでした。カーネルはブートしてくるのですが、なんとインストール途中(テキストベースのインストーラですが)でクラッシュします。やっぱり、新しい葡萄酒は新しい皮袋に、つーことですかね。

最新の VMware の導入を検討したいと思います。考えてみれば、VMware は 2.0 を購入して、4.5 を購入して、今回購入すると 3つめのライセンスになります。結構なヘビーユーザーだと思うのですが、しぶチンなので、アップグレードの恩恵を受けた記憶があまりありません。6.5 は、無事に 7 にアップグレードできると良いなあ。

ちなみにフリーライセンスが 30日間有効なのですが、為替レートの推移を見ながら発注をかけようと思います。って、US$1 が 1円動いても、180円くらいしか変わらないんですけどね。(^^)

2009年9月3日木曜日

Debian 恐怖症

そうそう、Debian/GNU Linux です。むかーし(10年以上も前) Debian をインストールしたことがあったのですが、当時、Debian のインストーラが冗長で大嫌いになり、それからというもの Debian 恐怖症でした。

Ångström ディストリビューションを調べていたら OpenEmbedded というのがでてきて、さらにそいつを調べていたら、Debian のことが先頭に書かれていました。ははーん、Ångström の推奨デスクトップ(ディストリビューション)は Debian なのか、と思い、恐怖症を払拭すべく Debian をインストールしてみました。そもそも私は Ubuntu は嫌いでなく、こいつは Debian ベースなのでした。

Debian のインストールは、昔と違って比較的簡単にできました。唯一ハマったのは、VMware Workstation 4.5 ではインストールできなかったことです。でも、まあ、4.5 は古すぎるからしようがないよね、ということで、ESXi 4.0 にインストールしました。さすがに ESXi 4.0 は最新環境ということで、今度は無事にインストールできました。

次はパッケージ関連です。aptitude とかいうパワーツールがあって、こいつでパッケージ管理するのがお勧めらしいです。が、最初はうまく行っていたものの、git-core をインストールしようとしてハマりました。なんだか、パッケージが broken だとか言って、全然インストールできないのです。なんだよ、それ。そんな基本的なパッケージがインストールできないようなディストリビューションは、即、捨てです。かなり素朴な NetBSD の pkg システムですら、何かトラブると根本原因を追跡するのは厄介なのに、ここまでガチガチに構成されたパワーツールが期待通りに動かないと、ビギナーが原因追及するのは困難です。分解できない道具は壊れてはいけない、というのが鉄則です。

Debian はインストールしたばかりだし、特に未練はないので、別のディストリビューションを探すことにしました。昔は Slackware が好きだったのですが、さすがにこの御時勢では顰蹙を買いそうなので(というか、誰にも相手にして貰えないかもなので)、いまのところ CentOS を候補にしています。以前、知人の J さんが勧めてくれたというのも、その理由です。

とりあえず、CentOS を ESXi 上にインストールすれば開発環境はできますが、SD メモリカードのアクセスやシリアルコンソールのように、ダイレクトに BeagleBoard をホスト Linux に繋ぎたくなるシチュエーションでは ESXi では困ります。しかし、手持ちの VMware Workstaion 4.5 では厳しい状況なので、VMware Workstation 6.5 の導入を考えています。US$189 は安くはないですが、非常に優れたソフトなので検討してみます。(円高ですしね。) まずは評価版をダウンロードしました。明日以降、こいつの上に(ESXi とは別に)デスクトップの Linux 環境を載せてみようと思います。

今日も、「自分としては」全速力で走ってしまったので、とても疲れました。おまけに、Linux のことはほとんど忘れてしまっている自分が悲しくなりました。(7年前は Linux のドライバ書いていたのです。)

今日は、ここまで。

Linux はブートできたが…

ドキュメントをいくつか読み、X-Loader、U-Boot 等の役割はだいたい分かりました。Linux カーネルを NAND Flash に焼くこともできました。しかし、root ファイルシステムを NAND Flash 上に置くことができずに、身動きが取れなくなりました。今日はここで終わりにすることにします。

ところで、現状いまひとつ良く分かっていないのは、以下の点です。

  • .scr ファイルの働き (誰が、なんて名前の .scr ファイルをいつ読み込んで、そして作用するのか)
これは明日、調べてみることにします。

きょう分かったのは、結局のところ、BeagleBoard の標準デモバイナリをダウンロードしても rootfs しか入っていないので、大したことはできん、ということです。一つの方法としては、Ångström の大型デモをインストールするというものがありますが、ウィンドウマネージャまで入っているそうです。うーん、いわゆるデスクトップシステムは要らんのだけどなあ。でも、スクラッチからディストリビューションもどきを作るよりも、でかいシステムから不要なものを削るアプローチのほうが楽かも知れない。これは、また今度考えてみよう。

当面必要と思われるのは、以下の通り。

  • mtd-utils (これがないと、Linux 上から NAND Flash の操作ができない)
  • JFFS2 関連のユーティリティ (なんと、Debian には入ってなかった。当たり前か。。。これは後述)
  • Wi-Fi 関連のユーティリティ (iwconfig とか)
  • Linux ホストを用意して、クロス開発環境のインストール
ここまでできれば、LAN に接続できて、おそらく NFS マウントもできて、作業がはかどるようになるでしょう、きっと。

PLANEX GW-US54GXS (USB Wi-Fi) の消費電流

今回購入した PLANEX GW-US54GXS の消費電流を、USB の自己申告値で調べてみました。結果は、500mA。うーん、下手すると BeagleBoard 本体よりも消費電力が高そうです。必要なときだけ Wi-Fi を有効にするような使い方が必要かも知れません。(トータルで 1A も食うと、単三 Ni-MH で 2時間くらいしか持たない…。あ、USB カメラの消費電力を忘れてた。)

2009年9月2日水曜日

UC-SGT が繋がった話

Elecom の USB シリアルコンバータ UC-SGT (rev. B) ですが、昨日、自宅の PC で認識せず困っていました。認識しないというか、ドライバをうまくインストールできないのです。Elecom のサイトで最新版のドライバ(ただし、rev. C 以前用)をダウンロードしてきたのですが、ダメでした。

今日、問題切り分けのために UC-SGT を職場に持っていって PC に繋いだところ、なんとドライバのインストール画面(そのもの)が出てきません。首をかしげながら Tera Term を起動したところ、ちゃんと認識して COM ポートを使えるようになりました。おかしいなあ、ドライバをインストールした記憶はないんだが、と思ったら、実は、以前 GPS ロガーをインストールしたときのシリアルドライバが入っていて、それがそのまま使えてしまったのでした。これはラッキーです。たまたま、Prolific 社のドライバが共通だったので使えたみたいです。

そこで家に帰ってから、自宅の PC にも Prolific 社用のドライバを入れてみました。具体的には、GPSDGPS 社からダウンロードできる、RoyalTek 社 RGM-3800 のドライバをインストールします。ユーティリティは不要で、あくまでも USB ドライバだけです。これで、無事に UC-SGT を使えるようになりました。

Windows の USB のほうが疲れる

今日は、Windows には「とことん」疲労し、BeagleBoard の Linux にはとことん感心した一日になりました。

ThinkPad T42 に Windows XP SP3 を入れてからというもの、なんだかいろいろ調子が悪いです。昨日書いたように、第一には認識しない USB デバイスが増えたような気がすることです。でも、昨日の USB シリアルコンバータについては無事に解決策が見つかったので、あとで書きます。

その他の問題は、Windows 2000 で動かしている Faros (ビーコンモニタ)で、USB の帯域不足だといって Creative Sound Blaster Digital Music SX の接続がたびたび落ちてしまうことです。専用の USB インターフェイスをかましているのに、たかだか 48kHz サンプリング 16ビット量子化(ステレオ)の入力で落ちてしまうというのは許せません。同社のウェブサイトにはろくな技術情報がなく、インストーラも過剰で使いにくいものです。もう、絶対 Creative 製品は買いません、決めました。

もう一つは最近、Windows XP SP3 で、USB ハブ周りの問題が多いことです。ハブの活線挿抜ができなくなったり、ハブの接続でだんまりになったり、もうひどいです。今日、Linux の USB 周りが実に安定して見えたので、余計対照的に思えました。以前は、Windows XP でもそんなことなかったような気がするんだけどなー。SP3 のせいかな? (← 決め付け)

さて。寂しい話ばかりになってしまったので、BeagleBoard で無事に USB Ethernet と USB Wi-Fi を認識した話です。まだネットの接続はできていないのですが、とりあえず認識はしました。

まず Linux のインストールです。私の BeagleBoard はリビジョン B6 なのですが、最新のリビジョン C2 の説明に従ってインストールして、問題なく動作しました。というか、リビジョン B6 時代の必要ファイルは、ネットでうまく見つからないのです。リビジョン C のファイルで動くか不安だったのですが、特に大きな問題はありませんでした。ブート中に Linux カーネルからいろいろ warning が出ますが、これは追々調べていきます。

続いて、USB にいろいろペリフェラルを繋ぎながら実験です。使ったのは以下のペリフェラルです。

  • バッファロー LUA-U2-KTX (USB Ethernet, 手持ち)
  • PLANEX GW-US54GXS (USB Wi-Fi, 新規購入)

まず最初に、USB Ethernet を繋いだときの dmesg と ifconfig です。

usb 2-1: reset high speed USB device using musb_hdrc and address 2
usb 2-1.3: new high speed USB device using musb_hdrc and address 3
usb 2-1.3: device v0411 p003d is not supported
usb 2-1.3: configuration #1 chosen from 1 choice
eth0: register 'asix' at usb-musb_hdrc-1.3, ASIX AX8817x USB 2.0 Ethernet, 00:07:40:xx:xx:xx

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:07:40:xx:xx:xx
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
次に、USB Wi-Fi です。
usb 2-1.1: new high speed USB device using musb_hdrc and address 4
usb 2-1.1: device v2019 p5303 is not supported
usb 2-1.1: configuration #1 chosen from 1 choice
usb 2-1.1: reset high speed USB device using musb_hdrc and address 4
zd1211rw 2-1.1:1.0: phy0

# ifconfig -a (抜粋)
wlan0     Link encap:Ethernet  HWaddr 00:22:CF:xx:xx:xx
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wmaster0  Link encap:UNSPEC  HWaddr xx-xx-xx-xx-xx-xx-00-00-00-00-00-00-00-00-00-00  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
Linux の Wi-Fi の扱いはよく分かっていないのですが、ifconfig up しようとしたら、firmware がないというエラーが出ました。
# ifconfig wlan0 up
usb 2-1.1: firmware: requesting zd1211/zd1211b_ub
usb 2-1.1: Could not load firmware file zd1211/zd1211b_ub. Error number -2
zd1211rw 2-1.1:1.0: couldn't load firmware. Error number -2
ifconfig: SIOCSIFFLAGS: No such file or directory
この辺は、いずれ調査しようと思います。とりあえず、デバイス自身は認識されて良かったです。

あ、最後にカーネルの情報(抜粋)など。

# dmesg
Linux version 2.6.28-omap1 (root@tiioss) (gcc version 4.2.1 (CodeSourcery Sourcery G++ Lite 2007q3-51)) #2 Thu Feb 19 12:45:34 IST 2009
CPU: ARMv7 Processor [411fc082] revision 2 (ARMv7), cr=10c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP3 Beagle Board

S ビデオの出力を確認

CIMG6685 朝、とりあえず S ビデオ出力の確認をしました。無事にカラーパターンが出ました。

とりあえず、シリアルコンソールが繋がった

仕事の帰りにビックカメラに立ち寄り、いくつかアイテムの調達です。まずは、USB-miniAB を変換するコネクタが欲しかったのですが、当初もくろんでいた Elecom の USB-MAEA03 が見つからず、断念しました。アーベルの同等品も考えたのですが、こちらは明確に USB-OTG (On-The-Go) をうたっておらず、互換性に不安が残ったのです。OTG では 5ピンぶんを使うようなのですが(ケーブル上に 5線通っているかどうかは知らない)、パッケージには 4ピンと書かれているし。そんなわけで、Amazon で USB-MAEA03 を発注することにしました。

続いて、RS-232C を引き出すヘッダケーブルを購入しました。自作しても良かったのですが、1,000円程度で既製品があったので、買ってしまいました。ainex とかいう会社の RS-300 という製品です。PC 互換機用のパーツのようですが、求めている結線と適合しそうなので、これにしました。あと、画像出力確認用に、S ビデオケーブルも買いました。

さて、家に帰って PC をシリアルケーブル(RS-232C)で繋ごうとしたのですが、ハマりました。一つは、以前インストールした記憶のある RS-232C コンバータ Elecom UC-SGT (rev. B) を Windows XP が認識しなくなってしまったことです。XP SP3 が原因のような気もしますが、確証はありません。しようがないので、Windows 2000 の PC を引っ張りだしてきて、本体内蔵の RS-232C を使うことにしました。

しかしまだ、コンソールが繋がりません。当初、ビックカメラで買ってきたヘッダケーブルの結線がマズいのかと思ったのですが、試しにヘッダコネクタ上でループバックしても、PC からループバックデータが見えません。結論から言うと、私が使っていた RS-232C ケーブルは、クロスケーブル(null modem)ではなかったのでした。失敗! 物置をゴソゴソしたところ別のケーブルがでてきて、こちらを使ったところ、無事に BeagleBoard のコンソールに接続できるようになりました。めでたし、めでたし。

今日はこの辺で、おしまいにします。(新しく別の USB-シリアルコンバータを買おうと思ったが、安いものでもないですし、ちゃんと動かなかったりすると嫌なので、とりあえず Windows 2000 PC を使おうと思っています。Linux が立ち上がって Ethernet が繋がれば、ほとんど不要になりますしね。)

Leopard Board って、なにさ

BeagleBoard のウェブサイト(ここ)を読んでいたら、Beagle buddy web camera という注釈で Leopard Board というものが紹介されてました。最初、BeagleBoard のドーターカードかと思ったのですが、そうではなく、独立したプロジェクトおよび製品のようでした。なんと、TI の DM355 を使って webcam を作ってしまうプロジェクトのようです。むむむ、私の目的にはこちらが近いかも! 何せ、オプションで 5メガピクセルのカメラを専用インターフェイスで繋ぐことができ、C-MOS センサから RGB の生データを拾えるそうなのです。おまけに、Ethernet も標準で付いています

しかし以下の事情で、いまのところ BeagleBoard で行こうと思っています。

  • DM355 には、DSP が載っていない!
  • BeagleBoard の OMAP3530 のほうが、性能が高いはず。(でも消費電力は同じくらい)
  • 最終的には、Ethernet でなく、Wi-Fi AP として動くようにしたい。
  • BeagleBoard のほうが、コミュニティが広そう。
最終的には、DM355 の性能で行ければ、そちらを選択肢にする可能性もありますが。。。

2009年9月1日火曜日

省電力なターミナルを繋ぎたい

BeagleBoard を戸外で、低消費電力(電池 4本とか)で使う場合に、BeagleBoard と「会話」するための方法を考えています。一番簡単なのは、シリアルケーブルを使ったり、Ethernet アダプタをかます方法ですが、いずれも別途 PC が必要になるのが難点です。PC なしで「会話」する方法はないもんでしょうか?

入力は、必要があればフルキーボードを接続することも可能なので、まずは出力から考えます。一つの方法は、S 端子にポータブルテレビモニタを繋ぐことが考えられますが、あまり低消費電力とは思えません。もう一つは USB 経由で Bluetooth を繋ぎ、SPP (Serial Port Profile) で会話する方法ですが、パソコンを使わないとなると iPhone くらいしか(私には)思いつかず、しかし iPhone OS は SPP をサポートしていないので、これもダメです。

いまのところ唯一の選択肢は、USB 経由で Wi-Fi を繋ぐことでしょうか。Linux 上なら、Wi-Fi をアクセスポイントにするドライバがあるかも知れません。USB に繋がるので、おそらく 500mA の消費電流で対応可能と思われ、これならば電池でも 1~2時間くらいはいけるかも知れません。でも、ちょっとあまり面白くないです。もっとうまい方法はないかな。

補足

Linux で使えて、かつアクセスポイントになりそうな USB Wi-Fi アダプタ見つけました。もちろん、現在も販売されている製品です。(もう少し情報収集が必要ですが。)

2009年8月31日月曜日

BeagleBoardとはなんぞや?

DSC_0095 ツテから入手した BeagleBoard ですが、それって一体なに? 美味しいの? ということで、簡単な紹介です。

私もまだ触ったばかりなのですが、BeagleBoard とは Texas Instruments 社の OMAP3530 というプロセッサを搭載した評価ボードです。アマチュアでも比較的入手しやすい価格でありながら、600MHz で動く ARM Cortex-A8 と、430MHz で動く C64x+ DSP コアを搭載しています。そんでもって Linux が動きます。

DVI-D と S 端子出力が付いているので、画像出力が得意のようです。画像の取り込みとしては、USB 2.0 のインターフェイスが使えそうです。(OMAP3530 自体は、専用のビデオ入力インターフェイスを持っているようだ。)

唯一残念な点は、標準では Ethernet が付いていないことですが、USB 経由で Ethernet アダプタを接続することは可能なようです。

今日、入手したのは B6 というリビジョンでした。USB 周りに制約がありそうななさそうな感じですが、とりあえず遊んでみようと思います。ま、そんなとこで。 なお、公式サイトはここです。

BeagleBoardをゲットした

諸般の事情で、BeagleBoard 専用のブログを起こしました。

お時間のある方は、お付き合いください。

フォロワー

ブログ アーカイブ