Android内核编译、裁剪与运行

来源:互联网 发布:软件服务费是什么意思 编辑:程序博客网 时间:2024/05/21 19:38

       上篇我对ARM版linux进行了编译与裁剪,下面将编译、裁剪Android内核,并在模拟器上运行编译后的系统。

       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

 

 

原创粉丝点击