编译Android4.3内核源代码

 ------------------------------------------------------------------------------------------------------

此文章仅作为学习交流所用

转载或引用请务必注明原文地址:

http://blog.csdn.net/luzhenrong45/article/details/9882189

或联系作者:luzhenrong45@gmail.com

谢谢!

 ------------------------------------------------------------------------------------------------------

在上一篇文章《 Ubuntu10.04下载并编译Android4.3源代码》记录了Android4.3源代码的下载,编译和运行模拟器的学习过程,从下载下来的源码目录中我们不难发现,Android源代码工程并没有包含Linux内核代码,也就是缺少Kernel代码。

那么,Android源码里面没有Kernel代码,我们之前又怎么可以通过编译源代码运行一个Android的模拟器呢?那是因为启动模拟器时,Linux Kernel镜像默认使用:prebuilt/qemu-kernel/arm/kernel目录下的kernel-qemu文件。因此,如果我们想要手机或者模拟器运行特定的Kernel内核,我们就需要另外下载编译和运行Kernel内核代码了。下面,让我们一起学习Linux Kernel下载,编译和模拟器运行指定内核的过程。

同样,这个过程,官网有有详细说明,同样,官网地址:http://source.android.com/source/building-kernels.html


一. 下载Android Kernel内核源代码

很明显,我们需要先把Android源代码目录中没有的kernel下载下来。首先,进入Android源码目录,新建 一个目录,命名为kernel

[plain] view plain copy
  1. cd ~/Android4.3
  2. mkdir kernel

选择下载我们想要的内核代码,至于运行模拟器需要下载哪个kernel,可参考如下官网的说明

因为我们现在做的是为之前的模拟器指定特定的内核,所以按照官网的说明,应该选择goldfish作为我们的内核代码

Goldfish是一种虚拟的ARM处理器,在Android的仿真环境中使用。在Android的发展过程中,Goldfish内核的版本也从开始的linux2.6.25升级到了linux2.6.29,现在又升级到全新的linux-3.4.它的核心内容存放在:arch/arm/mach-goldfish

因此,进入kernel,使用git clone命令将内核代码下来,这个需要一点时间

[plain] view plain copy
  1. $ cd kernel
  2. $ git clone https://android.googlesource.com/kernel/goldfish.git

当我们下载完成之后,kernel目录中会多出来一个goldfish目录(下载不同的内核代码,其生成的目录相应改变),进入goldfish目录

[plain] view plain copy
  1. cd goldfish

选择一条支线代码作为我们的内核代码,可使用如下命令进行支线代码的查看

[plain] view plain copy
  1. $ git branch -a

虽说Android是基于Linux开发出来的手机系统,但是,Android Kernel相比于标准的Linux Kernel,还是有一些稍微的不同的

因为我们这里是使用Android模拟器来运行Android系统的,所以,应该选择android-goldfish-xxx的,这里我尝试使用最新的Android kernel来作为模拟器的内核。因此,在goldfish目录下执行下面语句开始指定最新的支线代码:

[plain] view plain copy
  1. $ git checkout remotes/origin/archive/android-gldfish-3.4

执行完毕之后,原来是空文件夹的goldfish,现在就出现了Linux的内核源代码了。

二. 编译Android Kernel内核源代码

第一步:配置交叉编译工具路径到环境变量并修改MK文件

编译Android内核源代码需要用到交叉编译工具,它位于Android源码工程的prebuilds的子目录中,在以前的Android源码中,它具体的位置是prebuilds/linux-x86/toolchain的子目录中,但是,不知从什么时候起,它现在(Android4.3)放在prebuilts/gcc/linux-x86/arm/的子目录中。

因此,进入goldfish目录,将交叉编译工具的路径配置进来 :

[plain] view plain copy
  1. $ export PATH=$(pwd)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH

另外,在编译内核之前,需要先修改一下goldfish目录下的makefile文件,首先打开该文件,找到如下地方:

在该Makefile文件中,我们将ARCH的值设置为arm,CROSS——COMPILE的值设置成arm-eabi-,如下图所示:

arm设置Android模拟器所使用的CPU是ARM体系结构的,而arm-eabi-,表示所使用的交叉编译工具名称是以“arm-eabi-”作为前缀的。以上这个步骤,也可以用以下指令来来完成:

[plain] view plain copy
  1. $ export ARCH=arm
  2. $ export SUBARCH=arm
  3. $ export CROSS_COMPILE=arm-eabi-

第一步:根据CPU体系架构修改硬件配置文件

配置内核用到以下两条指令的其中一条

[plain] view plain copy
  1. make goldfish_defconfig
  2. ake goldfish_armv7_defconfig

至于具体取用哪条配置指令,视你的Android模拟器CPU体系构架而定。如果是arm v5版本的,则使用make goldfish_defconfig,而如果是arm v7版本的,则使用make goldfish_armv7_defconfig。那么,怎么知道你的模拟器CPU体系构架的版本呢?首先,和以前一样,进入源码目录,启动一个默认的模拟器。但是,注意这一次在emulator命令后加一个参数 &,表明以后台方式运行模拟器,以便于我们可以继续在终端输入命令查看CPU配置。如果没有加&,那么,没有关掉模拟器,是无法继续输入命令的。

[plain] view plain copy
  1. guoke5@guoke5-pc:~$ cd /home/guoke5/Android4.3/
  2. guoke5@guoke5-pc:~/Android4.3$ . build/envsetup.sh
  3. guoke5@guoke5-pc:~/Android4.3$ lunch full-eng
  4. guoke5@guoke5-pc:~/Android4.3$ emulator & (注意加&)

此时,以后台形式开始运行默认模拟器,在终端中搞一下回车,可以继续操作终端,输入以下指令,查看CPU配置。

[plain] view plain copy
  1. guoke5@guoke5-pc:~/Android4.3$ adb shell
  2. root@generic:/ # cat /proc/cpuinfo

很清楚可以知道,该模拟器CPU是arm v7版本的,因此,这里我们使用make goldfish_armv7_defconfig指令,其实这条指令的实质是将arch/arm/configs/目录下的goldfish_armv7_defconfig文件复制给   .config文件,如下图所示:


第三步:执行make命令开始真正编译内核

[plain] view plain copy
  1. make

编译结束之后,会提示 Kernel: arch/arm/boot/zImage is ready,表示编译成功,而且会在“kernel/goldfish/arch/arm/boot/”目录下生成名为zImage的文件,这个就是我们自己编译好的Android内核镜像文件。

三. 指定内核运行Android模拟器

在上一篇文章《 Ubuntu10.04下载并编译Android4.3源代码》, 我们用emulator命令运行了一个Android4.3的模拟器,但是这个命令并没有带参数,所以,它会使用一个默认的模拟器,运行默认的内核镜像,这个默认的内核镜像zImage是位于Android源码目录下的prebuilds/qemu-kernel/arm子目录中的kernel-qemu文件

(老版本的是在out/host/linux-x86/bin子目录中kernel-qemu)。我们,我们用 -kernel选项来让模拟器运行我们刚刚编译好的内核,在源码目录中,执行

[plain] view plain copy
  1. emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage &

指令后面带了参数 &,表示在后台运行Android模拟器,便于我们可以在终端中继续输入命令查看是不是已经运行了我们自己编译的内核版本。模拟器正常运行:

接着继续在终端中输入命令查看内核镜像信息:

[plain] view plain copy
  1. guoke5@guoke5-pc:~/Android4.3$ adb shell
  2. root@generic:/ # cd proc

提示如下信息:

说明此时模拟器运行的内核镜像的版本是Linux Version 3.4.0,编译的主机名是guoke5@guoke5-pc,编译时间是Mon Aug 12 16:59:45 CST 2013,也就是刚刚,通过这些信息,可以肯定,此时模拟器运行的内核镜像,就是我们刚编译完的zImage镜像文件。可以通过下面两张图片比较两者的不同

第一张图片是默认启动的模拟器,而第二张图片则是我们刚刚编译运行的模拟器,通过查看两者的内核版本信息,也可以发现两者的不同

到此,Android内核初步编译成功!!!

编译Android4.3内核源代码相关推荐

  1. 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码

    原文网址:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码 Denni ...

  2. mac os 编译android,Mac OS X 编译Android内核源代码

    我在Mac电脑上编译Android的内核源代码遇到了不少问题,下面对遇到的问题进行一个简单的总结,希望对大家有所帮助.1.Android编译内核的源代码和编译Rom的源代 我在Mac电脑上编译Andr ...

  3. 在Ubuntu上下载、编译和安装Android 4.2 最新内核源代码(Linux Kernel)

    根据http://blog.csdn.net/luoshengyang/article/details/6564592博客内容对android4.2的编译 从源代码树下载下来的最新Android源代码 ...

  4. 小米 linux 内核面试,编译适配小米2S的CM Linux内核源代码及问题解决

    1. 下载内核源代码 首先进入CM官网与小米2S相关的页面: 在页面中可以找到Kernel后面的链接: 单击该链接进入github下载页面,可以通过git clone下载,也可以直接下载zip压缩版本 ...

  5. 【Qzone】向来缘浅 奈何情深 第三步 编译Android内核源代码

    2015-1-26 02:11 前提:第二步骤已经理解并且完成了 下载好需要的Android内核源代码 本次所用Android内核源代码版本为:android-goldfish-2.6.29  And ...

  6. 编译适配小米2S的CM Linux内核源代码及问题解决

    1. 下载内核源代码 首先进入CM官网与小米2S相关的页面: http://wiki.cyanogenmod.org/w/Aries_Info 在页面中可以找到Kernel后面的链接: http:// ...

  7. ubuntu编译android4.0

    其实,android 4.0发布之后的几天就想编译出来体验一下ICS,事情多得一直拖到今天,另外一些误导人的传闻越来越凶,说什么编译环境最低要求memory为16G. 今天就拿实验室的机器跑了一通,编 ...

  8. Android 系统编译环境设置及源代码编译

    一. 摘要    虽然已经在Android系统工作了一段时间, 但是每次需要重新setup环境的时候,都需要花一点时间, 所以就想借着这次在ubuntu 12.04 64bits系统上重新安装的机会, ...

  9. 编译安装linux内核步骤

    编译安装linux内核步骤: 一.获取内核源码 源码网址:www.kernel.org 二.解压内核源码 首先以root帐号登录,然后进入/usr/src子目录.如果用户在安装Linux时,安装了内核 ...

最新文章

  1. oracle中的连接字符串
  2. js如何操作表格(常用属性方法汇总)
  3. 疫情之下,MWC 2020正式取消!此前仍有中国公司表态坚持参展
  4. react过渡动画效果的实现,react-transition-group
  5. telegraf输出MySQL_如何使用Telegraf拖尾远程日志文件
  6. 【Linux系统编程学习】 GCC编译器
  7. python selenium list index out of range
  8. ubuntu面板的图标混乱
  9. grpc+nginx架构部署指导
  10. Java视频教程免费分享(网盘直接取)
  11. 维智WSD-A2系列伺服驱动器用户手册(MECHATROLINK-Ⅱ总线通信型)
  12. 8个PNG素材网站,每一个都让你觉得人生发亮
  13. 联想一体机计算机用户名锁定,联想电脑输入密码多次被锁定怎么办
  14. 小车手app安卓版下载_小车手app安卓版下载
  15. python学习——oop-python面向对象,类相关基础
  16. netcat(NC)学习笔记-nc命令基础解释以及基础使用--包含使用nc获取shell
  17. 尚医通 (二十)就诊人用户管理 | 平台用户管理
  18. WiFi共享精灵 - 不需路由器一键轻松把网线共享给手机、笔记本等同时无线上网_我是亲民_新浪博客...
  19. 图片内容管家 (把文字隐藏到图片里)
  20. linux pci/pcie驱动

热门文章

  1. ASP.NET中Session的sessionState 4种mode模式
  2. Java回顾之Spring基础
  3. Red Hat EnterPrise Linux 5.4下web服务器的综合使用(普通站点、虚拟主机、安全性、...
  4. 从零开始学wordpress 之四
  5. ip subnet-zero
  6. 记录一次不同接口之间并发导致的生产问题
  7. MySQL 死锁专题问题处理
  8. 给实践者的算法学习指南
  9. 盘古分词工具学习笔记
  10. ncverilog脚本_基于脚本和test bench的ncverilog ASIC仿真实例分析