如下所述,将适于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。
希望对尝试者有所帮助。