编译并测试 android goldfish kernel x86

时间:2021-02-27 08:53:47

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/arch/x86/boot/bzImage -system ~/Android/Sdk/system-images/android-21/google_apis/x86/system.img -ramdisk ~/Android/Sdk/system-images/android-21/google_apis/x86/ramdisk.img -avd Galaxy_Nexus_API_21 


emulator 在sdk安装目录的tools下, system.img 和ramdisk.img 使用了sdkmanager下载的API21x86镜像中的文件, avd是用emultor-manger创建出的一个Galaxy_Nexus