into the void

ソフトウェアに関する雑多な調査日記

Androidを載せたbeagleboard-xmをWiFi APにするまで(其の壱)

beagleboard-xmをWiFi APにするまでの試行錯誤を記録していこうと思う。
最終目標はbeagleboard-xmにandroid(froyo)をインストールした状態で、WiFi APとして動作させること。
目的は、androidの低レイヤの勉強と、自宅二階のWiFi環境の改善。

まずはPC Linux(Ubuntu)で

いきなり組み込みボード+Androidっていうのは敷居が高いと思ったので、まずはUbuntuをインストールしたPCをAPにしてみることから始める。

GW-US54GXS

WiFi APにするために選んだハードウェアはPlanexのGW-US54GXS。いろいろなサイトで自作APを作るために使われている例が載っていたので。
ポイントは使われているチップがzd1211というやつでLinux用のドライバがあること。で、チップもドライバもAPモードに対応していること。(Infrastractureモードしか対応していないものが多いので)
もう販売終了していたため、ヤフオクで購入。

Ubuntu 10.04 LTSでmake

android2.2(froyo)のLinux Kernelは2.6.32。PC上で検証するなら近いKernelバージョンがいいなと思ってUbuntuのリリースノートみていたら10.04 LTS(Lucid Lynx)がちょうど同じ2.6.32。10.04を使うことに決めた。
早速サイト上に掲載されているzd1211をAP化する記事を読んでドライバのビルドを開始。
いろんなサイトがあってそれぞれ少しずつやり方が違うんだけど、最終的に参考にしたのは下記のサイト。
http://nitrogen14.blog51.fc2.com/blog-entry-118.html
ほかの記事はやり方はKernelのバージョンが新しい(といっても10.04は2.6.32だけど)うまくいかない。
古い新しいの境界はこの場合、2.6.23と2.6.24の間のようです。(実際、カーネルソースをみてみるとsk_buff構造体とかの中身が大きく変わっていてびっくりする)
記事に従ってまずはドライバソース(LinuxUSB_AR2524-3.0.0.56.tgz)のダウンロード。記事にあるサイトはアクセスできなくなっているので下記のミラーサイトからダウンロードした。
http://www.filewatcher.com/m/LinuxUSB_AR2524-3.0.0.56.tgz.5578938.0.0.html
で、つぎにパッチのダウンロード。これは記事にある通り下記のサイトからダウンロード。
http://htl10.users.sourceforge.net/patchsets/LinuxUSB_AR2524-3.0.0.56/
ダウンロードができたらまずはLinuxUSB_AR2524-3.0.0.56.tgzを解凍。同じフォルダにパッチファイルもおく。この辺は記事通りです。

# mkdir a
# cd a
# tar zxvf ../LinuxUSB_AR2524-3.0.0.56.tgz

解凍できたらar2524drv/Makefileを編集して環境変数KERNEL_SOURCEの値をubuntu 10.04 LTSの環境にあわせてかえる。

KERNEL_SOURCE=/usr/src/linux-source-2.6.32

この後パッチをあてるわけだが、私の環境の場合全部あてちゃうとmakeに失敗した。
仕方がないので、0001から00014まで順番にあててはmakeしてを繰り返したところ0012まであてたところでmakeが通ったのでとりあえずこれで動かしてみた。
makeしてできたzd1211b.koをインストールして、GW-US54GXSをさしてみる。

# sudo cp ar2524drv/zd1211b.ko /lib/modules/2.6.32-33-generic/kernel/net/wireless/
# sudo depmod -a
# sudo modprobe -v z1211b

最初は、zd1211b.koのインストールまではうまくいってdmesgにちゃんと下記のようなログが出るところまで確認できたが、GW-US54GXSをさすとエラーがでて認識されなかった。

[  779.812131] 
[  779.812134]  _____     ____    _    ____
[  779.812135] |__  /   _|  _ \  / \  / ___|
[  779.812136]   / / | | | | | |/ _ \ \___ \
[  779.812137]  / /| |_| | |_| / ___ \ ___) |
[  779.812138] /____\__, |____/_/   \_\____/
[  779.812139]      |___/
[  779.812140] ZD1211B - version 3.0.0.56
[  779.812211] usbcore: registered new interface driver zd1211b

まただめか。。。(その前にほかのサイトを参考にいろいろな方法で試していたので。。。)と思ったが、Ubuntuを再起動してから同じ手順を試したら今度はうまく認識されて、GW-US54GXSはLEDが点滅状態になり、dmesgにエラーはなく、ifconfigではath0という新しいネットワークデバイスが確認できた。

zd1211ドライバまとめ

今回は上記で書いたようにLinuxUSB_AR2524-3.0.0.56.tgzを使ったけれどもzd1211にはほかにもいくつかドライバがあるので、備忘録としてまとめておく。大きく分けてzd1211とzd1211rwがあると思う。

zd1211rw

Linux Kernelのソースツリーに組み込まれているもの。rwはrewriteの意味だと思う。下記に詳しく書いてある。
http://linuxwireless.org/en/users/Drivers/zd1211rw
Change Logをみると2.6.39に入っているものからMater modeに対応しているらしい。APとして使えるということ。新しいKernelを使う人は素直にこっちを使った方がいいんだろうと思う。
あと、User Spaceからダウンロードするdevice firmwareが別途必要らしい。ここにある。
http://sourceforge.net/projects/zd1211/files/

zd1211(Vendor Driver)

Vendorが提供しているドライバらしい。Vendorというのはzydas。だけどathrosに買収されたらしいのでatherosという見方もある。説明してくれているサイトによってソースの取得先がいくつかあって正直よくわからない。試した中では少なくとも下記の3種類があった。

LinuxUSB_AR2524
今回使ったやつ。名前がAtheorsのチップ型番(AR2524)になっているから最近のドライバなんだと思われる。下記から本体とパッチをダウンロードできる。
http://www.filewatcher.com/m/LinuxUSB_AR2524-3.0.0.56.tgz.5578938.0.0.html
http://htl10.users.sourceforge.net/patchsets/LinuxUSB_AR2524-3.0.0.56/
ZD1211LnxDrv
以前Vendor Driverといえばこれだったんではないかと思う。下記から本体とパッチをダウンロードできる。
http://www.reactivated.net/software/zd1211-vendor/
http://htl10.users.sourceforge.net/patchsets/ZD1211LnxDrv_2_22_0_0/
これも試してみたんだけどUbuntu 10.04ではmakeできるところまでいかなかった。。。08.04でも試してみたんだけど、makeまでは成功、いざ動かすとfailed reg_urbのエラーがでて駄目だった。。。
ZD1211 USB WLAN Linux Driver
svnからソースをダウンロードできるもの。ZD1211LnxDrvと同じなのかなと思ったり。
http://sourceforge.net/projects/zd1211/develop
これはパッチの在処がわからなかったので、makeまで到達できず。