首先切换到android源码所在目录/media/lizhangqu/Android/android_2_3_3
1. 使用GIT工具下载,执行以下命令:
mkdir kernel cd kernel git clone https://android.googlesource.com/kernel/goldfish.git
大约下载600M左右的东西后,在kernel目录下有一个goldfish目录,Linux内核代码就在这里了。
2. 下载完成后,可以查看下载的内核代码版本:
<span style="white-space:pre"> </span>cd goldfish git branch
*master
3. 上面得到的是主线上的内核源代码,现在我们需要适用于模拟器用的内核,因此,我们需要checkout goldfish版本:
USER-NAME@MACHINE-NAME:~/Android/kernel/common$ git branch -a
* (分离自 origin/android-goldfish-2.6.29) master remotes/origin/HEAD -> origin/master remotes/origin/android-3.10 remotes/origin/android-3.4 remotes/origin/android-goldfish-2.6.29 remotes/origin/android-goldfish-3.10 remotes/origin/android-goldfish-3.4 remotes/origin/linux-goldfish-3.0-wip remotes/origin/master
选择android-gldfish-2.6.29(当前载goldfish目录):
git checkout remotes/origin/archive/android-gldfish-2.6.29
三. 编译内核代码。
1. 导出交叉编译工具目录到$PATH环境变量中去:
同样是使用别名
alias export_kernal='export PATH=$PATH:/media/lizhangqu/Android/android_2_3_3/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin'
source ~/.bashrc
export_kernal
2. 修改goldfish目录下的Makefile文件的以下两行为(大约在200行左右):
# ARCH ?= (SUBARCH) # CROSS_COMPILE?=
ARCH ?= arm #体系结构为arm
CROSS_COMPILE ?= arm-eabi-
3. 开始编译:
当前在goldfish目录
make goldfish_defconfig
make
编译成功后,可看到下面两行:
OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready
四. 在模拟器中运行编译好的内核。
1.运行前添加环境变量(之前已添加别名)
export_android
2.指定内核文件启动模拟器:
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage &
4. 用adb工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核:
adb shel
这时候如果是第一次运行 adb shell命令,会看到以下输出,不用管它,再运行一次adb shell命令就可以了。
* daemon not running. starting it now on port 5037 * * daemon started successfully * error: device offline
切换到proc目录:
# cd proc # cat version Linux version 2.6.29-g4bb8fa0-dirty (lizhangqu@lizhangqu-Inspiron-3421) (gcc version 4.4.3 (GCC) ) #0 Fri Dec 12 11:03:28 CST 2014