into the void

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

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

前回まででPC LinuxUbuntu 10.04 Linux Kernel 2.6.32)上でのWiFi APの動作確認までできた。
今回は最終目的であるandroid on beagleboard-xmでのWiFi AP動作に向けて、beagleboard-xmでandroid 2.2 (froyo)を動作させるところまでやってみる。

まずはprebuildイメージで

自分でビルドしたkernelとrootfsを使う前に、prebuildされたものでfroyoを動かしてみた。
手順は基本的に下記の書籍の説明に従ったが、SDカードのフォーマットなど独自で行ったものもある。
http://www.c-r.com/mo_enb_android.htm

prebuildファイルをダウンロード

TIのサイトからbeagleboard-xm用のfroyoのprebuildファイルをダウンロードしてくる。
froyo用のDeveloper Kitは2.0と2.2が公開されている。2.2の方が新しいが書籍が2.0ベースで書かれているのと、以前に2.0の方のソースコードをgitで取得済みでもあったので、2.0を使うことにした。gitでのソースダウンロードはものすごく時間がかかるので。。。(半日とか)

TI android sdkのトップページ
http://www.ti.com/tool/androidsdk-sitara
froyo DevKit 2.0
http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/02_00_00/index_FDS.html

上記2番目のページの「Pre-built Images」「beagle board-xm」をクリックしてbeagleboard-xm.tar.gzをダウンロードし、解凍する。
解凍するとBoot_Images、Filesystem、Media_ClipsというフォルダとREADME.txt、mkmmc-android.shというファイルが生成される。mkmmc-android.shを使ってSDカードにandroidを起動させるために必要なファイルをインストールすることができる。のだが、私の環境ではなかなかうまくいかなかったので、手動でSDカードのフォーマットとファイルのコピーを行った。

SDカードのフォーマット

androidシステムをインストールできるようにSDカードをフォーマットした。手順は下記のサイトに従った。
http://blog.pdns.jp/?p=875
使ったSDカードは「Transcend microSDHCカード 8GB Class10」。
まずはSDカードのシリンダ数を計算する。そのためにディスクサイズを確認する。

# sudo fdisk /dev/sdb
ディスク /dev/sdb: 8018 MB, 8018460672 バイト
ヘッド 247, セクタ 62, シリンダ 1022
Units = シリンダ数 of 15314 * 512 = 7840768 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x2b00ada5

ディスクサイズは8018460672。8018460672÷255÷63÷512=974.855648926237。シリンダ数974。
sfdiskを使ってパーティションをきる。その前に先頭ブロックを0クリアしておく。

# sudo dd if=/dev/zero of=/dev/sdb bs=1024 count=1024 &>/dev/null
# sudo sfdisk -D -H 255 -S 63 -C 974 /dev/sdb
/dev/sdb1 :,9,0x0c,*
/dev/sdb1   *      0+      8       9-     72261    c  W95 FAT32 (LBA)
/dev/sdb2 :,400,,-
/dev/sdb2          9     408     400    3213000   83  Linux
/dev/sdb3 :,,0x0c,-
/dev/sdb3        409     973     565    4538362+   c  W95 FAT32 (LBA)
/dev/sdb4 :
/dev/sdb4          0       -       0          0    0  空
# sudo sudo fdisk -l /dev/sdb

ディスク /dev/sdb: 8018 MB, 8018460672 バイト
ヘッド 255, セクタ 63, シリンダ 974
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1   *           1           9       72261    c  W95 FAT32 (LBA)
/dev/sdb2              10         409     3213000   83  Linux
/dev/sdb3             410         974     4538362+   c  W95 FAT32 (LBA)

作ったパーティションをフォーマットする。boot用のファイルを置く最初のパーティションはvfat。rootfs用のファイルを置く2番目のパーティションext3。data用の3番目のパーティションはvfat。

sudo mkfs.vfat -c -v -F 32 -n boot /dev/sdb1 
sudo mkfs.ext3 -c -L rootfs /dev/sdb2 
sudo mkfs.vfat -c -v -F 32 -n data /dev/sdb3 

SDカードを抜いてもう一度さすと、各パーティションが/media/boot、/media/rootfs、/media/dataというディレクトリにマウントされる。

prebuildイメージをSDカードに書き込む

先ほどダウンロードしたprebuildイメージをSDカードに書き込む。
また、DevKit2.0はbeagleboard-xm rev.Cには未対応のため、パッチが必要。上記書籍のサポートページで対応済みのu-boot.binとuImageをダウンロードしておいた。
まずはbootパーティションに必要なファイルを書き込む。MLO、u-boot、boot.scr、uImageはそれぞれ下記のもを使った。

MLO
beagleboard-xm rev.Cに付属するSDカードからコピーしたもの
u-boot
書籍のサポートページからダウンロードしたもの
boot.scr
DevKit 2.0のprebuilt imageに含まれているもの
uImage
書籍のサポートページからダウンロードしたもの

なお、書籍のサポートページからダウンロードできない場合は下記のサイトで説明されている内容の修正をu-bootとkernelに行えばrev.C対応できるものと思われる。後で記述するが少なくともkernelの修正はうまく機能した。
http://groups.google.com/group/android-embedded-japan/browse_thread/thread/97ff059dac5e177c?pli=1
コピーする4個のファイルを適当なフォルダ(imagesなど)にまとめておく。

cd images
cp MLO /media/boot
cp u-boot /media/boot
cp boot.scr /media/boot
cp uImage /media/boot
umount /media/boot

次にrootfs。DevKit 2.0のprebuildイメージに含まれるFilesytem/rootfs_am37x.tar.bz2を/media/rootfsに展開する。dataパーティションは空のままにしておく。

cd Filesystem
sudo tar jxvf rootfs_am37x.tar.bz2 -C /media/rootfs
umount /media/rootfs
umount /media/data

beagleboard-xm起動

beagleboard-xmをシリアルケーブルでPCに接続した状態で起動してみる。PC側ではminicomを起動しておく。minocomの設定は115200bps、データ長8ビット、ストップビット1、パリティ無し フロー制御無し。
電源を入れると下記のようなu-bootのログが出た後、カーネルが起動しする。しばらく待っているとandroidのロゴが画面に出て、さらに待っているとホーム画面が表示される。
下記ログのポイントはBeagle xM Rev Cの表示があること。u-bootがrev.C未対応だとここが、Unknownと表示されて、起動してもUSBキーボードが使えなかったりする。

Texas Instruments X-Loader 1.5.0 (Mar 27 2011 - 17:37:56)                       
Beagle xM                                                                       
Reading boot sector                                                             
Loading u-boot.bin from mmc                                                     
                                                                                
                                                                                
U-Boot 2010.06-rc1 (May 31 2011 - 09:45:26)                                     
                                                                                
OMAP34xx/35xx-GP ES2.1, CPU-OPP2 L3-165MHz                                      
OMAP3 Beagle board + LPDDR/NAND                                                 
I2C:   ready                                                                    
DRAM:  384 MiB                                                                  
NAND:  0 MiB                                                                    
*** Warning - bad CRC or NAND, using default environment                        
                                                                                
In:    serial                                                                   
Out:   serial                                                                   
Err:   serial                                                                   
Beagle xM Rev C                                                                 
Die ID #134a00029ff80000016830c406030022                                        
Hit any key to stop autoboot:  0          

作ったSDカードをbeagleboard-xmにさして起動。無事動作した。ただ、escキーを押してもbackのアクションが起きないという不具合が。backがつかえないとかなり不自由だが操作できないことはないのでとりあえずよしとした。