天天看點

BeagleBone Black之上Android的安裝

如下所述,将适于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

編譯中,自動出現的核心編譯選項畫面,如下設定:

BeagleBone Black之上Android的安裝
BeagleBone Black之上Android的安裝
BeagleBone Black之上Android的安裝
BeagleBone Black之上Android的安裝

儲存設定退出,編譯會自動進行,直至完成。               

在編譯過程中如果出現任何錯誤,參照提示操作即可。

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。

希望對嘗試者有所幫助。