最近在做android模拟器内核的编译遇到些许问题 ,在此记录.
内核下载: http://mirrors.ustc.edu.cn/aosp/kernel/goldfish.git git clone 下载后检出相应的版本即可. 因为我编译的AOSP版本为7.1.1.r10 所以 检出的内核版本 为goldfish-3.10
编译: AOSP选的是 aosp_x86_64-eng 来进行编译的. 那么内核通过执行 make help 命令 发现有已经配置好的选项 .经过测试 选择了 x86_64_ranchu_defconfig 配置. 依次执行命令:make x86_64_ranchu_defconfig 然后 make -j16 (我的电脑为8核 所以选择 j16 ) 来进行编译. 选择其它的配置编译我发现存在内核错误或直接挂掉的问题.
问题来了:通过运行 emulator -kernel kernel-path 发现模拟器一直在 启动界面 只显示 ANDROID 动画. 无法进入. 在论坛上发现 给出的解决方案 是通过 正常的 模拟器中提取内核配置文件来进行编译. 尝试后发现没有配置文件. 我查看正常的运行起来的模拟器版本是3.18+ 而我检出的goldfish版本是3.18 于是猜想是否为内核版本问题. 通过git 查看 选择了 1936fdfbfb14 分支 检出goldfish. 编译运行后 发现正常进入了 模拟器. 在设置中查看内核版本 也变成了 3.18+ 而不是3.18 .
编译方法. 写一个build.sh脚本文件将脚本文件放到goldfish根目录下面来进行内核的编译. 脚本文件内容如下:
export ARCH=x86
export SUBARCH=x86
export CROSS_COMPILE=x86_64-linux-android-
export PATH=/media/data/Source/aosp_8.1/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin:$PATH
make x86_64_ranchu_defconfig
make -j16
注意 PATH中 的路径指的是 aosp源码的中工具路径. 我编译的是x86 的架构各位可以自行更改架构以及路径.
终端中执行 sh build.sh 等待编译完成即可. 编译出的内核文件 就是 arch/x86/boot/bzImage 文件.