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 で実際にブートできるカーネルをビルドしてみようと思います。道のりは長いですが、頑張ります。

フォロワー