移植Android GingerBread 2.3.4系统到BeagleBoard OMAP3530

 

介绍编译及移植Android GingerBread 2.3.4系统到TI的OMAP3530,DM3730过程及操作步骤。成都明诚科技的基于OMAP3530的mini3530开发板也是基于此的。

 

1.   下载TI Android GingerBread 2.3.4 Devkit Package for AM35x OMAP35x and AM37x platforms网址如下:

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/exports/TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz


在Windows上解压,打开Documents目录中的《TI-Android-GingerBread-2.3.4-DevKit-2.1_DeveloperGuide.pdf》这个文档,有整个编译的步骤,我也主要是根据这个文档中的步骤进行编译的。里面还有编译好的Android系统,可以用于测试,包里还有一些工具在下面的步骤中需要用到。


2.   下载GingerBread 2.3.4版源码
整个包大概有4G,下面直接将下载地址列出,可用IE浏览器下载。

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/exports/TI_Android_GingerBread_2_3_4Sources.tar.gz


3.   准备Ubuntu 10.0.4及安装相关库
GingerBread 2.3.4需要至少Ubuntu 10.0.4版本以上作为交叉编译环境,我是直接在VMWare7.0上安装Ubuntu 10.0.4,给Ubuntu准备了一个60G的硬盘和1.2G的内存。需要注意:《DeveloperGuide》一文中的语句有问题,第一行少了一个ubuntu,执行到第二句是会出错,请按照下面的语句来。


$ sudo add-apt-repository "deb http://archive.canonical.com/ubuntu lucid partner"
$ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
$ sudo apt-get update
$ sudo apt-get install git-core gnupg flex bison
$ sudo apt-get install  gperf libsdl-dev libesd0-dev libwxgtk2.6-dev
$ sudo apt-get install  build-essential zip curl libncurses5-dev zlib1g-dev
$ sudo apt-get install  minicom tftpd uboot-mkimage expect
$ sudo apt-get install sun-java6-jdk
$ update-java-alternatives   -l    //查看目前已经安装在系统里的Java版本
$ sudo update-java-alternatives -s java-6-sun    //设置默认java版本  只有一个,也就不需要设?

 

4.   下载repo (这步可以不用,因为在TI的下载包中已经包含了本地repo)。
首先需要在用户目录新建一个bin目录,并设置到路径中,命令如下:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo" > ~/bin/repo
$chmod a+x ~/bin/repo

 

5.   解压Android源码

在Ubuntu上新建一个目录,叫rowboat-Android,然后将下载的TI_Android_GingerBread_2_3_4Sources.tar.gz拷贝到rowboat-android目录上。然后解压该文件,命令如下:

$ tar -xzf TI_Android_GingerBread_2_3_4Sources.tar.gz

解压后进入该文件夹,解压出来一个Readme文件和一个.repo文件夹,当然,.repo文件夹你看不见。

$ cd TI_Android_GingerBread_2_3_4Sources

然后执行repo命令从本地同步源码,使用--local-only选项,命令如下:

$ ./.repo/repo/repo sync --local-only

这步操作很快,我只用了不到10分钟。执行成功后可以在TI_Android_GingerBread_2_3_4Sources目录看见同步出来的源文件。
This will generate the sources for
• Android File system
• Android Linux Kernel (in kernel directory)
• u-boot boot loader (in u-boot directory)
• x-loader (in x-loader directory)
• Toolchain (prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin)

 

6.   设置toolchain

将toolchain的路径加入到PATH中,命令如下:

$ export PATH=/home/mike/rowboat-Android/TI_Android_GingerBread_2_3_4Sources/prebuilt/linux-x86/toolchain/arm-eabi-

4.4.3/bin:$PATH
注意:我是下载到/home/mike/rowboat-Android这个目录进行操作的,也许你的不同则需要修改路径。

 

7.   开始编译x-loader

进入TI_Android_GingerBread_2_3_4Sources下的x-loader目录,执行以下命令编译x-loader
$ cd x-loader
$ make CROSS_COMPILE=arm-eabi- distclean
$ make CROSS_COMPILE=arm-eabi- omap3beagle_config
$ make CROSS_COMPILE=arm-eabi-

注意!!
Config文件使用的是omap3beagle_config,《DeveloperGuide》不是特指BeagleBoard的开发文档,所以样例中没有使用BeagleBoard的config文件。

另外,对于32位的系统,执行前需要将
/home/mike/rowboat-Android/TI_Android_GingerBread_2_3_4Sources/build/core/main.mk 中的
ifneq (64,$(findstring 64,$(build_arch)))
改为:
ifneq (i686,$(findstring i686,$(build_arch)))
否则会报只支持64位系统的错误。

执行成功的话在x-loader目录会找到新生成的x-load.bin文件


8.   生成MLO

编译x-loader以后需要将x-load.bin文件转换成MLO文件,使用的工具是signGP。
signGP这个工具可以在TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz包里找到,在Tools/signGP目录中。将这个文件拷贝到Ubuntu的x-

loader目录上,执行以下命令生成MLO文件

$ ./signGP ./x-load.bin
$ mv x-load.bin.ift MLO

 

9.   编译u-boot.bin:

进入TI_Android_GingerBread_2_3_4Sources下的u-boot目录

$ cd u-boot

注意,《DeveloperGuide》原文是$ cd u-boot-omap3,目录名不对
通过以下命令编译u-boot.bin

$ make CROSS_COMPILE=arm-eabi-  distclean
$ make CROSS_COMPILE=arm-eabi-  omap3_beagle_config
$ make CROSS_COMPILE=arm-eabi-

注意,使用的config是omap3_beagle_config
编译成功会在该目录找到u-boot.bin文件

 

10.  编译Linux 核心

进入TI_Android_GingerBread_2_3_4Sources下的kernel目录,通过以下命令编译uImage,执行前注意测试一下mkimage命令是否可以正常执行,

该命令在生成uImage文件时要使用到。
$ cd kernel
$ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
$ make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_android_defconfig                        
$ make ARCH=arm CROSS_COMPILE=arm-eabi- uImage

注意! 使用的config是omap3_beagle_android_defconfig
编译成功的话可以在kernel/arch/arm/boot目录找到uImage文件

 

11. 生成Android文件系统

进入TI_Android_GingerBread_2_3_4Sources目录,执行一下命令开始编译生成Android文件系统:

$ make TARGET_PRODUCT=beagleboard OMAPES=3.x
或者
$ make TARGET_PRODUCT=beagleboard OMAPES=3.x  -j2

注意你的BeagleBoard版本,如果是Beagleboard Rev Cx的话,要使用OMAPES=3.x选项,如果是Beagleboard XM A/B/C 则使用OMAPES=5.x。我

的是Beagleboard Rev Cx,所以使用OMAPES=3.x。

-j2选项是指定使用多少个CPU进行编译,如果你的Ubuntu只有一个CPU就不用这个参数了。
编译成功后可以在out/target/product/beagleboard目录找到生成的文件系统。

 

12. 打包Android文件系统

$ cd out/target/product/beagleboard

$ mkdir Android_rootfs

$ cp  -r  root/*  Android_rootfs

$ cp  -r  system  Android_rootfs

$ sudo  ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats Android_rootfs . rootfs rootfs.tar.bz2

通过mktarball.sh命令将文件系统打包,生成rootfs.tar.bz2文件。

 

13.  制作启动SD卡

准备一张4G的SD卡,通过读卡器连接到Ubuntu上,留意一下该卡mount到那个目录,找到设备名,我的是/dev/sdb。

需要的文件包括:MLO, u-boot.bin,boot.scr,uImage,root.tar.bz2和Media_Clips目录。


MLO, u-boot.bin,uImage,root.tar.bz2都是以上步骤生成的,
boot.scr文件可以通过mkbootscr生成,为了简化过程,这里建议从TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz包的

“Prebuilt_Images\ beagleboard-xm”中拷贝一个,注意BeagleBoard的版本,如果是 Rev CX的话就找“Prebuilt_Images\ beagleboard-rev-c4”目录中的boot.scr
Media_Clips目录同样可以在TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz包里找到。

新建文件夹和拷贝文件的命令如下,供参考:

 

$ cd /home/mike/rowboat-Android/TI_Android_GingerBread_2_3_4Sources/
$ mkdir image_folder
$ cp kernel/arch/arm/boot/uImage image_folder
$ cp u-boot/u-boot.bin image_folder
$ cp x-loader/MLO image_folder
$ cp out/target/product/beagleboard/rootfs.tar.bz2 image_folder

$ cp /home/mike/TI_Android_GingerBread_2_3_4_DevKit_2_1/Prebuilt_Images/beagleboard-rev-c4/Boot_Images/boot.scr 

image_folder/

$ cp -r /home/mike/TI_Android_GingerBread_2_3_4_DevKit_2_1/Prebuilt_Images/beagleboard-rev-c4/Media_Clips/ image_folder/

$ cp  /home/mike/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/mk-mmc/mkmmc-android.sh  image_folder/

 

最后执行命令mkmmc-Android,格式如下:

$ sudo ./mkmmc-android.sh  /dev/sdb MLO u-boot.bin uImage boot.scr rootfs.tar.bz2 Media_Clips
SD卡设备名,我的是/dev/sdb。
执行成功的话你的SD卡会被格式化,重新分区,同时拷贝进了相关的文件。

 

14. 启动BeagleBoard

将SD卡插入BeagleBoard,连接BeagleBoard的HDMI口,鼠标,键盘,电源。然后上电启动!!!

注意,如果你有扩展板的话不要连接扩展板,这里还不支持。

你可能感兴趣的:(android,开发,开发板)