分类: Android移植2012-09-05 14:16 16173人阅读 评论(12) 收藏 举报
 

目录(?)[+]

 

+-------------------------------------------------+

+      本系列为连载,不定期会更新       +

+-------------------------------------------------+

一、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/

安装编译时依赖的包:

  1. $ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  2. zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  3. libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  4. libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  5. python-markdown libxml2-utils xsltproc zlib1g-dev:i386

执行下面的命令:

  1. $ 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工具

依次执行下面的命令:

  1. $ mkdir ~/bin
  2. $ PATH=~/bin:$PATH

通过curl命令下载repo工具:

  1. $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

给repo工具加下执行权限:

  1. $ chmod  a+x ~/bin/repo

创建我们的源码目录:

  1. $ mkdir WORKING_DIRECTORY
  2. $ cd WORKING_DIRECTORY

初始化repo工具,准备访问google源码仓库:

  1. $ repo  init -u  https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

有的时候使用上面的命令不能连接android服务器,我们可以使用下面的命令连接:

  1. $ repo init -u   https://android.googlesource.com/a/platform/manifest -b android-4.0.1_r1

这个时候,要保证您的ubuntu能够上网,并且能正常连接到Android服务器,在初始化完repo工具后,会让你输入gmail邮箱及用户名验证。

2.2下载Android源码

通过执行下面的命令,开始下载Android源码:

  1. $repo sync

如果你的PC机足够给力,可以在命令后面加上–jn,n表示多个线程同时下载,可以提高下载速度。

然后是漫长的等待,Android4.0.1的源码大概有6GB左右,一般1~2个晚上的时间。

有的时候,网络可能会断,我们可以使用下面的脚本来进行下载,当连接出错时,会自动下载。

  1. #!/bin/bash
  2. PATH=~/bin:$PATH
  3. repo init-u https://android.googlesource.com/a/platform/manifest-b android-4.0.1_r1
  4. repo sync
  5. while [ $? != 0]; do
  6. echo“  **Error: sync failed, re-sync again”
  7. sleep 5
  8. repo sync
  9. done

2.3其它源码下载源

前面所述的下载步骤是Google放出一官方版本的Android代码,它里面通常只有模拟器和部分和Google有合作关系设备的源码,如果要想编译一个目标设备的Android4.0.1系统,我们肯定要对其进行定制,不过有一些知名的设备生产厂商或第三方厂商,也会开源针对自己设备的Android系统,如:三星,高通等,比较专业的,网址如下:

www.linaro.org

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:

  1. $ cd WORKING_DIRECTORY
  2. $ mkdir kernel

从Android的远程源码仓库下载源码:

  1. $git clone http://android.googlesource.com/kernel/goldfish.git

当然,如果你要编译指定目标平台的kernel的话,也可以从指定的仓库里下载,官方给出了下列处理器的kernel:

  1. $ git clone https://android.googlesource.com/kernel/common.git
  2. $ git clone https://android.googlesource.com/kernel/exynos.git
  3. $ git clone https://android.googlesource.com/kernel/goldfish.git
  4. $ git clone https://android.googlesource.com/kernel/msm.git
  5. $ git clone https://android.googlesource.com/kernel/omap.git
  6. $ git clone https://android.googlesource.com/kernel/samsung.git
  7. $ git clone https://android.googlesource.com/kernel/tegra.git

大概几十分钟后,下载完了,如下图所示:

在kernel目录下产生一个goldfish目录,进入到该目录下:

  1. $ cd goldfish
  2. $ ls -al

通过ls–al命令查看当前目录,可以看到隐藏的.git。

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

  1. $ git branch -a

通过git checkout来得到源码:

  1. $ git checkout remotes/origin/android-goldfish-2.6.29

如下图所示,当前目录下出现了Linux内核源码的目录结构:

深入浅出 - Android系统移植与平台开发(一)的更多相关文章

  1. 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器

    作者:唐老师,华清远见嵌入式学院讲师. 1.   编译Android模拟器 在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别 ...

  2. 深入浅出 - Android系统移植与平台开发(五)- 编译Android源码(转)

    2.3编译Android源码 Android源码体积非常庞大,由Dalvik虚拟机.Linux内核.编译系统.框架代码.Android定制C库.测试套件.系统应用程序等部分组成,在编译Android源 ...

  3. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  4. 深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制(瘋耔修改篇一)

    首先非常感谢原文作者为我们提供的知识库,因为有你们的贡献,我们的开发难度更显简单 原文 :   http://blog.csdn.net/mr_raptor/article/details/30113 ...

  5. 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境

    作者:唐老师,华清远见嵌入式学院讲师. 编译Android源码 关于android系统的编译,Android的官方网站上也给出了详细的说明.http://source.android.com/sour ...

  6. 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速

    作者:唐老师,华清远见嵌入式学院讲师. Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速度越来越快,但是随着新 版本的出现,其启动速度一直都比较慢,当然,作为程序员,我们 ...

  7. 深入浅出 - Android系统移植与平台开发(七)- 初识HAL

    作者:唐老师,华清远见嵌入式学院讲师. 1. HAL的module与stub HAL(Hardware AbstractLayer)硬件抽象层是Google开发的Android系统里上层应用对底层硬件 ...

  8. 深入浅出 - Android系统移植与平台开发(七)- 初识HAL【转】

    本文转载自:http://blog.csdn.net/mr_raptor/article/details/8069588 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   ...

  9. 深入浅出 - Android系统移植与平台开发(十二)- Android JNI机制

    第五章.JNI机制 4.1 JNI概述 由前面基础知识可知,Android的应用层由Java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架 ...

随机推荐

  1. linux下编译安装apache

    在linux(CentOS6.5)上安装Apache,要首先确保以下程序事先安装 apr:The mission of the Apache Portable Runtime (APR) projec ...

  2. listctrl中的cell如何支持被复制

    为了方便测试data pipeline, 使用wxpython开发了一个小工具,用来显示csv文档中的特定列,及数据库中的指定值. 显示数据的contrl选择了listctrl.但这里有个问题,显示的 ...

  3. sqlserver-根据2张表的id更新其他列值

    update a set a.ORGID = (select b.ORG_ID from PT_SERVICE b where a.SERVICEOID = b.SERVICEOID and a.OR ...

  4. SQL中的左连接与右连接有什么区别,点解返回值会不同?(转)

    例子,相信你一看就明白,不需要多说 A表(a1,b1,c1) B表(a2,b2) a1 b1 c1 a2 b2 01 数学 95 01 张三 02 语文 90 02 李四 03 英语 80 04 王五 ...

  5. c3p0连接池的使用

    利用c3p0连接池获取数据库连接,即不再通过DriverManager的getConnection(url,user,password)方法获取connection,而是通过c3p0数据源的类来获取连 ...

  6. iOS 开发中的各种证书

    公钥和私钥 转载自:http://www.samirchen.com/ios-certificates/ 先简单的介绍一下公钥和私钥.我们常见的加密算法有两类:对称加密算法(Symmetric Cry ...

  7. 关键自li,em,dl,ul,ol,footer,header,nav,aside,article

    section 版块 用于划分页面上的不同区域,或者划分文章里不同的节 header 页面头部或者版块(section)头部 footer 页面底部或者(section)底部 nav 导航 (包含链接 ...

  8. html base1

    标题: 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. <h1> 定义最大的标题.<h6> 定义最小的标题. 段落: < ...

  9. Windows API 之 CreateFile、CreateFileMapping 、MapViewOfFile

    CreateFile Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: ...

  10. jq模拟操作

    1.常用模拟 trigger() $('#btn').trigger('click'); 当页面加载完,点击事件就会完成 上面也可以简写成:$('#btn').click(); 2.触发自定义事件 t ...