GingerBread 2.3.4のビルドの続きをやってみる [beagleboard]
前回はソースコードのダウンロードまでやったので,その続きをやってみる.
DevKitのダウンロード.ディレクトリはお好みで.
ダウンロードしたら展開.
Tool chainにパスを通しておく.
これも実際は.bash_profileに書いておく.
そしたらいよいよビルド作業開始.
まずx-loader.
これで,x-loader/下にx-load.binが生成される.
そしたらx-load.binからMLOファイルを生成する.
ちなみに,BeagleBoard-xMのブートシーケンスでは,bootromからx-loader(MLO)が起動され,そのあとu-bootが起動してからLinux(android)が起動するというようになっているようだ.
x-load.binからMLOを生成するにはsignGPというツールを使うのだが,こいつはさっきダウンロードしたDevKitに含まれてる.参考サイトの説明によれば,signGPはx-loaderディレクトリにコピーしろとあるので,コピーしてから実行する.最後にファイル名をMLOにしたら完了だ.
そしたら次はu-boot.
これで,u-boot/下にu-boot.binが生成される.
で,kernelのビルド.
そこそこ時間がかかる.
そしたら,Android filesystemのビルド.
そのままビルドしようとするとエラーとワーニングが出るので,ちょっと対策.
まずエラー対策.
以下のファイルを修正する.
~/rowboat-android/frameworks/base/libs/utils/Android.mk
次にワーニング対策.
以下のファイルを修正する.
~/rowboat-android/build/core/combo/HOST_linux-x86.mk
で,ビルド.
最後の「-j2」ってところの数字はビルドするマシンの環境(プロセッサ数)によって変わる.参考サイトによればプロセッサ数の2倍の値にしろとあるので-j2とした(うちのビルドマシンは古いのでシングルプロセッサなのである...).
で,こいつはkernelのビルドよりもずっと時間がかかる.
気長に待ちましょう.
終わったら,root filesystemのtarballを作る.
あとちょっと...
boot scriptを作成.
mkbootscrを編集.setenvのところを以下のように書き換える.
書き換えて保存したら,
これでboot.scrができる.
SDカードの作成.
まず必要なものを1つのディレクトリに集める.
そしたらSDカードに書き込み.
で,完了です.おつかれさまでした.
これで,BeagleBoard-xMにセットして電源ON!してやれば,Androidが起動するはずです.
DevKitのダウンロード.ディレクトリはお好みで.
cd ~/ wget http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/exports/TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz
ダウンロードしたら展開.
tar xzvf TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz
Tool chainにパスを通しておく.
export PATH=~/rowboat-android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
これも実際は.bash_profileに書いておく.
そしたらいよいよビルド作業開始.
まずx-loader.
cd ~/rowboat-android/x-loader/ make CROSS_COMPILE=arm-eabi- distclean make CROSS_COMPILE=arm-eabi- omap3beagle_config make CROSS_COMPILE=arm-eabi-
これで,x-loader/下にx-load.binが生成される.
そしたらx-load.binからMLOファイルを生成する.
ちなみに,BeagleBoard-xMのブートシーケンスでは,bootromからx-loader(MLO)が起動され,そのあとu-bootが起動してからLinux(android)が起動するというようになっているようだ.
x-load.binからMLOを生成するにはsignGPというツールを使うのだが,こいつはさっきダウンロードしたDevKitに含まれてる.参考サイトの説明によれば,signGPはx-loaderディレクトリにコピーしろとあるので,コピーしてから実行する.最後にファイル名をMLOにしたら完了だ.
cd ~/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/signGP/ cp signGP ~/rowboat-android/x-loader/ cd ~/rowboat-android/x-loader/ ./signGP ./x-load.bin mv x-load.bin.ift MLO
そしたら次はu-boot.
cd ~/rowboat-android/u-boot/ make CROSS_COMPILE=arm-eabi- distclean make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_config make ARCH=arm CROSS_COMPILE=arm-eabi-
これで,u-boot/下にu-boot.binが生成される.
で,kernelのビルド.
cd ~/rowboat-android/kernel/ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_android_defconfig make ARCH=arm CROSS_COMPILE=arm-eabi- uImage
そこそこ時間がかかる.
そしたら,Android filesystemのビルド.
そのままビルドしようとするとエラーとワーニングが出るので,ちょっと対策.
まずエラー対策.
以下のファイルを修正する.
~/rowboat-android/frameworks/base/libs/utils/Android.mk
変更前:
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
変更後:(-fpermissiveを追加)
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
次にワーニング対策.
以下のファイルを修正する.
~/rowboat-android/build/core/combo/HOST_linux-x86.mk
変更前:
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
変更後:(ーU_FORTIFY_SOURCEを追加)
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
で,ビルド.
cd ~/rowboat-android/ make TARGET_PRODUCT=beagleboard OMAPES=5.x -j2
最後の「-j2」ってところの数字はビルドするマシンの環境(プロセッサ数)によって変わる.参考サイトによればプロセッサ数の2倍の値にしろとあるので-j2とした(うちのビルドマシンは古いのでシングルプロセッサなのである...).
で,こいつはkernelのビルドよりもずっと時間がかかる.
気長に待ちましょう.
終わったら,root filesystemのtarballを作る.
cd ~/rowboat-android/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
あとちょっと...
boot scriptを作成.
cd ~/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/mk-bootscr
mkbootscrを編集.setenvのところを以下のように書き換える.
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'
書き換えて保存したら,
./mkbootscr
これでboot.scrができる.
SDカードの作成.
まず必要なものを1つのディレクトリに集める.
cd ~/rowboat-android mkdir image_folder cp kernel/arch/arm/boot/uImage image_folder/ cp u-boot/u-boot.bin image_folder/ cp x-loader/MLO image_folder/ cp ~/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/mk-bootscr/boot.scr image_folder/ cp out/target/product/beagleboard/rootfs.tar.bz2 image_folder/ cp ~/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/mk-mmc/mkmmc-android.sh image_folder/
そしたらSDカードに書き込み.
export LANG=C cd image_folder sudo ./mkmmc-android.sh /dev/sdb MLO u-boot.bin uImage boot.scr rootfs.tar.bz2
で,完了です.おつかれさまでした.
これで,BeagleBoard-xMにセットして電源ON!してやれば,Androidが起動するはずです.