如下所述,将适于BeagleBone Black之上的Android的編譯,安裝方法記述如下。
參考網站:http://icculus.org/~hendersa/android/
1. 擷取用于BBB的Android的源代碼
(1) mkdir rowboat-android
(2) cd rowboat-android
(3) repo init -u git://gitorious.org/rowboat/manifest.git -m rowboat-jb-am335x.xml
(4) repo sync
2. 擷取Android Kernel
此處将采用Robert Nelson's 3.8.x kernel tree,參考網站:http://www.eewiki.net/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-LinuxKernel
(1) git clone git:
//github.com/RobertCNelson/linux-dev.git
(2)cd linux-dev/
(3)
git checkout origin/am33x-v3.
8
-b tmp
(4)
./build_kernel.sh
編譯中,自動出現的核心編譯選項畫面,如下設定:
儲存設定退出,編譯會自動進行,直至完成。
在編譯過程中如果出現任何錯誤,參照提示操作即可。
3. U-Boot
U-Boot需要v2013.04,如下下載下傳安裝:
(1)git clone git://git.denx.de/u-boot.git
(2)cd u-boot/
(3)git checkout v2013.04 -b tmp
(3)wget https://raw.github.com/eewiki/u-boot-patches/master/v2013.04/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
(4)patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
編譯U-Boot (/home/user指的是使用者的根目錄)
(1) cd u-boot/
(2) make ARCH=arm CROSS_COMPILE=/home/user/linux-dev/dl/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf- distclean
(3) make ARCH=arm CROSS_COMPILE=/home/user/linux-dev/dl/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf- am335x_evm_config
(4) make ARCH=arm CROSS_COMPILE=/home/user/linux-dev/dl/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-
4. Android檔案系統編譯
如上,現在已經編譯完畢核心,現在準備編譯Android檔案系統。Rowboat自帶的kernel是3.2的,是以需要做以下的修改:
(1) cd rowboat-android
(2) mv kernel kernel.backup
(3) ln -s /home/user/linux-dev/KERNEL kernel
(4) 修改Makefile
[1] chmod 644 Makefile
[2] 在Makefile中找到以下一行,
export PATH :=$(PATH):$(ANDROID_INSTALL_DIR)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin
在其前部加上“#”号,将其注釋掉,然後改成以下内容:
export PATH :=/home/user/linux-dev/dl/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin:$(PATH)
export CC_PREFIX := arm-linux-gnueabihf-
[3] 将Makefile中的全部"arm-eabi-"替換成"$(CC_PREFIX)",
%s/arm-eabi-/$(CC_PREFIX)/g
(5) 編譯
make -j4 TARGET_PRODUCT=beagleboneblack OMAPES=4.x droid
(6) Build根檔案系統
[1] cd out/target/product/beagleboneblack
[2] mkdir android_rootfs
[3] cp -r root/* android_rootfs
[4] cp -r system android_rootfs
[5] cd android_rootfs/system
[6] tar -xvzf /home/user/linux-dev/deploy/*modules.tar.gz
[7] 在out/target/product/beagleboneblack目錄下,備份android_rootfs/init.rc檔案,然後打開檔案做以下修改:
将import /init.${ro.hardware}.rc改為import /init.am335xevm.rc
[8] 備份android_rootfs/fstab.am335xevm檔案,打開檔案做以下修改:
将/dev/block/platform/omap/omap_hsmmc.0/mmcblk0p3 改為
/dev/block/mmcblk0p3
[9] 打開android_rootfs/system/build.prop檔案,在檔案最下方添加以下兩行:
debug.egl.hw=0
video.accelerate.hw=0
[10] 在out/target/product/beagleboneblack目錄下,執行以下指令:
sudo ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs . rootfs rootfs.tar.bz2
5. 安裝
現在需要将上面所做的檔案彙總,寫入micro SD。
(1) mkdir image
(2) cp rowboat-android/external/ti_android_utilities/am335x/mk-mmc/* image
(3) cp rowboat-android/out/target/product/beagleboneblack/rootfs.tar.bz2 image
(4) cp u-boot/MLO image
(5) cp u-boot/u-boot.img image
(6) cp linux-dev/KERNEL/arch/arm/boot/zImage image
(7) cp linux-dev/KERNEL/arch/arm/boot/dts/am335x-boneblack.dtb image
(8) 按以下内容建立檔案 image/uEnv.txt
kernel_file=zImage
console=ttyO0,115200n8
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext4 rootwait
loadkernel=load mmc ${mmcdev}:${mmcpart} 0x80200000 ${kernel_file}
loadfdt=load mmc ${mmcdev}:${mmcpart} 0x815f0000 ${fdtfile}
boot_ftd=run loadkernel; run loadfd
tmmcargs=setenv bootargs consoleblank=0 console=${console} androidboot.console=ttyO0 mem=512M root=${mmcroot} rootfstype=${mmcrootfstype} init=/init ip=off [email protected] qemu=1 vt.global_cursor_default=0
uenvcmd=run boot_ftd; run mmcargs; bootz 0x80200000 - 0x815f0000
(9) 使用sudo fdisk -l指令來确認micro SD的裝置号,比如是/dev/sdb
[1] cd image
[2] sudo ./mkmmc-android.sh /dev/sdb MLO u-boot.img zImage uEnv.txt rootfs.tar.bz2
(10) mount SD 的boot分區,這裡是/dev/sdb1到image/boot裡
sudo mount /dev/sdb1 image/boot
(11) 執行以下指令
[1] cd media/boot
[2] sudo mv uImage zImage
[3] sudo cp /home/user/image/am335x-boneblack.dtb .
[4] sync
umount SD卡,插入BBB,啟動,安裝完成。
不過不幸的是,并未成功,led0,led1,led2三個燈常亮,啟動失敗。
追記:
一年以來,并無時間再去研究android的安裝啟動。不過,據最近在BBB上制作Ubuntu啟動包的經驗,似乎問題出在uEnv檔案上。
也即uEnv檔案有錯誤。比如在Windows上編輯過,就需要删除每一行末尾的那個^M。
希望對嘗試者有所幫助。