Android板级支持与硬件相关子系统
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 Android的开发环境和源代码

↘1.2.1 Android的开发环境

Android的Linux开发环境一般使用Ubuntu主机。在基于Ubuntu的主机环境中,开发Android主机环境包括以下需求:git工具、repo工具、Java的JDK、主机编译工具等。编译过程中主要的目标机编译工具则使用Android开源工程中自带的。

Android系统在编译过程中需要编译主机的工具,因此需要使用主机的GCC工具链。而对于编译目标机文件,Android在prebuilt目录中集成了GCC交叉编译工具链。

新版本Android源代码编译应当使用64位的主机环境,配置方式如下所示:

    $ sudo apt-get install git-core gnupg flex bison gperf build-essential \
      zip curl zliblg-dev libc6-dev lib32ncurses5-dev ia32-libs \
      xllproto-core-dev libxll-dev lib32readline5-dev lib32z-dev \
      libgll-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
      libxml2-utils

而32位的主机开发环境,配置方式如下所示:

    $ sudo apt-get install git-core gnupg flex bison gperf build-essential \
      zip curl zliblg-dev libc6-dev libncurses5-dev xllproto-core-dev \
      libxll-dev libreadline6-dev libgll-mesa-dev tofrodos python-markdown \
      libxml2-utils

repo是调用git封装的工具,安装repo的准备工作如下所示:

    $ mkdir ~/bin
    $ PATH=~/bin:$PATH

repo工具同样可以在Android的网站上获得,方法如下所示:

      $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo

repo是一个由Google提供的工具,本质上是一个脚本,它可能随时更新,因此应当从Google的相应地址获得最新的repo,复制到本地之后更改权限来使用。

↘1.2.2 源代码仓库

AOSP工程的源代码放置在Android的源代码仓库中,其网站为:

https://android.googlesource.com/

这个网址既可以作为使用git工具获取和提交源代码的地方,也可以通过浏览器使用https协议访问,由此获得源代码仓库的一些信息。

1.repo获取全部工程

直接使用repo获取Android完全的源代码方法包括初始化代码仓库和获取代码两个步骤,每个步骤可以增加不同的参数。

使用repo初始化Android的代码仓库的一般方法如下所示:

    $ repo init -u https://android.googlesource.com/platform/manifest

由于没有使用额外的参数,此时得到的是代码仓库中master分支(主分支)的最新版本。在初始化过程中,也可以看到列出的各个分支(branch)和标签(tag)的名称,这些就是可以在初始化的过程中使用-b指定的参数。

在repo init时,使用-b选项下载稳定的Android2.3.3版本:

    $ repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.3_rl

在repo init时,使用-b选项下载Android4.x的版本:

    $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.4_r2

repo init之后,将生成隐藏目录.repo,其中文件.repo/manifest.xml为repo工程的描述文件,表示repo时包含的各个工程,其中的几个条目如下所示:

      <project path="frameworks/base"  name="platform/frameworks/base" />
      <project path="hardware/libhardware" name="platform/hardware/libhardware" />
      <project path="hardware/libhardware_legacy"
                          name="platform/hardware/libhardware_legacy" />

repo/manifest.xml中的path表示工程获取后的路径(基于当前目录),name表示工程的原始名称。

在经过repo init之后,可以使用repo获取Android的全部代码,方法如下所示:

    $ repo sync

使用repo sync时,也可以同步一个单个工程的内容,需要使用工程的名称作为repo sync的参数,工程的名称可以从manifest.xml获得。获得单个工程的方法如下所示:

    $ repo sync {project_name}

获取工程后,每个工程的目录中含有一个.git目录,这就是工程版本管理目录,这些.git目录中的内容大部分是到.repo/projects/<project_path>的连接。

从BSP开发的角度,Android源代码工程中,几个重点的目录如下。

·frameworks/base:核心框架部分,包括C++和Java的框架。

·hardware/libhardware:硬件相关内容,包括硬件模块。

·hardware/libhardware_legacy:陈旧的硬件相关内容,有些内容依然在使用。

·hardware/<vendor>/:包括qcom和ti等厂商针对自己硬件的内容。

·device/*/<TARGET_PRODUCT>:各个目标板的配置目录。

2.其他工程

Android的开源代码包括了很多工程,使用repo并非得到所有的工程,而是使用一个特定的工程列表。可以直接使用git工具获取其他工程:

    $  git clone https://android.googlesource.com/name

工程的名字可以从https://android.googlesource.com/获取。

例如,获得repo工具的方法如下所示:

    $  git clone https://android.googlesource.com/tools/repo

命令执行完成后,将获得名称为repo的目录,其中包含.git目录用于存放工程的版本控制信息。可以进入并查看其中的内容:

    $ cd repo
    $ git branch -r
      origin/HEAD -> origin/master
      origin/maint
      origin/master
      origin/stable

git branch -r列出了远端的分支名称,进一步使用git checkout可以取出某个稳定分支的代码。

一些与BSP开发相关的工程如下所示。

·kernel/*:各个不同系统的Linux内核的源代码。

·platform/prebuilts/gcc/*:各种交叉编译工具链(包括不同版本和体系结构)。

·toolchain/*:主机自身的一些工具。