ところがしかし!4AI.1.4 OMAP4 Icecream Sandwich Panda Noteというページが突然出現しました。
これはつまり、pandaboardでも動かせるということでしょうか。
今回はUbuntu 12.04(64bit版)と新規入手したpandabaord ESを使って試してみましょう。
環境準備
必要なパッケージのインストールについては、公式サイトに載っているのですが、こちらはまだUbuntu 11.10となっていて情報が古い。ので、Linaroを参考にする方がよさそうです。
まずは以下のパッケージをまとめてインストールします。
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32z-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils uuid-dev libgl1-mesa-dev
さらに今回はUbuntu 12.04ですので、手順の通り、以下のパッケージもインストール。
$ sudo apt-get install lib32readline5-dev
加えて、今回のpandaboard用ビルドに必要となるパッケージをインストールします。参考はこちら。
$ sudo apt-get install gcc-4.4 gcc-4.4-multilib g++-4.4 g++-4.4-multilib
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/
Javaは、以前紹介したこちらの手順でJDK6をインストールしておきます。
repoツールについては以下のようにインストール。
$ mkdir ~/bin -p
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH
ソースツリーのダウンロード
こちらの手順に従います。まずはAndroidソースツリーのダウンロードです。
適当なワーク用ディレクトリ以下にて、
$ mkdir -p 4AI.1.4; cd 4AI.1.4
$ 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 RLS4AI.1.4_IcecreamSandwich.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 RLS4AI.1.4_IcecreamSandwich.xml
$ repo sync
続いてはKernel
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/kernel/omap.git kernel/android-3.0
$ cd kernel/android-3.0
$ git checkout d5e6ee8b7b648094892e501b4ee6e2424d59f7d1
$ git clone git://git.omapzoom.org/kernel/omap.git kernel/android-3.0
$ cd kernel/android-3.0
$ git checkout d5e6ee8b7b648094892e501b4ee6e2424d59f7d1
続いてはU-boot
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/repo/u-boot.git u-boot
$ cd u-boot
$ git checkout b2f9ce5c0c2747f1af86d26f9cadbc36af9b7da6
$ git clone git://git.omapzoom.org/repo/u-boot.git u-boot
$ cd u-boot
$ git checkout b2f9ce5c0c2747f1af86d26f9cadbc36af9b7da6
続いてはX-loader
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/repo/x-loader.git x-loader
$ cd x-loader
$ git checkout 835089cdb52288fcf1ca2f14018ae756842be724
$ git clone git://git.omapzoom.org/repo/x-loader.git x-loader
$ cd x-loader
$ git checkout 835089cdb52288fcf1ca2f14018ae756842be724
パッチあて
4AI.1.4というリリースはTIのOMAP4評価ボード用のソースコードです。そのため、pandaboardで動かすには、パッチをあてる必要があります。手順の通りgit amでパッチを当てればよいのですが、私は容量削減のために.gitなどはすべて削除してあります。そのためpatchコマンドを使ってあてていきます。
まずはX-loaderへのパッチあて。
$ cd ${YOUR_PATH}/x-loader
$ wget https://gforge.ti.com/gf/download/user/9174/5768/xloaderpanda.patch
$ patch -p1 < xloaderpanda.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5768/xloaderpanda.patch
$ patch -p1 < xloaderpanda.patch
続いてはU-bootへのパッチあて
$ cd ${YOUR_PATH}/u-boot
$ wget https://gforge.ti.com/gf/download/user/9174/5769/ubootpanda.patch
$ patch -p1 < ubootpanda.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5769/ubootpanda.patch
$ patch -p1 < ubootpanda.patch
続いてはKernelへのパッチあて
$ cd ${YOUR_PATH}/kernel/android-3.0
$ wget https://gforge.ti.com/gf/download/user/9174/5770/kernelpanda1.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5771/kernelpanda2.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5772/kernelpanda3.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5775/kernelpanda4.patch
$ patch -p1 < kernelpanda1.patch
$ patch -p1 < kernelpanda2.patch
$ patch -p1 < kernelpanda3.patch
$ patch -p1 < kernelpanda4.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5770/kernelpanda1.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5771/kernelpanda2.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5772/kernelpanda3.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5775/kernelpanda4.patch
$ patch -p1 < kernelpanda1.patch
$ patch -p1 < kernelpanda2.patch
$ patch -p1 < kernelpanda3.patch
$ patch -p1 < kernelpanda4.patch
最後はAndroidへのパッチあて。
$ cd ${MYDROID}/device/ti/panda
$ wget https://gforge.ti.com/gf/download/user/9174/5778/devicepanda1.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5779/devicepanda2.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5780/devicepanda3.patch
$ patch -p1 < devicepanda1.patch
$ patch -p1 < devicepanda2.patch
$ patch -p1 < devicepanda3.patch
$ cd ${MYDROID}/device/ti/proprietary-open
$ wget https://gforge.ti.com/gf/download/user/9174/5777/proprietaryopenpanda.patch
$ patch -p1 < proprietaryopenpanda.patch
$ cd ${MYDROID}/device/ti/common-open
$ wget https://gforge.ti.com/gf/download/user/9174/5776/commonopenpanda.patch
$ patch -p1 < commonopenpanda.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5778/devicepanda1.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5779/devicepanda2.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5780/devicepanda3.patch
$ patch -p1 < devicepanda1.patch
$ patch -p1 < devicepanda2.patch
$ patch -p1 < devicepanda3.patch
$ cd ${MYDROID}/device/ti/proprietary-open
$ wget https://gforge.ti.com/gf/download/user/9174/5777/proprietaryopenpanda.patch
$ patch -p1 < proprietaryopenpanda.patch
$ cd ${MYDROID}/device/ti/common-open
$ wget https://gforge.ti.com/gf/download/user/9174/5776/commonopenpanda.patch
$ patch -p1 < commonopenpanda.patch
ビルド手順を試していて手順通りではビルドが通らないという不都合があったので、下記パッチを当てます。コピペしてpanda_defconfig.patchという名前で保存しましょう。
--- a/kernel/android-3.0/arch/arm/configs/panda_defconfig +++ b/kernel/android-3.0/arch/arm/configs/panda_defconfig @@ -325,16 +325,16 @@ CONFIG_SND_OMAP_SOC_SDP4430=y CONFIG_SND_OMAP_SOC_OMAP4_HDMI=y CONFIG_SND_OMAP4_ABE_USE_ALT_FW=y # wl12xx support -CONFIG_CFG80211=y +CONFIG_CFG80211=m CONFIG_NL80211_TESTMODE=y CONFIG_LIB80211=y -CONFIG_MAC80211=y +CONFIG_MAC80211=m CONFIG_MAC80211_LEDS=y CONFIG_MAC80211_DEBUGFS=y CONFIG_USB_ZD1201=y -CONFIG_WL12XX_MENU=y -CONFIG_WL12XX=y -CONFIG_WL12XX_SDIO=y +CONFIG_WL12XX_MENU=m +CONFIG_WL12XX=m +CONFIG_WL12XX_SDIO=m CONFIG_CRYPTO_PCBC=y CONFIG_CRYPTO_MD4=y CONFIG_CRYPTO_MICHAEL_MIC=ypanda_defconfig.patchをあてる。
$ cd ${YOUR_PATH}
$ patch -p1 < panda_defconfig.patch
$ patch -p1 < panda_defconfig.patch
さらに.gitを消している場合ではビルドに失敗してしまうので下記のパッチも当てます。
当てます。 compat_driver_wl12xx.patchという名前で保存しましょう。
--- a/mydroid/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/Makefile +++ b/mydroid/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/Makefile @@ -7,8 +7,8 @@ define filechk_version.h "$(shell git describe --dirty)";') endef -$(obj)/version.h: .git/HEAD .git/index .git/refs/tags - @$(call filechk,version.h) +#$(obj)/version.h: .git/HEAD .git/index .git/refs/tags +# @$(call filechk,version.h) $(obj)/main.c: $(src)/version.h --- /dev/null +++ b/mydroid/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/version.h @@ -0,0 +1,2 @@ +static const char *wl12xx_timestamp = __TIMESTAMP__; +static const char *wl12xx_git_head = "BETA_01202012_01-1407-gd5e6ee8-dirty";compat_driver_wl12xx.patchあて。
$ cd ${YOUR_PATH}
$ patch -p1 < compat_driver_wl12xx.patch
$ patch -p1 < compat_driver_wl12xx.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.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 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
OMAP4に搭載されているGraphicアクセラレータ用のSGX Driverをビルドするbuild_sgx_driver.shです。
#!/bin/bash . buildenv 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/compat/compat.ko system/lib/modules/ cp $MYDROID/hardware/ti/wlan/mac80211/compat/net/wireless/cfg80211.ko system/lib/modules/ cp $MYDROID/hardware/ti/wlan/mac80211/compat/net/mac80211/mac80211.ko system/lib/modules/ cp $MYDROID/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/wl12xx.ko system/lib/modules/ cp $MYDROID/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/wl12xx_sdio.ko system/lib/modules/ cp $MYDROID/out/target/product/$BOARD_TYPE/target/kbuild/omaplfb_sgx540_120.ko system/lib/modules/ cp $MYDROID/out/target/product/$BOARD_TYPE/target/kbuild/pvrsrvkm_sgx540_120.ko system/lib/modules/ #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 $MYDROID/device/ti/support-tools/boot/omap4/umulti2.sh 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 cache
各シェルスクリプトには実行権限を与えておきましょう。下記のように実行します。
$ 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ブートイメージ書き込み
まだAndroidを起動できるSDカードを持っていない場合には、以下の2段階手順で書き換える必要があります。すでにAndroidが起動できるSDカードを持っている場合は、1段階目は飛ばしてOKです。1段階目は、ブートローダが起動できるSDカードの作成手順です。
こちらのサイトで説明されているomap3-mkcard.shを開いて、テキストファイルに貼り付けます。
(※そのままダウンロードしてしまうと、HTMLファイルとなっているので、実行できません。)
UbuntuにSDカードを差して、omap3-mkcard.shに実行権限を与えておいた上で、
$ sudo ./omap3-mkcard.sh /dev/sdb
※/dev/sdbの部分はUbuntu上で認識されているSDカードのデバイスファイルを指定
※/dev/sdbの部分はUbuntu上で認識されているSDカードのデバイスファイルを指定
SDカードのフォーマットが成功したら、いったんSDカードを抜き差しし、Ubuntuのファイルブラウザで認識させます。
下記で、ブートローダをbootパーティションに書き込みます。
$ cd ${YOUR_PATH}/omap4_sd_files_panda
$ cp MLO /media/boot/
$ cp u-boot.bin /media/boot/
$ cp MLO /media/boot/
$ cp u-boot.bin /media/boot/
書き込みが完了したら、SDカードをアンマウントしてUbuntuからは外し、pandaboard ESに差して電源を入れます。(シリアルコンソールで確認するのが良いですが、自動でfastbootモードに移行するはずです。)
pandaboard ESとUbuntuとをminiUSBケーブルで接続して下記コマンドをたたきます。
$ cd ${YOUR_PATH}/omap4_sd_files_panda
$ sudo ./fastboot oem format
$ sudo ./fastboot flash xloader MLO
$ sudo ./fastboot flash bootloader u-boot.bin
$ sudo ./fastboot reboot
これにより、SDカードがAndroid用にフォーマットされ、ブートローダのみが書き込まれた状態となります。$ sudo ./fastboot oem format
$ sudo ./fastboot flash xloader MLO
$ sudo ./fastboot flash bootloader u-boot.bin
$ sudo ./fastboot reboot
2段階目がこちらからです。
上記の最後のコマンドでリブートし、再びfastbootモードに入っているはずです。入ってなさそうであれば、いったん電源を切って、再度電源を入れなおしましょう。
※なお、2回目以降の書き換えでは、何もしないとKerneが起動してしまうので、シリアルコンソールでu-boot起動時に何かキーを押して止めるという手順が必要です。
pandaboard ESとUbuntuとをminiUSBケーブルで接続した状態で。
$ sudo ./fastboot flash boot boot.img
$ sudo ./fastboot flash system system.img
$ sudo ./fastboot flash cache cache.img
$ sudo ./fastboot flash userdata userdata.img
$ sudo ./fastboot reboot
$ sudo ./fastboot flash system system.img
$ sudo ./fastboot flash cache cache.img
$ sudo ./fastboot flash userdata userdata.img
$ sudo ./fastboot reboot
これでAndroidが起動してくるはずです。以降、SDカードを差して電源を入れればAndroidが起動します。
壁紙がエラーなく表示できることがLinaroとの違いでしょうか。
しかし、これは、WiFiもBluetoothも起動しない...
まあ、また次回見ていきましょう。
0 件のコメント:
コメントを投稿