如何编译Android AOSP内核并用Android仿真器进行测试?

如何编译Android AOSP内核并用Android仿真器进行测试?,android,android-emulator,emulation,android-source,Android,Android Emulator,Emulation,Android Source,是否有人成功编译了android内核并在android emulator中进行了测试,如果是的话,还有什么特别的事情需要做吗 SDK的文档非常优秀,但是编译内核和在模拟器中设置自定义机器的文档对我来说很难找到。这很容易。按照上的说明获取和编译整个android的源代码。这需要一段时间,但并不复杂 通过构建它,您将在/out目录中获得输出。除了ROM图像,还包括一系列工具,包括仿真器。我的模拟器位于/out/host/linux-x86/bin/emulator。只需将名为ANDROID\u PR

是否有人成功编译了android内核并在android emulator中进行了测试,如果是的话,还有什么特别的事情需要做吗


SDK的文档非常优秀,但是编译内核和在模拟器中设置自定义机器的文档对我来说很难找到。

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


通过构建它,您将在
/out
目录中获得输出。除了ROM图像,还包括一系列工具,包括仿真器。我的模拟器位于
/out/host/linux-x86/bin/emulator
。只需将名为
ANDROID\u PRODUCT\u OUT
的环境变量设置为
/OUT/target/PRODUCT/generic
,然后在没有任何选项的情况下运行emulator将运行编译后的ROM。

自2009年8月以来,内核不再是标准repo清单的一部分,您可以按照说明下载android开源项目的源代码。在emulator上成功下载、构建和运行特定内核所需的步骤如下:

  • 通过将Android内核添加到您的repo清单或通过运行以下命令手动获取Android内核:
    git克隆https://android.googlesource.com/kernel/goldfish.git
  • 检查使用仿真器的正确分支,即金鱼:
    git checkout-t origin/android-goldfish-2.6.29-b goldfish
  • 生成仿真器配置(qemu仿真器运行arm代码,即arm配置):
    make ARCH=arm goldfish\u defconfig
    • 如果不起作用,请尝试
      make ARCH=arm goldfish\u armv7\u defconfig
  • 现在,使用开源项目中分发的交叉编译工具构建内核:
    make ARCH=arm CROSS\u COMPILE=mydroid/prebuild/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
  • 以这种方式构建的内核应该最终位于内核树的arch/arm/boot文件夹中(您将git clone中的代码放在那里)
  • 要使用内核运行emulator,有两种选择,要么将其复制到开源项目的预构建内核文件夹,以替换标准内核。另一个选项是在设置内核选项的情况下启动仿真器:
    仿真器-内核mydroid/kernel/common/arch/arm/boot/zImage
请注意,我在上面的描述中使用了默认路径,您需要将它们更改为适用于您的设置的路径。自从上次我测试这个已经有一段时间了,但我认为它应该能工作

一些额外信息:
在标准的Android开源发行版中,内核作为预构建的二进制文件分发到
mydroid/prebuild/Android arm/kernel
文件夹中,不包括源代码。我认为内核源代码从默认清单中删除有两个原因。其一是,对于大多数人不会使用的平台组件,它需要大量的带宽和磁盘空间。另一个原因是,由于内核是使用内核构建系统构建的,而不是作为aosp构建系统的一部分构建的,因此将其分开是有意义的。内核的公共分支是模拟器使用的分支。此外,还有实验、msm(高通平台)和Omap(TI平台)等分支机构,或许还有更多分支机构。如果您想在硬件上使用Android内核,这些可能会让您更感兴趣。

请更正BMB帖子中的一些内容(这对我非常有用,它保存了我的项目):
  • git克隆git://android.git.kernel.org/kernel/common.git (内核丢失)
  • git checkout-t origin/android-goldfish-2.6.29-b goldfish(相同)
  • make ARCH=手臂金鱼_defconfig(idem)
  • make ARCH=arm CROSS\u COMPILE=mydroid/prebuild/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-(idem)
  • emulator-avd my_avd-kernel mydroid/kernel/common/arch/arm/boot/zImage(这里我在命令中添加了一个avd,没有它我就无法工作)


我能够启动我编译的AOSP rom的方法是复制编译到~/.android/avd/Froyo.avd的system.img/
但是,当我提取system.img并添加su和busybox的根版本,然后重新生成system.img时,仿真器不会启动。我仍在试图弄清楚这一部分:这是BMB和Arnaud LM答案的更新。
从2011年3月到2003年3月,金鱼科的名称似乎发生了变化。 在查看金鱼分支时,请使用以下命令:

git checkout -t origin/archive/android-gldfish-2.6.29 -b goldfish 
注意android-gldfish-2.6.29中缺少的“o”


希望这能为其他人节省时间。

从2012年起,source.google.com上已经有关于下载内核的详细文档,但是我发现编译它需要几次尝试。以下是我用来为ARM emulator构建内核的命令:

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 &

感谢所有回答这个问题的人——我能够用这个答案中的点点滴滴做到这一点。Amaund的《你需要AVD》是最后一篇给我带来麻烦的文章。

截至2012年5月,我发现你不能使用“goldfish_defconfig”来编译内核。您需要使用goldfish\u armv7\u defconfig'。这可以解释为什么JonnyLambada从仿真器中提取配置的方法(对于预构建的内核)是有效的,并且是必要的

goldfish_defconfig将内核配置为在ARM 926处理器上运行,但模拟器配置为作为Coretex A8(即ARM V7 CPU)运行。因此,如果您想让新的defconfig工作(或从仿真器中提取配置),则需要使用新的defconfig


仅供参考。

Ubuntu 17.10主机上的全自动安卓8.1 guest

# Download the source. Takes several minutes.
curl https://storage.googleapis.com/git-repo-downloads/repo >repo
chmod a+x repo
./repo init -b android-8.1.0_r1 --depth 1 -u https://android.googlesource.com/platform/manifest
./repo sync -c  -j $(($(nproc) - 2)) --no-tags --no-clone-bundle

# Do the actual build. Takes minutes / hours.
. build/envsetup.sh
lunch aosp_x86_64-eng
USE_CCACHE=1 CCACHE_DIR=ccache make -j $(($(nproc) - 2))

# Run the emulator.
emulator -show-kernel
out/
build目录占用大约90Gb,树的其余部分占用大约40Gb,例如
emulator -help
emulator -help-build-images
emulator -help-disk-images
emulator -verbose | grep 'emulator: argv'