ブログネタ
Android に参加中!
カスタム ROM で有名な CyanogenMod を BeagleBoard 向けにビルドしてみた。
Emulator 用のビルド手順が公式の wiki で 公開されている。
Compile CyanogenMod for Emulator
Emulator で動いているので、
簡単に BeagleBoard 等のターゲットでも動作すると思って試してみた。

動かしてみた様子
beagleboard-gingerbread-008beagleboard-gingerbread-007beagleboard-gingerbread-009


BeagleBoard での環境作成手順

ソースコード取得
$ mkdir -p /home/android/CyanogenMod
$ cd /home/android/CyanogenMod
$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
$ repo sync -j8
$ cd gingerbread
$ wget http://android-development-environment.googlecode.com/files/CyanogenMod.device.diff
$ wget http://android-development-environment.googlecode.com/files/CyanogenMod.vendor.diff
$ patch -p1 -E < CyanogenMod.device.diff
$ patch -p1 -E < CyanogenMod.vendor.diff
$ export ANDROID=$PWD

kernel のビルド
$ mkdir $ANDROID/kernel
$ cd $ANDROID/kernel
$ wget http://android-development-environment.googlecode.com/files/cm_beagleboard-kernel.tar.bz2
$ tar jxvf cm_beagleboard-kernel.tar.bz2
$ cd $ANDROID/kernel/beagleboard
$ make ARCH=arm CROSS_COMPILE=$ANDROID/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- sola_omap3_beagle_android_defconfig
$ make ARCH=arm CROSS_COMPILE=$ANDROID/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- uImage -j8

Android のビルド
$ cd $ANDROID
$ source build/envsetup.sh
$ lunch cyanogen_beagleboard-eng
$ cd vendor/cyanogen
$ ./get-rommanager
$ cd $ANDROID
$ time make -j8

rootfs の作成
$ cd $ANDROID/out/target/product/beagleboard/
$ mkdir rootfs
$ sudo cp -a ./root/* ./rootfs/
$ sudo cp -a ./system/* ./rootfs/system/

TI's Android SGX SDK を組み込む
$ cd $ANDROID/out/target/product/beagleboard/
$ wget http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/02_02_00/exports/OMAP35x_Android_SGX_SDK.tar.gz
$ tar zxvf OMAP35x_Android_SGX_SDK.tar.gz
$ mkdir SDK_install
$ ./OMAP35x_Android_SGX_SDK/OMAP35x_Android_Graphics_SDK_setuplinux_3_01_00_03.bin
インストール先はどこでも良い。
ここでは、SDK_install を指定する。
インストール完了後、Rules.make ( $ANDROID/out/target/product/beagleboard/SDK_install/Rules.make ) を編集。
※変更するところだけ抜粋
HOME=$(ANDROID)
GRAPHICS_INSTALL_DIR=$(ANDROID)/out/target/product/beagleboard/SDK_install
ANDROID_ROOT=$(ANDROID)/out/target/product/beagleboard/rootfs
CSTOOL_DIR=$(ANDROID)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/
KERNEL_INSTALL_DIR=$(ANDROID)/kernel/beagleboard

ビルドとインストール
$ cd $ANDROID/out/target/product/beagleboard/SDK_install
$ make
$ make install OMAPES=3.x

init.rc の編集
$ emacs $ANDROID/out/target/product/beagleboard/rootfs/init.rc
on boot のところに、
service pvr /system/bin/sgx/rc.pvr start
を追記する。(github の環境は既に追記済み)
GPU を有効にしない場合は、これをコメントアウトする。

rootfs を SD にコピー
$ cd $ANDROID/out/target/product/beagleboard/
$ sudo chmod 777 -R ./rootfs
$ sudo cp -a ./rootfs/* /SDCARD/


注意事項
CyanogenMod の更新頻度は高い。
そのため、パッチ適用に失敗する、ビルドが通らない、起動しないという現象は発生する。