标签:
原创作品,转载请注明出处,严禁非法转载 copyright:weishusheng 2015.8.1
时下android系统非常流行,下面就来说一下,下载编译一个android系统的过程。此处仅是我个人开发过程的总结和记录,想获取更详细资料,可参考官方文档。
环境:
电脑:Lenovo 32位 2G内存(编译android明显不够,后面会说到如何增加swap存储容量)
主机:VMware10.0.0+ubuntu14.04
android版本:android4.2.2
目标平台:TMDXEVM355x (AM355x start kit)
参考资料:
《android4.2.2开发指导》参考TI 官方档:http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/index_FDS.html
适用对象:
编译出的android系统适用于TMDXEVM355x (AM355x start kit)目标平台
本文适用于android开发工作者,不需要有太多的android知识(因为对android,我也是刚入门),致力于使android开发者可以快速在TMDXEVM355x (AM355x start kit)上运行自己编译的android4.2.2系统。
编译大体流程:
安装ubuntu开发环境--->安装依赖库--->下载android源码--->配置交叉编译环境--->编译Bootloader--->编译android linux内核--->编译文件系统--->制作启动SD卡--->从SD卡启动
1.安装ubuntu14.04 64位
android的编译需要64位的系统,具体安装过程请问度娘
2.安装依赖库
为了顺利编译android系统,执行下面的命令安装必须的软件包和库
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 minicom tftpd uboot-mkimage expect libgl1-mesa-dri $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
安装JDK6
下载JDK6,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
执行下面的命令安装JDK6
$ chmod a+x jdk-6uXX-linux-x64.bin $ ./jdk-6uXX-linux-x64.bin $ sudo mkdir -p /usr/lib/jvm $ sudo mv jdk1.6.0_XX /usr/lib/jvm/ $ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_XX/bin/java" 1 $ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_XX/bin/javac" 1 $ sudo update-alternatives --config java $ sudo update-alternatives --config javac
主意:
android4.2.2系统的编译需要JDK6以上版本
硬盘空间至少要留有30G可用空间
3.下载android4.2.2源码(有两个方式)
方式一:repo下载
在HOME目录下新建bin目录,并添加环境变量
$ mkdir ~/bin $ export PATH=~/bin:$PATH
下载repo脚本,并给予脚本执行权限
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
执行以下命令下载android源码
$ mkdir $HOME/rowboat-android $ cd $HOME/rowboat-android $ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-JB-4.2.2-DevKit-4.1.1.xml $ repo sync
如果上述下载方法速度太慢,可以试试方法二
方法二:直接下载
下载地址:http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/exports/TI_Android_JB_4.2.2_DevKit_4.1.1.bin
下载完成后,执行下面的命令进行解压
$ cd $HOME $ chmod a+x TI_Android_JB_4.2.2_DevKit_4.1.1.bin $ ./TI_Android_JB_4.2.2_DevKit_4.1.1.bin
解压完成后会生成许多目录,比较重要的比如:
4.设置交叉编译工具链
设置android源码目录下的prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin里的arm-eabi-作为交叉编译工具
$ export PATH=$HOME/rowboat-android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH
注意:强烈建议把arm-eabi-设置为交叉编译工具,避免使用其他交叉编译工具而产生的冲突
5.编译Bootloader
进入u-boot目录
$ cd <android source path>/u-boot
执行下面的命令
$ make CROSS_COMPILE=arm-eabi- distclean $ make CROSS_COMPILE=arm-eabi- am335x_evm_config $ make CROSS_COMPILE=arm-eabi-
这将会生成MOL、u-boot.img
6.编译Android Linux Kernel
进入kernel目录
$ cd <android source path>/kernel
执行下面的命令
$ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean $ make ARCH=arm CROSS_COMPILE=arm-eabi- am335x_evm_android_defconfig $ make ARCH=arm CROSS_COMPILE=arm-eabi- uImage
编译完成后会在 kernel/arch/arm/boot 下产生uImage
7增加swap分区
编译android文件系统时,至少需要4G的运行内存,如果少于4G,编译会通不过(当然看个人编译环境了,我是亲自试过了,2G编了一天一夜,没过,再加了2G swap,还是没过,用了整整8个小时)但我只有2G,所以需要增加swap分区,在我增加5G的swap分区后,终于编译通过了,这次用了6个小时。
增加swap分区步骤
首先查看当前内存情况
$ free -m
创建swap分区
$ mkdir swap
$ cd swap
$ dd if=/dev/zero of=swapfile bs=1024 count=5000000 //我创建了大概5.8G,需要多大,大家自己计算
把swapfile转变为swap格式
$ mkswap swapfile
启动swapfile
$ swapon swapfile
让系统启动时自动加载这个swap文件
$ vim /etc/fstab
增加以下内容
/SWAP_PATH/swapfile swap swap defaults 0 0
再次查看
当前内存情况
$ free -m
8编译android文件系统
进入源码顶层目录
$ cd <android source path>
编译文件系统
$ make TARGET_PRODUCT=am335xevm_sk OMAPES=4.x -j<N>
注意:
N是处理器数量的两倍,这个参数可以加快编译速度
文件系统将会在out/target/product/目录下生成
9.压缩文件系统
$ cd out/target/product/am335xevm_sk $ mkdir android_rootfs $ cp -r root/* android_rootfs $ cp -r system android_rootfs $ ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs . rootfs rootfs.tar.bz2
10 编辑启动引导脚本uEnv.txt
该脚本在启动时告诉系统启动的参数
$ mkdir uEnv.txt
bootargs=console=ttyO0,115200n8 androidboot.console=ttyO0 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait init=/init ip=off bootcmd=mmc rescan ; fatload mmc 0 81000000 uImage ; bootm 81000000 uenvcmd=boot
11 新建系统镜像目录,并把Bootloader、kernel、文件系统都拷贝进去
$ mkdir image_folder $ cp uEnv.txt image_folder $ cp kernel/arch/arm/boot/uImage image_folder $ cp u-boot/u-boot.img image_folder $ cp u-boot/MLO image_folder $ cp out/target/product/am335xevm_sk/rootfs.tar.bz2 image_folder $ cp Media_Clips image_folder
注意:
Media_Clips可以在官网上下载,哪里有编译好的所有镜像
12.把镜像写入SD卡
注意:
SD卡至少需要2G容量
写入时会首先格式化SD卡,原来的数据会全部丢失
把SD卡通过读卡器连接到ubuntu,然后执行下面的命令把镜像写入SD卡
$ cd image_folder $ sudo ./mkmmc-android.sh /dev/sd<sd card mount-point> MLO u-boot.img uImage uEnv.txt rootfs.tar.bz2 Media_Clips
13.成功写入SD卡后,把SD卡从读卡器取出,放入开发板,上电启动,首次启动比较慢,大概5分钟后启动成功,第二次启动会快很多。
标签:
原文地址:http://www.cnblogs.com/wss-linux/p/4697044.html