zoukankan      html  css  js  c++  java
  • 第四章 源代码的下载和编译

    Android移植主要就是Linux内核的移植,而Linux内核的移植主要是Linux驱动的移植。为了开发和测试Linux驱动,需在Ubuntu Linux下搭建两套开发环境:Android应用程序开发环境和Linux内核开发环境。需要对源代码进行下载和编译,由于Android源代码包含了很多东西,如内嵌在Android系统中的应用程序的源代码,Android SDK带的各种工具的源代码,Android NDK的源代码,以及HAL源代码,所以对Android源代码的下载、编译和测试过程比较复杂、繁琐,在这里就先介绍相对比较简单的下载和编译Linux内核源代码的方法和步骤。

    下载的Android源代码并没有包含Linux内核源代码,要想使用Linux内核,必须要单独下载Linux内核源代码,必须从Google提供的网址下载Android中使用的Linux内核源代码。

    1.下载Linux内核源代码:执行命令“# git clone https://android.googlesource.com/kernel/common,git”可以下载最新的Linux内核源代码,下载会花费较长的时间。下载完成后,在当前目录下会有一个common目录,进入该目录,执行命令“# git branch -a”查看当前有哪些远程版本库。根据版本情况从版本库导出最新的Linux内核,可以使用命令“# git checkout -b android-3.0 remotes/origin/android-3.0”导出Linux 3.0的内核。Google专门为Android模拟器提供了一个Linux内核goldfish,可以使用命令“# git clone http://android.googlesource.com/kernel/goldfish.git”下载该内核。下载完成后,进入goldfish目录,执行命令“# git checkout -b android-goldfish-2.6.29 remotes/origin/android-goldfish-2.6.29”导出goldfish。

    2.Linux内核源代码的目录结构,有arch,block,Documentation,drivers,firmware,fs,include等多个目录。

    3.安装Android内核的编译环境:在Ubuntu Linux下编译Linux内核需要安装交叉编译器。交叉编译器就是指在A架构的CPU上编译可在B架构CPU上运行的程序。主要是因为编译器无法在目标平台上安装或目标平台性能较低,不得已才在性能较高限制较少的平台上进行编译。在编译Linux内核之前,需配置Linux内核源代码根目录下的Makefile文件。打开Makefile,找到ARCH和CROSS_COMPILE,并将这两个变量设置成如下值“ARCH ?= arm

    CROSS_COMPILE?= arm-none-linux-gnueabi-”,其中ARCH变量表示将Linux源代码编译成可在ARM架构上运行的Linux内核。CROSS_COMPILE变量表示交叉编译器的前缀。打开交叉编译者的bin目录,可以看到很多以arm-none-linux-gnueabi-开头的命令,如arm-none-linux-gnueabi-gcc、arm-none-linux-gnueabi-gdb等。由于编译Linux内核可能会使用很多这样的命令,为了方便,Linux内核允许值只设置这些命令的前缀,就可找到相应的编译命令。安装交叉编译器步骤如下:

      ①准备工作:将arm-linux-gcc-4.3.2.tgz文件和arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2文件复制到工作目录

      ②解压编译器:使用命令

        “# tar zxvf arm-linux-gcc-4.3.2.tgz -C /

         # tar jxvf arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2 -C /”

         解压两个压缩文件

      ③验证交叉编译器是否安装成功,使用命令“# ls /usr/local/arm -l”④安装libncurses5,为了配置内核make menuconfig,libncurses5可以为字符界面的Linux终端提供一个美观的界面,使用命令“# apt-get install libncurses5-dev”

    4.配置和编译Linux内核:如果内核源代码目录是“/root/linux_kernel”,使用命令

    “# export PATH=/root/compilers/arm-none-linux-gnueabi/bin:$PATH

    # cd ~/linux_kernel

    # make clean

    # make”

    编译Linux内核,make clean命令用于清除大多读由编译生成的.o、.ko等文件,但保留配置文件。一般新下载的Linux源代码根目录都没有.config文件,而这个文件决定了编译生成的Linux内核由哪些功能和模块组成。第一次拿到Linux内核时应先使用4个命令中的一个配置Linux内核,在Linux内核源代码根目录产生一个.config文件。在配置Linux内核前一般需确定自己的需求,需要什么样的驱动模块、是否支持调试、支持的CPU类型等。4个配置命令必须在Linux源代码根目录执行。

    ①make config:该命令以文本形式配置Linux内核。配置项后面中括号中的值是该配置项当前的值,如果中括号中有多个值,第一个是默认值,如果不设置,直接按回车就会保留默认值。

    ②make menuconfig:以字符界面风格的菜单形式配置Linux内核。配置界面后面带“-->”的菜单项说明还有子菜单。按回车键就可进入子菜单。很多菜单项前面有中括号,里面可以是“M”或“*”,也可以为空。有的菜单项前的中括号里只能设置“*”或空。中括号里的值表明当前菜单项对应的Linux内核组件嵌入Linux内核的方式。[M]表示以模块形式.ko文件动态安装在Linux内核中。[Y]表示Linux内核组件会嵌入Linux内核。当Linux内核成功启动后,这些组件会自动装载。如果为空表明该Linux内核组件不会包含到当前的Linux内核中。通过按“M”键可以将中括号中的值设置成“M”,按“Y”可将中括号中的值设为“Y”。按空格键可以在[M]、[Y]和空格之间进行切换。最后通过Exit退出设置界面后,如果修改了设置项,会询问是否保持刚才的设置。如果选Yes,则会根据刚才的设置重新生成.config文件。

    ③make oldconfig:与make config类似,也是以字符界面逐项要求用户配置。但它显示的要求用户参与的配置项要比make config少。大多数配置项都会给出默认值,并不需要用户进行配置。只有后面带NEW的配置项才需要用户配置,这些配置项都是当前Linux内核版本新加入的功能。

    ④make xconfig:以图形界面形式配置Linux内核,使用了QT的共享库,要执行此命令,必须安装QT,可使用命令“# apt-get install libqt4-dev”。安装完QT后,执行make xconfig。在界面中可以通过上面的保存安装保存设置,也可以使用打开按钮打开其它配置文件。在配置中有一项很重要,就是交叉编译器的签名。使用make menuconfig命令。成功编译Linux内核后,会在<Linux内核源代码根目录>/arch/arm/boot目录生成一个zImage文件。该文件就是Linux内核的二进制版本。可以直接使用zImage安装到开发板上,也可以使用命令“# emulator -avd myavd -kernel /root/kernel/goldfish/arch/arm/boot/zImage”在Android模拟器中测试Linux内核,需要使用由goldfish编译而成的zImage文件,myavd是一个AVD名称。

  • 相关阅读:
    .net 加伪静态的方法
    前台调用后台事件的方法
    关于一个网站的源码问题
    div里面有ul li时 让高度自适应的方法
    用insert语句写入汉字变成问号的解决
    .net 4.0 ValidateRequest="false" 无效
    修复 VS2008 asp.net 设计视图 失效/工具选项[Html设计视图]出现"加载此属性页时出错" 方案
    绑定数据时,时间格式的转换
    IE下CSS属性float:right下移换行或不显示的问题原因及解决
    珍惜生命,远离培训 《如何选择好的培训机构》读后感 JavaEye技术网站
  • 原文地址:https://www.cnblogs.com/Horatia/p/5425556.html
Copyright © 2011-2022 走看看