Android内核使用Android模拟器进行编译和testing

有没有人成功地编译了Android内核,并在Android模拟器中进行了testing,如果有的话,还有什么特别的事情需要完成?

SDK的文档非常好,但是编译内核和在模拟器中设置自定义计算机的文档很难find。

自2009年8月以来,内核不再是您在按照说明下载Android开源项目源代码时所获得的标准回购清单的一部分。 在仿真器上成功下载,构build和运行特定内核所需的步骤如下所示:

  • 通过将其添加到您的回购清单或手动运行,获取Android内核:
    git clone https://android.googlesource.com/kernel/goldfish.git
  • 检查正确的分支与模拟器工作,即金鱼:
    git checkout -t origin/android-goldfish-2.6.29 -b goldfish
  • 生成仿真器configuration(qemu仿真器运行arm代码,即armconfiguration):
    make ARCH=arm goldfish_defconfig
    • 如果这不起作用,请尝试make ARCH=arm goldfish_armv7_defconfig
  • 现在使用与开源项目一起分发的交叉编译工具来构build内核:
    make ARCH=arm CROSS_COMPILE=mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
  • 以这种方式构build的内核最终应该放在内核树的arch / arm / boot文件夹中(从git clone中放入代码)
  • 要使用内核运行模拟器,有两种select:将其复制到开源项目的预build内核文件夹以replace标准内核。 另一种select是使用内核选项集启动模拟器:
    emulator -kernel mydroid/kernel/common/arch/arm/boot/zImage

请注意,我已经在上面的描述中使用了默认path,您需要将它们更改为适用于您的设置的内容。 自从我上次testing以来已经有一段时间了,但我认为它应该起作用。

一些额外的信息:在标准的Android开源发行版中,内核在mydroid/prebuilt/android-arm/kernel文件夹中作为预先构build的二进制文件分发,不包括源代码。 由于两个原因,内核源码已从默认清单中删除。 其中之一就是平台组件需要大量的带宽和磁盘空间,大多数人都不太会用。 另一个原因是由于内核是使用内核构build系统构build的,而不是作为aosp构build系统的一部分,因此保持分离是有意义的。 内核的公共分支是仿真器使用的分支。 也有实验,MSM(高通平台)和Omap(TI平台)的分支,也许还有更多。 如果你想用硬件来使用Android内核,这些对你来说可能更有趣。

只是为了纠正BMB的一些post(这对我来说非常有用,它拯救了我的项目):

  • git clone git://android.git.kernel.org/kernel/common.git( 内核错过);
  • git checkout -t origin / android-goldfish-2.6.29 -b金鱼(相同);
  • 使ARCH =armgoldfish_defconfig(同上);
  • make ARCH = arm CROSS_COMPILE = mydroid / prebuilt / linux-x86 / toolchain / arm-eabi-4.2.1 / bin / arm-eabi-(同上)
  • emulator -avd my_avd -kernel mydroid / kernel / common / arch / arm / boot / zImage(这里我在命令中添加了一个avd ,没有为我工作)。

这是BMB和Arnaud LM答案的更新。
看来2011/03/03金鱼branchnames被改变了。 当检查出金鱼分支,使用这个:

 git checkout -t origin/archive/android-gldfish-2.6.29 -b goldfish 

注意android-gldfish-2.6.29中缺less的'o'!

希望这可以为别人节省时间。

从2012年开始,下载内核在source.google.com上有详细logging,但是我发现编译它花了几次尝试。 以下是我用来构buildARM模拟器内核的命令:

 cd /kernel/source/root make mrproper adb pull /proc/config.gz # from the emulator gunzip config mv config .config # now you have a (perhaps slightly outdated kernel .config) make ARCH=arm silentoldconfig # update the .config - take the defaults if prompted make ARCH=arm menuconfig # make any further changes time make -j4 ARCH=arm CROSS_COMPILE=/path/to/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- 2>&1 | tee ../../logs/$(date +%Y%m%d-%H%M)-make-kernel.log emulator -kernel /kernel/source/root/kernel/goldfish/arch/arm/boot/zImage -avd myAVD & 

感谢所有回答了这个问题的人 – 我能够从这个答案中得到点点滴滴。 阿蒙德的“你需要的AVD”是给我麻烦的最后一块。

这很容易。 按照http://source.android.com/download上的说明获取和编译整个android的源代码。; 这需要一段时间,但并不复杂。

通过构build它,你可以在<android>/out目录中输出。 除了ROM镜像,还包括一些工具,包括模拟器。 我的模拟器在<android>/out/host/linux-x86/bin/emulator 。 只要将一个名为ANDROID_PRODUCT_OUT的环境variables设置为<android>/out/target/product/generic ,然后在没有任何选项的情况下运行模拟器将运行您的编译ROM。

截至2012年5月,我发现你不能使用'goldfish_defconfig'编译内核。 你需要使用goldfish_armv7_defconfig'。 这可以解释为什么JonnyLambada从模拟器(用于预构build的内核)提取configuration的方法是有效的,并且是必要的。

goldfish_defconfig将内核configuration为在ARM 926处理器上运行,但仿真器configuration为作为Coretex A8(它是ARM V7 CPU)运行。 所以你需要使用新的defconfig,如果你想它工作(或从模拟器拉configuration)。

只是供参考。

我能够启动我编译的AOSP ROM的方式是复制编译为〜/ .android / avd / Froyo.avd /的system.img。但是,当我提取system.img并添加su的根版本和busybox,然后重新制作system.img,模拟器不启动。 我仍然试图找出那个部分:S