和标准的Linux开发流程一样,Android平台开发的一个很重要的基础工作就是对其内核的编译和移植。本文结合Android的开发文档以及本人的实践经验,简单介绍了Android内核的编译过程,希望有助于对内核移植感兴趣的开发人员。
Android 作为Google公司推出的一款手机开发平台,其本身是基于linux内核的。Google提供的内核源代码中除了linux部分外,有很大一部分是与虚 拟处理器Qemu和模拟硬件平台Goldfish相关的。所以如果想将Android移植到实际的硬件平台上需要将这部分代码剥离出来。当然这不是这篇文 章的重点,我们现在的目的是要编译出一个可以在模拟器上运行的系统内核,那么,现在就开始我们的工作吧!

工作环境及所需软件包
系统环境:Redhat Linux 9.0
交叉编译器:GNU Toolchain for ARM Processors 下载地址:
http://www.codesourcery.com/gnu_toolchains/arm/download.html
其中第一项选择ARM EABI或ARM GNU/Linux,第二项选择IA32 GNU/Linux即可。

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

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

1.搭建交叉编译环境
1) 安装Android SDK: 将android-sdk_m5-rc14_linux-x86.zip解压缩到适当路径下即可使用。本文将其释放至/usr/local/android_sdk_linux路径下,并将其tools路径添加到PATH中:
$ export PATH=$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中:
$ export PATH=$PATH:/usr/local/arm-2007q3/bin

3) 解压缩内核源代码:将linux-2.6.23-android-m5-rc14.tar.gz解压缩,得到kernel文件夹,本文中将其放置在/Android目录下。
2.获取内核编译配置文件
交叉编译环境搭建好后需要得到android的内核编译参数的配置文件,该文件需要从android sdk 中的模拟器中得到。启动android模拟器,然后通过adb得到模拟器中提供的内核配置文件:
$emulator &
$adb pull /proc/config.gz
这时候adb工具会连接模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下。将其移动至kernel目录,解压该文件得
到config,将其重命名为.config,这样就可以跳过make config而直接得到Makefile所需要的内核配置文件。
$ gunzip config.gz
$ mv config .config

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

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

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


5.运行该镜像
$emulator -kernel ~/android/kernel/arch/arm/boot/zImage

更多相关文章

  1. Android系统编译―Android.mk文件的简单介绍
  2. 工(程师)欲善其事,必先利其(编译)器——《Android(安卓)Studio实战—
  3. Android快速调试方法
  4. 利用BLCR加快android的启动过程
  5. Android编译环境编译Native C的模块
  6. Mac OS X 编译Android内核源代码
  7. 浅谈Android与Linux系统的差异
  8. apk反编译
  9. 基于Android(安卓)Bionic 库动态编译busybox

随机推荐

  1. Android(安卓)JNI 调用
  2. android大分辨率问题
  3. Android(安卓)Framework系列之IPC(一)
  4. android 消息机制
  5. Android(安卓)JSBridge的原理与实现
  6. android 初探
  7. android实现底部菜单栏(FragmentTabHost)
  8. Android核心分析之GUI框架的原理
  9. 微软发布 mircosft remote desktop for a
  10. Android源码-Android系统启动源码分析