Android内核编译与裁剪

转:http://blog.csdn.net/zouliping123/article/details/8647845http://blog.csdn.net/bill_xiang/article/details/8644099

第一篇:

编译Android内核

可供选择的内核源码有很多版本:

[plain] view plain copy
  1. $ git clone https://android.googlesource.com/kernel/common.git
  2. $ git clone https://android.googlesource.com/kernel/exynos.git
  3. $ git clone https://android.googlesource.com/kernel/goldfish.git
  4. $ git clone https://android.googlesource.com/kernel/msm.git
  5. $ git clone https://android.googlesource.com/kernel/omap.git
  6. $ git clone https://android.googlesource.com/kernel/samsung.git
  7. $ git clone https://android.googlesource.com/kernel/tegra.git

goldfish这个project包含了适合于模拟器平台的源码;

msm这个project包含了适合于ADP1、ADP2、Nexus One、Nexus 4的源码,并且可以作为高通MSM芯片组开发定制内核工作的起始点;

omap这个project包含了适合于PandaBoard、Galaxy Nexus的源码,并且可以作为德州仪器OMAP芯片组内核开发定制工作的起始点;

samsung这个project包含了适合于Nexus S的源码,并且可以作为三星蜂鸟芯片组内核开发定制工作的起始点;

tegra这个project包含了适合于Xoom和Nexus 7的源码,并且可以作为英伟达图睿芯片组内核开发定制工作的起始点;

exynos这个project包含了适合与Nexus 10的源码,并且可以作为三星猎户座芯片组内核开发定制工作的起始点。

 

  1. 创建一个目录android,用来存放我们即将要下载的android源码。

   命令:$ mkdir android

  1. 进入上一步中建立好的目录android。

   命令:$ cd android

  1. 选择一个内核版本,使用git下载android的源码。我选择了goldfish版本,该版本是适用于模拟器平台的内核版本。

   命令:

   $ git clone https://android.googlesource.com/kernel/goldfish.git

   查看goldfish内核在git中的所有分支信息。

   命令:$ git branch -a

   选择适合的分支,下载goldfish真正的代码。

   命令:$ git branch android-goldfish-2.6.29

  1. 在编译android内核时,需要使用交叉编译器。选择工具链,使用git下载prebuilt工具链。

   命令:

   $ git clonehttps://android.googlesource.com/platform/prebuilt

  1. 将工具链的其bin路径添加到PATH中,确保工具链在环境变量中。

   命令:

   $ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

  6. 设置其他环境变量。

   命令:

   $ export ARCH=arm

   $ export SUBARCH=arm

   $ export CROSS_COMPILE=arm-eabi-

  1. 进入内核的目录中。

   命令:$ cd goldfish

  1. 编译内核源码。首先,设定编译时的默认配置文件,如果不这么做,可能会出现“找不到配置文件”错误。

   命令:$ make goldfish_defconfig


图1.执行make goldfish_defconfig命令

   执行完此条命令后,会在goldfish目录下生成一个.config文件。接着可直接编译。


图2.执行完上条命令,生成.config文件

   命令:$ make

图3.执行make命令

   执行完该命令后,会在“kernel/goldfish/arch/arm/boot/”目录下生成名为zImage的文件,大小为1.7M左右。

图4.执行完make命令,生成zImage文件

裁剪Android内核

   1. 为了使用makemenuconfig,需要安装ncurses。

    命令:$ sudo apt-get install ncurses-dev

   2. 进行内核配置,执行相应命令。

    命令:$ make menuconfig

   3. 进行内核裁剪。通过界面操作更改配置,以进行某些模块的裁剪。


图5.通过界面操作配置进行裁剪

   4. 编译裁剪之后的内核。生成新的zImage文件,大小约为995K。

    命令:$ make


图6.编译裁剪过的内核生成的zImage文件属性

   通过上述裁剪的过程,可以进行相关类似的操作,以裁剪不同的模块,满足不同的需要。编译裁剪之后的内核一般会发现其生成的zImage文件的大小会变小。

 

第二篇:

1、建立Android开发环境:

在Oracle官网下载jdk-7u15-linux-i586.tar.gz,复制到/usr文件夹下并解压:

cp./jdk-7u15-linux-i586.tar.gz /usr

tar zxvfjdk-7u15-linux-i586.tar.gz

这样便在/usr文件夹下生成一个jdk1.7.0_15文件夹

修改环境变量,在/etc/profile文件最后添加:

export JAVA_HOME=/usr/jdk1.7.0_15

export JRE_HOME=/usr/jdk1.7.0_15/jre

export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin

保存退出后执行source /etc/profile 使对/etc/profile的修改立即生效,

执行java –version命令,出现java版本信息说明建立好了Java开发环境

接着下载Android SDK(code.google.com/android/download_list.html),SDK中带有Android Emulator仿真器等工具,本文用:android-sdk_r21.1-linux.tgz,将其复制到/usr目录下并解压:

cpandroid-sdk_r21.1-linux.tgz /usr

tarzxvf android-sdk_r21.1-linux.tgz

这样便会在/usr 目录下产生一个文件夹android-sdk-linux,再次修改/etc/profile文件,在环境变量PATH后面增加/usr/android-sdk-linux/tools,用‘:‘与原有值分割:

接着运行命令android(即/usr/android-sdk-linux/tools下的android可执行文件)

会弹出Android SDK Manager图形窗口,选择安装一个Android版本的SDK Platform,我安装的是Android2.1,再安装Android SDK Tools和Android SDKPlatform-tools:

下载过程视网速不同长短不一,然后再菜单Tools里选择Manager AVDs…

在弹出的Android Virtual Device Manager中新建一个虚拟机,我创建的叫android2.1

创建完成后我们就可以通过emulator –avdandroid2.1命令来启动这个虚拟机

至此,android开发环境就搭建好了。

2、建立交叉编译环境:

下载交叉编译器arm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2(http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

选择ARM processors下的GUN/Linux Release

填写姓名、邮箱等信息后编译器会被发送到你的邮箱中(我使用qq邮箱没收到,使用gmail收到了)

复制arm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2到/usr目录下并解压缩:

cparm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 /usr

tar jxvfarm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

这样会在/usr目录下生成一个arm-2012.09文件夹,然后再次修改/etc/profile文件,在PATH中添加/usr/arm-2012.09/bin/


3、下载内核源码

下载Android内核源码linux-2.6.25-android-1.0_r1.tar.gz(http://android.googlecode.com/files/linux-2.6.25-android-1.0_r1.tar.gz

在用户目录下新建文件夹android,将linux-2.6.25-android-1.0_r1.tar.gz复制到android文件夹中并解压:

mkdirandroid

cplinux-2.6.25-android-1.0_r1.tar.gz ./android

cd./android

tar zxvflinux-2.6.25-android-1.0_r1.tar.gz

这样会在android文件夹中产生一个linux-2.6.25-android-1.0_r1文件夹,进入此文件夹,修改该文件夹中的Makefile,找到ARCH和CROSS_COMPILE的定义,改为:

ARCH ?= arm

CROSS_COMPILE ?= arm-none-linux-gnueabi-

4、编译内核源码

接下来就可以编译Android内核了,执行如下命令:

make goldfish_defconfig

make

其中make goldfish_defconfig指令的意思是将目录linux-2.6.25-android-1.0_r1/arch/arm/configs/下的goldfish_defconfig文件内的配置内容复制到linux-2.6.25-android-1.0_r1目录下的.config文件中,.config文件是一个隐藏文件。Goldfish是一种虚拟的ARM处理器,在Android的仿真环境中使用。Android模拟器通过运行它来运行arm926t指令集,由于我最后要使用模拟器运行编译好的内核,所以这里使用goldfish_defconfig配置文件

编译过程需要等待一段时间

编译好后会在linux-2.6.25-android-1.0_r1/arch/arm/boot文件夹下生成一个zImage文件,为1.3MB(1299168bytes):

5、运行

emulator–avd android2.1 –kernel ./arch/arm/boot/zImage

这里的–avdandroid2.1指定我们前面所创建的虚拟机名字,

–kernel./arch/arm/boot/zImage指定该虚拟机从我们所编译的内核启动,启动后在Setting的About Phone中可以看到内核版本Kernel version中billxiang@billxiang-VirtualBox即我在虚拟机中编译内核时的用户名

6、内核裁剪

接着对Android内核进行裁剪,裁剪比较麻烦,搞不好就启动不了了,这里我通过修改linux-2.6.25-android-1.0_r1/arch/arm/configs/下的goldfish_defconfig文件进行裁剪,打开goldfish_defconfig,找到CONFIG_GOLDFISH_TTY=y,将其注释掉:

这里的TTY是应该是指命令行终端,在Android中基本没有用处,所以我将其裁掉,

再次make goldfish_defconfig

make

这时新生成的zImage文件变成了1298216bytes,由于我裁剪的内容不多,所以编译后内核大小变化不大,但还是有所减小(如果将网络支持裁剪掉内核可以减小到几百K,但无法启动…)。

6、运行

emulator –avd android2.1 –kernel./arch/arm/boot/zImage

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值