和标准的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中onInterceptTouchEvent与onTouchEve
  2. android-studio使用cmake编译ffmpeg实践
  3. Android内核源码阅读---ashmem.c
  4. Android(安卓)Studio Mac下载安装使用教程
  5. mac下下载安装Android(安卓)Studio教程
  6. Android内核的简单分析
  7. Android编译详解之lunch命令
  8. Android(安卓)NDK编程入门
  9. Android自学笔记-7-Android中的junit

随机推荐

  1. PreferenceActivity、PreferenceFragment
  2. Python on Android
  3. Android关闭多个activity
  4. Android中文API —— VideoView
  5. android studio 3.1 Android Device Moni
  6. JS调用Java代码(Android)
  7. Android 上架应用市场整理
  8. 客制化android activity的title
  9. Android 4.0 的 GridLayout
  10. android 重点