原创作品,转载请注明出处,严禁非法转载             copyright:weishusheng   2015.8.1

时下android系统非常流行,下面就来说一下,下载编译一个android系统的过程。此处仅是我个人开发过程的总结和记录,想获取更详细资料,可参考官方文档。在编译之前一定要找对相关资料,错误的资料会让你做的很痛苦,还有就是android源码下载比较慢,编译也很慢,建议下载和编译在晚上睡觉之前,这样第二天醒来就编译好了,避免了等待的烦躁。

环境:

电脑:Lenovo 32位  2G内存(编译android明显不够,后面会说到如何增加swap存储容量)

主机:VMware10.0.0+ubuntu14.04(最好是64位,32位的编译会出问题)

android版本:android4.2.2

目标平台:TMDXEVM355x (AM355x start kit)

参考资料:

(1)《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

(2)《Vmware Workstation安装ubuntu14.04》参考技术博客:

http://jingyan.baidu.com/article/0320e2c1ef9f6c1b87507bf6.html

(3)《如何在BIOS中开启虚拟化技术》参考网络文档:

http://wenku.baidu.com/link?url=6fySZ5sXqb67pdU3TcoegwBKrqfgJG28cA0XLy2OYkKRM5k4K8AVwj2cY6w9GD6TjXez-P_z5kRtVE0mMrYa6Gq7DpTjboauNTofPv-cHWC

(4)《Ubuntu Linux创建和增加Swap分区教程》参考:

http://www.linuxidc.com/Linux/2014-12/110155.htm

(5) 另外给出android镜像、调试工具、SDk、学习文档等的中文网页链接,里面真是应有尽有,真是android学习者的福音,一定要进去看看,你绝对不会后悔的:http://www.androiddevtools.cn/

适用对象:

编译出的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的编译需要ubuntu 64位的系统,具体安装过程可以百度,在安装ubuntu之前需要开启PC的硬件虚拟化。

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

解压完成后会生成许多目录,比较重要的比如:

  • Android File system : $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/
  • Android Linux Kernel: $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/kernel
  • Bootloader  : $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/u-boot
  • Toolchain location will be at $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/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
mktarball.sh会把SD卡分成四个区,并把Bootloader,kernel,文件系统等自动烧录进相应的分区。

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可以在官网上下载,那里有编译好的所有镜像。Media_Clipes里存放的是图片和音视频文件,也可以不烧写进系统。 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

注意:

<sd card mount-point>是SD卡的挂载点,不要选错,选错了系统可能就被格式化了。

13.启动android系统

成功写入SD卡后,把SD卡从读卡器取出,放入开发板,上电启动,首次启动比较慢,大概5分钟后启动成功,第二次启动会快很多。

在ubuntu14.04上编译android4.2.2系统的更多相关文章

  1. 【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程

    原文网址:http://jileniao.net/linux-android-building.html sublime text让我伤心.本来很信任sublime text的自动保存功能,之前使用一 ...

  2. 在Ubuntu14.04上编译Android4.0.1出现的几个问题

    一. 工具 sudo apt-get install git-core gnupg flex bison gperf build-essential \       zip curl libc6-de ...

  3. ubuntu14.04上编译安装python3.7.3

    首先先去python官网www.python.org下载python3.7.3的官方压缩包Python-3.7.3.tgz 一.先安装需要的包zlib1g,libffi apt-get update ...

  4. Ubuntu14.04 Chromium 编译

    1.下载depot_tools: 首先安装 git-core: sudo apt-get install git-core 执行命令: git clone https://chromium.googl ...

  5. [译]How to Install Node.js on Ubuntu 14.04 如何在ubuntu14.04上安装node.js

    原文链接为 http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/ 由作者Jacob Nicholson 发表于October ...

  6. 在Ubuntu Server14.04上编译Android6.0源码

    此前编译过Android4.4的源码,但是现在Android都到了7.0的版本,不禁让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,于是在过去的24小时里,毅然花了9个小时编译了一把An ...

  7. 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码

    原文网址:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码       ...

  8. Ubuntu14.04上深度学习Caffe库安装指南(CUDA7.5 + opencv3.1)

    Ubuntu14.04上Caffe安装指南 安装的准备工作 首先,安装官方版Caffe时.假设要使用Cuda.须要确认自己确实有NVIDIA GPU. 安装Ubuntu时,将/boot 分区分大概20 ...

  9. 在ubuntu16.04上编译android源码【转】

    本文转载自:http://blog.csdn.net/fuchaosz/article/details/51487585 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...

随机推荐

  1. cadence 焊盘制作小结

    因为以前一直用altium designer 话PCB,做封装的时候焊盘是不用自己操心的,但是开始用cadence以后发现好多以前不太懂的东西,需要自己画焊盘,这就导致需要了解好多自己以前不懂的东西, ...

  2. 【分享】SQL Server优化50法

    虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决. 查询速度慢的原因很多,常见如下几种: 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) I/ ...

  3. The ‘Microsoft.ACE.OLEDB.12.0′ provider is not registered on the local machine. (System.Data)

    When you try to import Excel 2007 or later “.xlsx” files into an SQL Server 2008 database you may ge ...

  4. 第一个js库文件

    <!DOCTYPE html> <html xmlns=;         ;                     }                 };     })(); ...

  5. NOSQL Mongo入门学习笔记 - MongoDB的安装(一)

    手上的工作不是很忙,所以来学习学习很久就像接触的MongoDb,无奈前段时间工作时间都比较多.记录在这里供以后参考 环境: Centos 7 64位 开始: 1. 在官网下载Mongo : wget  ...

  6. 1029: [JSOI2007]建筑抢修 - BZOJ

    Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修 ...

  7. 你不需要jQuery(四)

    jQuery是个好东西.它诞生于IE6在互联网称霸的那个时代.jQuery的存在让我们的代码能很好的兼容各种平台. 然而,到如今,浏览器技术已经取得了巨大的进步.我们可以自由的使用所有最新众多ES5/ ...

  8. 破解之寻找OEP[手动脱壳](1)

    OEP:(Original Entry Point),程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的 ...

  9. linux 配置java环境变量

    修改/etc/profile文件 如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题. ·用文本编辑器打开/etc/profi ...

  10. spring 异常管理机制

    三.异常处理的几种实现: 3.1.在经典的三层架构模型中,通常都是这样来进行异常处理的: A.持久层一般抛出的是RuntiomeException类型的异常,一般不处理,直接向上抛出. B.业务层一般 ...