Androidを載せたbeagleboard-xmをWiFi APにするまで(其の参)
前回まででPC Linux(Ubuntu 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がつかえないとかなり不自由だが操作できないことはないのでとりあえずよしとした。