深入浅出 - Android系统移植与平台开发(一)

深入浅出 - Android系统移植与平台开发(一)

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

androidgitgooglejdkubuntu

目录(?)[+]

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

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

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

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

安装编译时依赖的包:

[plain] view plaincopy

  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

执行下面的命令:

[plain] view plaincopy

  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工具

依次执行下面的命令:

[plain] view plaincopy

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

通过curl命令下载repo工具:

[plain] view plaincopy

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

给repo工具加下执行权限:

[plain] view plaincopy

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

创建我们的源码目录:

[plain] view plaincopy

  1. $ mkdir WORKING_DIRECTORY
  2. $ cd WORKING_DIRECTORY

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

[plain] view plaincopy

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

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

[plain] view plaincopy

  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源码:

[plain] view plaincopy

  1. $repo sync

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

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

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

[plain] view plaincopy

  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:

[plain] view plaincopy

  1. $ cd WORKING_DIRECTORY
  2. $ mkdir kernel

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

[plain] view plaincopy

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

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

[plain] view plaincopy

  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目录,进入到该目录下:

[plain] view plaincopy

  1. $ cd goldfish
  2. $ ls -al

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

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

[plain] view plaincopy

  1. $ git branch -a

通过git checkout来得到源码:

[plain] view plaincopy

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

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

时间: 2024-10-22 13:13:18

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

深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制【转】

本文转载自: 4.3定制Android平台系统 通常产品厂商在拿到Android源码后会在android源码基础上进行定制修改,以匹配适应自己的产品,从本节开始,我们从最原始的Android源码系统里一步一步定制出自己的Android系统.本节主要内容包含:根据Android源码,添加新产品编译项,定制系统启动界面和文字,定制系统启动动画和声音,定制系统桌面. 4.3.1 添加新产品编译项 Android系统的源代码是一个逻辑结构非常独立工程,在一套Android源码中可以编译出多个产品映像,在

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

第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同目录下,对于这个大的一个工程,Android通过自己的编译系统完成编译过程. 4.1.1 Android编译系统介绍 Android和Linux一样,他们的编译系统都是通过Makefile工具来组织编译源码的.Makefile工具用来解释和执行Makefile文件,在Makefile文件里定义好工程

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

第五章.JNI机制 4.1 JNI概述 由前面基础知识可知,Android的应用层由Java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架层,是由于Java代码是与硬件环境彻底"隔离"的跨平台语言,Java代码无法直接操作硬件. 比方:Android系统支持大量传感器.Java运行在虚拟机中,无法直接得到传感器数据.而Android系统基于Linux操作系统.在Linux操作系统中C/C++通过Linux提供的系统调用接口能

Android系统移植与平台开发(七)- 初识HAL

1.      HAL的module与stub HAL(Hardware AbstractLayer)硬件抽象层是Google开发的Android系统里上层应用对底层硬件操作屏蔽一个软件层次,说白了,就是上层的应用不用关心底层硬件具体如何工作的,只要向上层提供一个统一的接口即可,这种设计思想广泛的存在于当前的软件架构设计里. 严格来讲,Android系统里完全可以没有HAL硬件抽象层,上层应用层可以通过API调用到底层硬件,但是Android自出现开始一直打着开源的旗号,而一些硬件厂商由于商业因

第一章 Android系统移植与驱动开发概述

本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Android系统可以识别设备中的蓝牙,WiFi等,这样就可以使用这些功能了.这些程序大多是支持各种硬件设备的Linux驱动程序. 这一章中介绍了许多在进行Android系统移植和驱动开发前要了解的概念以及要做的准备.接下来主要说的是在Android系统移植过程中的主要工作. Android移植分为两部分:应

Android深度探索(卷1)HAL与驱动开发 第一章 Android系统移植与驱动开发概述 读书笔记

Android深度探索(卷1)HAL与驱动开发 第一章 Android系统移植与驱动开发概述 读书笔记 本章是 Android系统移植与驱动开发概述性的具体讲解.首先,Android被分为了四层架构.在最底层的是Linux内核 .然后分别是C/C++代码库.Android SDK A和应用程序.而Android的移植又分为系统移植和应用移植.系统移植要实现Android操作系统在其他硬件平台上运行起来,其中的关键是Linux的内核.内核必须要完成对平台上运行的各个硬件的识别.所以这就需要Linu

Android系统移植与驱动开发概述读书心得

第一章是Android系统移植与驱动开发概述,包含了Android系统架构.Android系统移植的主要工作.查看Linux内核版本.Linux内核版本号的定义规则.如何学习Linux驱动开发以及Linux设备驱动等六方面内容 Android系统架构分为四层,分别是Linux内核.C/C++代码库.Android SDK API和应用程序.Linux内核这一层主要包括Linux的驱动程序以及内存管理.进程管理.电源管理等程序. Android移植可分为两部分:应用移植和系统移植.应用移植是指将应

《Android深度探索卷一》第一章Android系统移植与驱动开发概述。

<Android深度探索>第一章讲的是Android系统移植与驱动开发概述.这一章节将对Android以及Linux驱动做一个总体的介绍. Android是一个非常优秀的的嵌入式操作系统.经过几年的发展和演进,Android已经形成了非常完善的系统架构.Android的系统架构分为四层,如下图 Android移植可分为两部分:应用移植和系统移植. Android系统移植是指让Android操作系统在某一个特定硬件平台上运行.使一个操作系统在特定硬件平台上运行的一个首要条件就是该操作系统支持硬件

Android系统移植与驱动开发概述 第一章

Android系统移植与驱动开发概述 1. Android的系统架构分为Linux内核.C/C++代码库.Android SDK API.应用程序四层. 2. Android移植可分为应用移植和系统移植.应用移植是指将应用程序移植到特定的硬件平台.系统移植指的是让Android操作系统在某一特定硬件平台上运行(首要条件是该操作系统支持硬件平台的CPU架构).系统移植的主要任务是移植Linux驱动和HAL(Hardware Abstraction Layer:硬件抽象层,位于应用程序与驱动之间).