编译Android模拟器内核goldfish

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

一、下载交叉编译器

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

               git clone https://android.googlesource.com/platform/prebuilt

下载完成后在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

得到结果如下图:


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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值