Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26270
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2017-08-28 14:39
文章分类
文章存档

2017年(9)

我的朋友
最近访客

分类: 嵌入式

2017-12-26 20:03:33

原文地址:http://blog.csdn.net/vipclx/article/details/9056237

上一篇讲述了怎么下载android内核,这篇以编译google为android模拟器提供的内核goldfish为例,记录下我的编译过程。

一、下载交叉编译器

    新建一个目录android_tools用于存放交叉编译器,然后cd到该目录下,执行如下指令:

               git clone

下载完成后在android_tools目录下会有一个prebuilt目录,该目录下内容如下:

    然后为该交叉编译器设置环境变量:

               export PATH=/home/jession/android_tools/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

二、编译前的配置

    首先打开内核源码主目录下的Makefile文件,找到如下两句:

               ARCH ?= $(SUBARCH)
              CROSS_COMPILE ?= 

修改如下:

              ARCH ?= arm
              CROSS_COMPILE ?= arm-eabi-

其中ARCH变量表示将Linux源代码编译成可在ARM架构上运行的Linux内核,CROSS_COMPILE变量表示交叉编译器的前缀。读者可打开交叉编译器下的linux-x86/toolchain/arm-eabi-4.4.3/bin目录,会发现其中的命令基本上都是以arm-eabi-开头的,如图:

    配置好Makefile脚本后开始配置内核主目录下的.config文件(隐藏文件),一般新下载的Linux内核源码根目录下都没有.config文件,该文件决定了编译生成的Linux内核由哪些功能模块组成。可在内核根目录下面使用如下四个指令生成.config文件(这里没使用,所以具体情况也不清楚,用时自查):

        make  config :以文本形式配置Linux内核。

        make  menuconfig :以字符界面风格的菜单形式配置Linux内核(使用该命令须先按照libncurses5,为字符界面的Linux终端提供界面,安装方式:apt-get install libncurses5-dev)。

        make oldconfig :类似于make config,只是要求用户参与的配置项更少,大多配置会给出默认值。

        make xconfig :以图形界面形式配置Linux内核,须安装QT(apt-get install libqt4-dev)。

    我们因为是编译android模拟器内核,有一种方式可以是我们无须配置就能得到.config文件,而且更符合android模拟器配置。方法如下,新建一个模拟器(因为这里我们编译android模拟器内核,需要测试结果,所以android-sdk必须下载。如果已创建模拟器,这步就不必了):

               android create avd -n test -t 1           #在sdk的tools目录下进行

打开该模拟器:

               emulator -avd test

模拟器开启后,使用如下命令导出模拟器文件系统下的/proc/config.gz文件,这里假设adb命令已添加进环境变量。

               adb  pull  /proc/config.gz

执行上述命令后,config.gz文件会被pull到当前目录下,将其拷贝进内核源码主目录下,解压:

              gunzip  config.gz

得到config文件,然后将其改名为.config文件即可:

              mv  config  .config

我在网上看到有人编译goldfish时使用如下指令得到了.config文件:

              make  goldfish_defconfig

我也试了一下,确实生成的.config文件,使用该.config配置文件编译内核后也成功生成了zImage二进制文件,但是使用该内核开启模拟器时却始终无法进入系统。

三、编译

    如果以前编译过,可先使用make  clean命令清除一些由编译生成的文件(.o、.ko等文件)。然后键入如下指令编译:

              make

编译完成后会在内核源码目录的arch/arm/boot/下生成一个zImage文件,即为最终的内核二进制文件,使用上一步新建的模拟器进行测试:

              emulator  -avd  test  -kernel  /home/jession/android_kernel/goldfish/arch/arm/boot/zImage

如果成功打开模拟器,表示编译成功,可使用adb shell进入模拟器文件系统查看当前内核版本:

              cat  /proc/version

得到结果如下图:

时间显示该内核为刚刚生成的。


阅读(1993) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~