goldfish作为一个为模拟器打造的android内核,是对内核进行修改和测试的良好基础。而在qemu上跑x86自然是最快的。但google 提供的编译命令的例子是arm的,也不是goldfish. 自己瞎试了很久也google了一大圈,最后搞定了此问题和大家分享一下。
编译
编译goldfish 内核参考了文章 https://yaapb.wordpress.com/2012/09/23/how-to-compile-the-kernel-for-the-x86-emulator/ 需*
测试基于android-goldfish-3.4
基本步骤如下:
1. git clone https://android.googlesource.com/kernel/goldfish.git #较慢,较早的goldfish是qemu.git,没有试验过,貌似已经弃用
2. git checkout android-goldfish-3.4 #注意内核版本要和system.img版本对应, android4.1 是2.6.29, android4.1以后多是3.4, 3.10目前还较少,可能会用在android5.0以后
3.配置环境变量开始编译
$ export CROSS_COMPILE=${ANDROID_BUILD_TOP}/external/qemu/distrib/kernel-toolchain/android-kernel-toolchain-
$ export REAL_CROSS_COMPILE=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6/bin/i686-linux-android-
$ export ARCH=x86
$ export SUBARCH=x86
$ ${ANDROID_BUILD_TOP}/external/qemu/distrib/build-kernel.sh --arch=x86
注:这里的ANDROID_BUILD_TOP是android source tree的根目录。即使只下载external,prebuilts没有全部的源码树也可以通过编译。把ANDROID_BUILD_TOP指定到包含这两个目录的路径即可。
build完成后生成的bzImage位于arch/x86/boot/bzImage
模拟器测试
用模拟器测试需要安装sdk,另外因为我们只需要测试内核,其他东西如system.img, ramdisk.img直接用自带的模拟器的镜像文件就好,当然也自己build代码树产生
emulator64-x86 -debug init -kernel ~/kernel_android/goldfish/
emulator 在sdk安装目录的tools下, system.img 和ramdisk.img 使用了sdkmanager下载的API21x86镜像中的文件, avd是用emultor-manger创建出的一个Galaxy_Nexus