4AJ.2.2 OMAP4 Jelly Bean Panda Notes
を実践してみたレポートでございます。
大まかな手順については、以前の4AI.1.4と同じですが、細々と変わってる部分もありますので、また一通り書いておきます。
使うのはUbuntu 12.04(64bit版)と、pandaboard ESです。
環境準備
手順の通りでOK。まずは以下のパッケージをインストールします。
$ sudo apt-get install git-core flex bison gperf libesd0-dev zip gawk ant libwxgtk2.6-dev zlib1g-dev build-essential tofrodos
$ sudo apt-get install lib32readline6-dev libstdc++6 lib32z1 lib32z1-dev ia32-libs g++-multilib libx11-dev lib32ncurses5-dev uboot-mkimage
$ sudo apt-get install lib32readline6-dev libstdc++6 lib32z1 lib32z1-dev ia32-libs g++-multilib libx11-dev lib32ncurses5-dev uboot-mkimage
追加で
$ sudo apt-get install gcc-4.4 gcc-4.4-multilib g++-4.4 g++-4.4-multilib
手順には載ってませんが、ビルドが通らないため以下も追加で
$ sudo apt-get install libxml2-utils xsltproc kpartx
armのツールチェインのインストールについては、下記の手順を例に。
$ wget
http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ sudo mkdir -p /opt/toolchains
$ sudo tar jxvf arm-2010q1-202-* -C /opt/toolchains/
/opt/toolchains/arm-2010q1/にインストールされます。$ sudo mkdir -p /opt/toolchains
$ sudo tar jxvf arm-2010q1-202-* -C /opt/toolchains/
repoツールの入手
$ mkdir ~/bin -p
$ sudo apt-get install curl
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH
$ sudo apt-get install curl
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH
JDK6についてはこちらを参照。
ソースツリーのダウンロード
ここは手順通りでOKです。まずはAndroidのソースツリーのダウンロード。
適当なワーク用ディレクトリ下にて、
$ mkdir -p 4AJ.2.2; cd 4AJ.2.2
$ export YOUR_PATH=`pwd`
$ mkdir -p mydroid; cd mydroid
$ export MYDROID=`pwd`
$ repo init -u git://git.omapzoom.org/platform/omapmanifest.git -b 27.x -m RLS4AJ.2.2_JellyBean.xml
$ repo sync
回線によっては半日近くかかりますので、気長に待ちましょう。$ export YOUR_PATH=`pwd`
$ mkdir -p mydroid; cd mydroid
$ export MYDROID=`pwd`
$ repo init -u git://git.omapzoom.org/platform/omapmanifest.git -b 27.x -m RLS4AJ.2.2_JellyBean.xml
$ repo sync
続いてはKernel。githubに変わっていますね。
$ cd ${YOUR_PATH}
$ git clone git@github.com:icepeda/omap.git kernel/android-3.0
$ cd kernel/android-3.0
$ git fetch origin icepeda-panda-4aj22:master
$ git checkout master
Permission denied (pubickey).$ git clone git@github.com:icepeda/omap.git kernel/android-3.0
$ cd kernel/android-3.0
$ git fetch origin icepeda-panda-4aj22:master
$ git checkout master
と怒られてしまった場合は、こちらを参照。
続いてはU-boot
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/repo/u-boot.git u-boot
$ cd u-boot
$ git checkout 2af35fca236557add6fdd33b836bf5c64455ac8f
$ git clone git://git.omapzoom.org/repo/u-boot.git u-boot
$ cd u-boot
$ git checkout 2af35fca236557add6fdd33b836bf5c64455ac8f
続いてはX-loader
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/repo/x-loader.git x-loader
$ cd x-loader
$ git checkout 4975b24da3887edff5cd24e44ca7cb4013f04239
$ git clone git://git.omapzoom.org/repo/x-loader.git x-loader
$ cd x-loader
$ git checkout 4975b24da3887edff5cd24e44ca7cb4013f04239
パッチあて
こちらも基本手順の通りでOK。まずはX-loaderへのパッチあて。
$ cd ${YOUR_PATH}/x-loader
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6228/xloaderpanda.patch
$ git am xloaderpanda.patch
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6228/xloaderpanda.patch
$ git am xloaderpanda.patch
続いてはU-bootへのパッチあて
$ cd ${YOUR_PATH}/u-boot
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6229/ubootpanda.patch
$ git am ubootpanda.patch
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6229/ubootpanda.patch
$ git am ubootpanda.patch
Kernelへのパッチあては必要なし
最後はAndroidへのパッチあて。
$ cd ${MYDROID}/device/ti/panda
$ git fetch git@github.com:icepeda/panda.git icepeda-panda-4aj22:master
$ git checkout master
$ cd ${MYDROID}/device/ti/proprietary-open
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6240/proprietaryopenpanda.patch
$ git am proprietaryopenpanda.patch
$ patch -p1 < devicepanda3.patch
$ cd ${MYDROID}/hardware/ti/wlan
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6239/hardwarepanda.patch
$ git am hardwarepanda.patch
$ cd ${MYDROID}/hardware/ti/dvp/
$ wget https://gforge.ti.com/gf/download/frsrelease/1021/6404/hardwarepanda2.patch
$ git am hardwarepanda2.patch
最後のパッチだけ手順とは当てる場所が異なっていますので注意。$ git fetch git@github.com:icepeda/panda.git icepeda-panda-4aj22:master
$ git checkout master
$ cd ${MYDROID}/device/ti/proprietary-open
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6240/proprietaryopenpanda.patch
$ git am proprietaryopenpanda.patch
$ patch -p1 < devicepanda3.patch
$ cd ${MYDROID}/hardware/ti/wlan
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6239/hardwarepanda.patch
$ git am hardwarepanda.patch
$ cd ${MYDROID}/hardware/ti/dvp/
$ wget https://gforge.ti.com/gf/download/frsrelease/1021/6404/hardwarepanda2.patch
$ git am hardwarepanda2.patch
ビルド
面倒なのでスクリプトを書きましょう。(単なるコピペですが。)まずは環境変数のセット。下記をbuildenvというファイル名で保存しましょう。
#common export YOUR_PATH=`pwd` export PATH=$PATH:/opt/toolchains/arm-2010q1/bin export MYDROID=${YOUR_PATH}/mydroid mkdir -p $MYDROID/logs export CROSS_COMPILE=arm-none-linux-gnueabi- export PATH=${YOUR_PATH}/u-boot/tools:$PATH #for WLAN Driver export KERNEL_DIR=${YOUR_PATH}/kernel/android-3.0 export KLIB=${KERNEL_DIR} export KLIB_BUILD=${KERNEL_DIR} #for SGX Driver export KERNELDIR=${YOUR_PATH}/kernel/android-3.0X-loaderのビルドを行うbuild_xloader.shです。
#!/bin/bash . buildenv cd ${YOUR_PATH}/x-loader make distclean make ARCH=arm omap44XXpanda_config make ift 2>&1 |tee $MYDROID/logs/x-loader_make.out
U-bootのビルドを行うbuild_uboot.shです。
#!/bin/bash . buildenv cd ${YOUR_PATH}/u-boot make distclean make ARCH=arm omap44XXpanda_config make 2>&1 |tee $MYDROID/logs/u-boot_make.out
KernelとModuleのビルドを行うbuild_kernel.KernelとModuleのビルドを行うbuild_kernel.shです。
#!/bin/bash . buildenv cd ${YOUR_PATH}/kernel/android-3.0 #make ARCH=arm distclean make ARCH=arm panda_defconfig make ARCH=arm uImage 2>&1 |tee $MYDROID/logs/kernel_make.out make ARCH=arm modules 2>&1 |tee $MYDROID/logs/kernel_modules.outWLAN Driverのビルドを行うbuild_wlan_driver.shです。
#!/bin/bash . buildenv cd $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx make ARCH=arm 2>&1 |tee $MYDROID/logs/wlan_driver_make.out
Androidのビルドを行うbuild_android.shです。
#!/bin/bash . buildenv cd $MYDROID source build/envsetup.sh lunch full_panda-eng #make clean ;#(required for rebuild only) make HOST_CC=gcc-4.4 HOST_CXX=g++-4.4 HOST_CPP=cpp-4.4 -j4 2>&1 |tee $MYDROID/logs/android_make.out
OMAP4OMAP4に搭載されているGraphicアクセラレータ用のSGX Driverをビルドするbuild_sgx_driver.shです。
#!/bin/bash . buildenv if [ ! -d $MYDROID/device/ti/proprietary-open/omap4/sgx_src/eurasia_km ]; then cd $MYDROID/device/ti/proprietary-open/omap4/sgx_src tar xzf eurasia_km.tgz fi cd $MYDROID source build/envsetup.sh lunch full_panda-eng cd $MYDROID/device/ti/proprietary-open/omap4/sgx_src/eurasia_km/eurasiacon/build/linux2/omap4430_android make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- TARGET_PRODUCT="blaze_tablet" BUILD=release TARGET_SGX=540 PLATFORM_VERSION=4.0最後は、書き込むイメージを一か所にまとめるbuild_img.shです。
#!/bin/bash . buildenv #Preparing Android binaries export BOARD_TYPE="panda" cd $MYDROID/out/target/product/$BOARD_TYPE mkdir -p system/lib/modules cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/compat/compat.ko system/lib/modules/ cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/net/wireless/cfg80211.ko system/lib/modules/ cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/net/mac80211/mac80211.ko system/lib/modules/ cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/drivers/net/wireless/wl12xx/wl12xx.ko system/lib/modules/ cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/drivers/net/wireless/wl12xx/wl12xx_sdio.ko system/lib/modules/ cp $MYDROID/out/target/product/$BOARD_TYPE/target/kbuild/pvrsrvkm_sgx540_120.ko system/lib/modules/ #Updating Ducati cd ${MYDROID}/out/target/product/panda/system/vendor/firmware/ rm ducati-m3.bin wget https://gforge.ti.com/gf/download/frsrelease/997/6342/4AJ.2.2_Blaze_ducati-m3.bin mv 4AJ.2.2_Blaze_ducati-m3.bin ducati-m3.bin #Preparing images cd $YOUR_PATH mkdir -p omap4_sd_files_$BOARD_TYPE cd omap4_sd_files_$BOARD_TYPE cp -f $MYDROID/out/host/linux-x86/bin/fastboot . cp -f $MYDROID/out/host/linux-x86/bin/mkbootimg . cp -f $MYDROID/out/host/linux-x86/bin/simg2img . cp -f $MYDROID/out/host/linux-x86/bin/make_ext4fs . cp -f ${YOUR_PATH}/x-loader/MLO . cp -f ${YOUR_PATH}/u-boot/u-boot.bin . cp -f ${YOUR_PATH}/kernel/android-3.0/arch/arm/boot/zImage . #Creating img files cd ${MYDROID} find out/target/product/$BOARD_TYPE -name *.img -exec rm -f {} \; source build/envsetup.sh lunch full_panda-eng make HOST_CC=gcc-4.4 HOST_CXX=g++-4.4 HOST_CPP=cpp-4.4 cp -f ${MYDROID}/out/target/product/$BOARD_TYPE/*.img $YOUR_PATH/omap4_sd_files_$BOARD_TYPE cd $YOUR_PATH/omap4_sd_files_$BOARD_TYPE ./mkbootimg --kernel zImage --ramdisk ramdisk.img --base 0x80000000 --board omap4 -o boot.img cd $YOUR_PATH/omap4_sd_files_$BOARD_TYPE dd if=/dev/zero of=./cache.img bs=1048510 count=128 mkfs.ext4 -F cache.img -L cach
各シェルスクリプトには実行権限を与えておきましょう。下記のように実行します。
$ cd ${YOUR_PATH}
$ ./build_xloader.sh
$ ./build_uboot.sh
$ ./build_kernel.sh
$ ./build_wlan_driver.sh
$ ./build_android.sh
$ ./build_sgx_driver.sh
$ ./build_img.sh
$ ./build_xloader.sh
$ ./build_uboot.sh
$ ./build_kernel.sh
$ ./build_wlan_driver.sh
$ ./build_android.sh
$ ./build_sgx_driver.sh
$ ./build_img.sh
SDカードへのAndroidブートイメージ書き込み
ここは完全に前回と同じですので略..シリアルコンソールでautobootを止めて、fastbootで書き換えるいつもの手順です。
起動させてみると...
なんか画面の大きさが...期待外れ...
一応WiFiは動く。
Bluetoothは起動せず。
画面遷移などはわりとサクサク動きますね。
ブラウザは凄まじく動作が重いですが。
ソースコードはあるので、カスタマイズできると面白くなるかも。
一応、以上です。