和标准的Linux开发流程一样,Android平台开发的一个很重要的基础工作就是对其内核的编译和移植。本文结合Android的开发文档以及本人的实践经验,简单介绍了Android内核的编译过程,希望有助于对内核移植感兴趣的开发人员。

  Android作为Google公司推出的一款手机开发平台,其本身是基于linux内核的。Google提供的内核源代码中除了linux部 分外,有很大一部分是与虚拟处理器Qemu和模拟硬件平台Goldfish相关的。所以如果想将Android移植到实际的硬件平台上需要将这部分代码剥 离出来。当然这不是这篇文章的重点,我们现在的目的是要编译出一个可以在模拟器上运行的系统内核,那么,现在就开始我们的工作吧!

工作环境及所需软件包

  系统环境:RedhatLinux9.0

  交叉编译器:GNUToolchainforARMProcessors下载地址:http://www.codesourcery.com/gnu_toolchains/arm/download.html
  其中第一项选择ARMEABI或ARMGNU/Linux,第二项选择IA32GNU/Linux即可。


此主题相关图片如下:

  Android内核源代码:linux-2.6.23-android-m5-rc14.tar.gz下载地址:http://code.google.com/p/android/downloads/list
  注意该内核版本要与你选用的模拟器版本尽量一致。


此主题相关图片如下:

  AndroidSDK下载地址:http://code.google.com/android/download_list.html


此主题相关图片如下:

1.搭建交叉编译环境

  1)安装AndroidSDK:将android-sdk_m5-rc14_linux-x86.zip解压缩到适当路径下即可使用。本文将其释放至/usr/local/android_sdk_linux路径下,并将其tools路径添加到PATH中:

  $exportPATH=$PATH:/usr/local/android_sdk_linux/tools

  2)安装交叉编译器:将arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2解压缩至/usr/local/arm-2007q3目录下,并将其bin路径添加到PATH中:

  $exportPATH=$PATH:/usr/local/arm-2007q3/bin


此主题相关图片如下:

  3)解压缩内核源代码:将linux-2.6.23-android-m5-rc14.tar.gz解压缩,得到kernel文件夹,本文中将其放置在/Android目录下。

2.获取内核编译配置文件

  交叉编译环境搭建好后需要得到android的内核编译参数的配置文件,该文件需要从androidsdk中的模拟器中得到。启动android模拟器,然后通过adb得到模拟器中提供的内核配置文件:

  $emulator&
  $adbpull/proc/config.gz

  这时候adb工具会连接模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下。将其移动至kernel目录,解压该文件得 到config,将其重命名为.config,这样就可以跳过makeconfig而直接得到Makefile所需要的内核配置文件。

  $gunzipconfig.gz
  $mvconfig.config


此主题相关图片如下:

3.修改Makefile

  首先修改第187行,将CROSS_COMPILE值改为arm-none-linux-gnueabi-,这是我们安装的交叉编译工具链的前缀,修改此处意在告诉make在编译的时候要使用该工具链。


此主题相关图片如下:

  然后修改第519、520行,将buildid值注释掉,因为目前版本的android内核不支持该选项。


此主题相关图片如下:

4.开始编译

  在kernel目录下执行make:

  $make

  除个别警告外编译过程一切顺利,最终在/kernel/arch/arm/boot目录下面生成一个zImage,即为编译好的内核镜像了。


此主题相关图片如下:


此主题相关图片如下:

5.运行该镜像

  $emulator-kernel~/android/kernel/arch/arm/boot/zImage

  最终效果如图所示。


此主题相关图片如下:

更多相关文章

  1. 深刻解析 Android(安卓)的 AIDL
  2. busybox应用于android系统
  3. Android(安卓)开发手记之NDK 编程实例
  4. android系统体系结构
  5. Android(安卓)资源(resource)学习小结
  6. Android(安卓)NDK编程入门笔记
  7. Google Android操作系统内核编译图文教程
  8. Ubuntu上搭建Android编译环境(1)
  9. Google Android操作系统内核编译图文教程

随机推荐

  1. ListView入门级单击,长按监听
  2. Android ProgressDialog简单实例
  3. android登录超时显示demo
  4. 模拟头条
  5. Android 应用获取通知栏权限
  6. android java 网络检测
  7. Android可视化统计模块
  8. android之Widget01
  9. Android(安卓)Studio 高版本无法执行Java
  10. Android(安卓)常识【转·】