深入浅出 - Android系统移植与平台开发(一)
+-------------------------------------------------+
+ 本系列为连载,不定期会更新 +
+-------------------------------------------------+
一、Android4.0系统的下载与编译
Android系统的下载与编译,Google的官方网站上已经给出了详细的说明,请参照Android的官方网址:
http://source.android.com/source/index.html
内容主要分为:
1. 准备Android下载与编译环境
2. 下载源码
3. 编译源码及内核源码
下面我们依次来说明其步骤及注意事项。
1. 准备Android下载与编译环境
Android源码的编译Google只给出了在类Unix系统,确切的说是Ubuntu及MacOS上的详细过程,我们下面只描述Ubuntu上的编译过程。
1.1硬件环境:
l 足够快的PC机,如果有条件,最好是使用实体PC
l 内存最少1G,硬盘最少要30GB
注:也可以使用Vmware或VirtualBox等虚拟机软件,但是编译速度太慢,至于内存,如果小于1G,在编译系统时可能会出错。
1.2软件环境
我们使用Ubuntu12.04作为编译主机系统,(官方不建议使用Ubuntu12.04版本),由于Android系统里代码大部分是由Java语言写的,所以必然要安装JDK,不过,不同的版本,对JDK的版本有不同的要求:
l 在Gingerbread(2.3.x) 版本及其之后版本,使用JDK6.0,并且使用64位系统编译
l 在Gingerbread(2.3.x) 以前版本,使用JDK5.0,并且可以在32位系统上编译
注:当然我们通过修改一些配置文件,在32位系统上编译,但是不能保证编译出来的系统将来能否不出问题。
JDK6.0建议直接从SUN公司的网站上下载:
http://java.sun.com/javase/downloads/
安装编译时依赖的包:
- $ 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 tofrodos \
- python-markdown libxml2-utils xsltproc zlib1g-dev:i386
执行下面的命令:
- $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1/usr/lib/i386-linux-gnu/libGL.so
2. 下载Android4.0及Goldfish源码
2.1 下载并初始化repo工具
依次执行下面的命令:
- $ mkdir ~/bin
- $ PATH=~/bin:$PATH
通过curl命令下载repo工具:
- $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
给repo工具加下执行权限:
- $ chmod a+x ~/bin/repo
创建我们的源码目录:
- $ mkdir WORKING_DIRECTORY
- $ cd WORKING_DIRECTORY
初始化repo工具,准备访问google源码仓库:
- $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
有的时候使用上面的命令不能连接android服务器,我们可以使用下面的命令连接:
- $ repo init -u https://android.googlesource.com/a/platform/manifest -b android-4.0.1_r1
这个时候,要保证您的ubuntu能够上网,并且能正常连接到Android服务器,在初始化完repo工具后,会让你输入gmail邮箱及用户名验证。
2.2下载Android源码
通过执行下面的命令,开始下载Android源码:
- $repo sync
如果你的PC机足够给力,可以在命令后面加上–jn,n表示多个线程同时下载,可以提高下载速度。
然后是漫长的等待,Android4.0.1的源码大概有6GB左右,一般1~2个晚上的时间。
有的时候,网络可能会断,我们可以使用下面的脚本来进行下载,当连接出错时,会自动下载。
- #!/bin/bash
- PATH=~/bin:$PATH
- repo init-u https://android.googlesource.com/a/platform/manifest-b android-4.0.1_r1
- repo sync
- while [ $? != 0]; do
- echo“ **Error: sync failed, re-sync again”
- sleep 5
- repo sync
- done
2.3其它源码下载源
前面所述的下载步骤是Google放出一官方版本的Android代码,它里面通常只有模拟器和部分和Google有合作关系设备的源码,如果要想编译一个目标设备的Android4.0.1系统,我们肯定要对其进行定制,不过有一些知名的设备生产厂商或第三方厂商,也会开源针对自己设备的Android系统,如:三星,高通等,比较专业的,网址如下:
linaro网站主要是ARM的芯片的最新Android解决方案,如:基于三星猎户座芯片的origen开发板,基于TI的OMAP系统芯片的PandaBoard板,基于Nova A9500 ARM 双核Cortex A9的snowball开发板等。
如果从上述网站上下载源码,要根据上述网站的说明进行相关操作。
2.4 下载模拟器Goldfish内核源码
Google在开发Android系统的同时,使用qemu开发了针对每个版本的一个模拟器,这大大降低了开发人员的开发成本,便于Android技术的推广。qemu是一个开源的模拟处理器软件,而Google使用qemu模拟的是ARM926ej-S的Goldfish处理器,如果开发人员在没有目标开发板的情况下,要对硬件进行操作的话,必然要去操作Android底层的驱动,我们可以使用模拟器的内核源码。
Ø 下载Goldfish内核源码
首先进入到Android的源码目录,创建源码目录kernel:
- $ cd WORKING_DIRECTORY
- $ mkdir kernel
从Android的远程源码仓库下载源码:
- $git clone http://android.googlesource.com/kernel/goldfish.git
当然,如果你要编译指定目标平台的kernel的话,也可以从指定的仓库里下载,官方给出了下列处理器的kernel:
- $ git clone https://android.googlesource.com/kernel/common.git
- $ git clone https://android.googlesource.com/kernel/exynos.git
- $ git clone https://android.googlesource.com/kernel/goldfish.git
- $ git clone https://android.googlesource.com/kernel/msm.git
- $ git clone https://android.googlesource.com/kernel/omap.git
- $ git clone https://android.googlesource.com/kernel/samsung.git
- $ git clone https://android.googlesource.com/kernel/tegra.git
大概几十分钟后,下载完了,如下图所示:

在kernel目录下产生一个goldfish目录,进入到该目录下:
- $ cd goldfish
- $ ls -al
通过ls–al命令查看当前目录,可以看到隐藏的.git。

通过git branch –a来查看所以分支:
- $ git branch -a

通过git checkout来得到源码:
- $ git checkout remotes/origin/android-goldfish-2.6.29
如下图所示,当前目录下出现了Linux内核源码的目录结构:

深入浅出 - Android系统移植与平台开发(一)的更多相关文章
- 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器
作者:唐老师,华清远见嵌入式学院讲师. 1. 编译Android模拟器 在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别 ...
- 深入浅出 - Android系统移植与平台开发(五)- 编译Android源码(转)
2.3编译Android源码 Android源码体积非常庞大,由Dalvik虚拟机.Linux内核.编译系统.框架代码.Android定制C库.测试套件.系统应用程序等部分组成,在编译Android源 ...
- 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)
第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...
- 深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制(瘋耔修改篇一)
首先非常感谢原文作者为我们提供的知识库,因为有你们的贡献,我们的开发难度更显简单 原文 : http://blog.csdn.net/mr_raptor/article/details/30113 ...
- 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境
作者:唐老师,华清远见嵌入式学院讲师. 编译Android源码 关于android系统的编译,Android的官方网站上也给出了详细的说明.http://source.android.com/sour ...
- 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速
作者:唐老师,华清远见嵌入式学院讲师. Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速度越来越快,但是随着新 版本的出现,其启动速度一直都比较慢,当然,作为程序员,我们 ...
- 深入浅出 - Android系统移植与平台开发(七)- 初识HAL
作者:唐老师,华清远见嵌入式学院讲师. 1. HAL的module与stub HAL(Hardware AbstractLayer)硬件抽象层是Google开发的Android系统里上层应用对底层硬件 ...
- 深入浅出 - Android系统移植与平台开发(七)- 初识HAL【转】
本文转载自:http://blog.csdn.net/mr_raptor/article/details/8069588 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] ...
- 深入浅出 - Android系统移植与平台开发(十二)- Android JNI机制
第五章.JNI机制 4.1 JNI概述 由前面基础知识可知,Android的应用层由Java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架 ...
随机推荐
- 最大独立集 HDU 1068
题目大意:有n个人,两个人之间有相互的关系,问最大的关系数目. 思路:n-(最大匹配数/2).因为这里给出的是n个人之间的两两关系 //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心 ...
- MULE-ET0 、 ET1、ET2、PT1、PT2
设计验证阶段中的五个样车试制概念 骡子车( mule car ) ET0 第一轮设计工程样车试制 ET1 第二轮设计工程样车试制 ET2 第一轮产品工装样车试制 PT1 第二轮产品工装样车试制 PT2 ...
- 学习笔记:GLSL Core Tutorial – Pipeline (OpenGL 3.2 – OpenGL 4.2)
GLSL Core Tutorial – Pipeline (OpenGL 3.2 – OpenGL 4.2) GLSL 是一种管道,一种图形化的流水线 1.GLSL 的具体工作流程: 简化流程如下: ...
- php mysql 实现消息队列
最近遇到一个批量发送短信的需求,短信接口是第三方提供的.刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗? 但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低. 于是想到,用PHP和 ...
- preg_replace 方法
标红关键字 $text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. ...
- php 四种基础的算法 ---- 冒泡排序法
1. 冒泡排序法 * 思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来. * 比如:2,4,1 // 第一次 冒出的泡是4 * ...
- Android 开发——如何显示 GIF 动画
gif 图动画在 android 中还是比较常用的,比如像新浪微博中,有很多 gif 图片,而且展示非常好,所以我也想弄一个.经过我多方的搜索资料和整理,终于弄出来了,其实 github 上有很多开源 ...
- oracle 基础使用以及sql语句基础
oracle的安装与卸载 要记住数据库口令,适用于sys.system.sysman/dbsnmp等账户,而scott帐号密码默认为tiger, 以oracle 10g来说,scott账户默 ...
- java 对象的组合,一个类组合到另一个类中(例如手机卡装到手机上)
Example4_9.java public class Example4_9 { public static void main(String args[]) { SIM simOne = new ...
- ZOJ Problem - 2588 Burning Bridges tarjan算法求割边
题意:求无向图的割边. 思路:tarjan算法求割边,访问到一个点,如果这个点的low值比它的dfn值大,它就是割边,直接ans++(之所以可以直接ans++,是因为他与割点不同,每条边只访问了一遍) ...