Omappediaで公開されたpandaboard向けの
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 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/にインストールされます。
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
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
回線によっては半日近くかかりますので、気長に待ちましょう。
続いては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).
と怒られてしまった場合は、
こちらを参照。
続いてはU-boot
$ cd ${YOUR_PATH}
$ 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
パッチあて
こちらも基本手順の通りでOK。
まずはX-loaderへのパッチあて。
$ cd ${YOUR_PATH}/x-loader
$ 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
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
最後のパッチだけ手順とは当てる場所が異なっていますので注意。
ビルド
面倒なのでスクリプトを書きましょう。(単なるコピペですが。)
まずは環境変数のセット。下記を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.0
X-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.out
WLAN 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
SDカードへのAndroidブートイメージ書き込み
ここは完全に
前回と同じですので略..
シリアルコンソールでautobootを止めて、fastbootで書き換えるいつもの手順です。
起動させてみると...
なんか画面の大きさが...期待外れ...
一応WiFiは動く。
Bluetoothは起動せず。
画面遷移などはわりとサクサク動きますね。
ブラウザは凄まじく動作が重いですが。
ソースコードはあるので、カスタマイズできると面白くなるかも。
一応、以上です。