2011/11/28

Ice Cream Sandwich を BeagleBoard-xM 用にビルドしてみた (4) - SDカードへ書き込み

Ice Cream Sandwich を BeagleBoard-xM 用にビルドしてみた (3) - ビルド と同様、rowboat を参考に SDカードの作成を行います。


まず、最初は Androidの実行ディレクトリを tar で固めます。
root 以下と system 以下を直接コピーすると、うまくいかないみたいなので、スクリプトに頼ってしまいましょう。
$ cd ~/mydroid/out/target/product/beagleboard
$ mkdir android_rootfs
$ cp -r root/* android_rootfs
$ cp -r system android_rootfs
$ sudo ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs . rootfs rootfs.tar.bz2


次はブートスクリプトを作成します。
u-boot が参照するスクリプトで、これがないとfastbootモードに入ってしまい起動しません。
$ cd ~/RowboatTools/mk-bootscr
$ export PATH=$PWD:$PATH
$ ./mkbootscr

一度、このスクリプトを実行すると、boot.cmd というファイルが出来上がります。
中身は以下のような感じ

boot.cmd
if fatload mmc 0 82000000 uImage
then
 echo ***** Kernel: /dev/mmcblk0p1/uImage *****
fi
echo ***** RootFS: /dev/mmcblk0p2 *****
setenv bootargs 'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y vram=8M omapfb.vram=0:8M omapdss.def_disp=dvi omapfb.mode=dvi:1024x768-16'







bootm 0x82000000

もし、ブートスクリプトを変更したい場合は、このファイルを変更し、以下のコマンドを実行することで、ブートスクリプト boot.scr を作成しなおすことができます。
$ ./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n 'Execute uImage.bin' -d boot.cmd boot.scr

次のステップに進む前にSDカードリーダのデバイスを確認しておきます。
確認する方法はいろいろありますが、ずっとコマンドラインで作業して飽きてきたので、たまには GUI を使おうかと思います。
Dash home → Disk Utility

Disk Utilityの画面で、Device の欄を確認します。
以下の場合は /dev/sdb です。
似たようなデバイスが複数ある場合は、SDカードを挿抜したりすれば確認できます。

SDカードをリーダに挿入して、以下のコマンドを実行します。ただ、私が落としてきたバージョンには、バグがありました。このエントリの最後にその修正について書いてあるので、もしバグが健在の場合は修正してから実行します。

また、“/dev/sdb”のところは先ほど確認したデバイスに変更します。そのデバイスはフォーマットされてしまうので気を付けてください
$ cd ~/mydroid
$ sudo ~/RowboatTools/mk-mmc/mkmmc-android.sh /dev/sdb \
  x-loader/MLO \
  u-boot/u-boot.bin \
  kernel/arch/arm/boot/uImage \
  ~/RowboatTools/mk-bootscr/boot.scr \
  out/target/product/beagleboard/rootfs.tar.bz2

SDカードがアンマウントされているのを確認したら、BeagleBoard-xM に差し込み立ち上げます。
さー、これで立ち上がるぞ。と思ったんですが、Uncompressing Linux... done, booting the kernel. と表示されたあと、ウンともスンとも言いません。何かうまくいかないです。

2011/11/30 追記 とりあえず、uImage をrowboatの提供してくれている、prebuiltバージョンで差し替えたら、起動まではしました。
色がおかしいし、マウスは動きませんが…
現時点では、カーネルのビルドに失敗していたであろうことが予想されます。
これから、原因を調査しますが、いつまでかかることやら…



mkmmc-android.sh のバグについて
私が落としてきたRowboatTools/mk-mmc/mkmmc-android.sh は改行コードが CR/LF でした。
そのため、以下のようなエラーが出て止まってしまいました。
bash: ./RowboatTools/mk-mmc/mkmmc-android.sh: /bin/bash^M: bad interpreter: No such file or directory
そんなわけで、以下のようにして、改行コードを変換してやる必要がありました。
$ cd ~/RowboatTools/mk-mmc/
$ mv mkmmc-android.sh mkmmc-android.sh.bak
$ nkf -Lw mkmmc-android.sh.bak > mkmmc-android.sh

また、パーミッションの設定にもバグがあるようで、起動に失敗しました。
これを回避するためには、L101行目に -R オプションを付けてやる必要があります。
chmod -R 755 /mnt

ちょっと、取ってくるタイミングが悪かったようです。。。

0 件のコメント: