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まで到達できず。