准备工作
使用上一篇文章,编译Android源码,并用模拟器启动编译好的镜像,可以在终端输入 “emulator ” 命令启动模拟器。
查看emulator 命令默认使用的linux内核文件。
输入命令“emulator -verbose | grep kernel”,如下图:
可以看出,linux内核是ranchu版本的。(我也不知道ranchu是什么意思)
查看Android模拟器使用的linux版本
输入“adb shell”进入模拟器的终端;
可见,linux的内核版本是4.4。
编译linux内核
(1)下载android 版本的 linux 内核。
mkdir kernel
cd kernel
git clone http://android.googlesource.com/kernel/goldfish.git
说明一下,为什么是“goldfish”呢? 谷歌针对Android系统提供了好几个版本,其中goldfish表示适用于模拟器平台。其中还有“msm”、“samsung”和“omap”等几个版本。(具体可以百度)。
(2)切换指定分支。
我当时使用的是“android-goldfish-4.4-dev”分支,与上面准备工作中查看的版本4.4一致。下面是切换以后的分支。
gs@aigo:~/nvme_1T/android9.0.0_35/kernel/goldfish$ git branch -a
* (HEAD detached at origin/android-goldfish-4.4-dev)
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-3.18
remotes/origin/android-4.14-q
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.10
remotes/origin/android-goldfish-3.10-k-dev
remotes/origin/android-goldfish-3.10-l-mr1-dev
remotes/origin/android-goldfish-3.10-m-dev
remotes/origin/android-goldfish-3.10-n-dev
remotes/origin/android-goldfish-3.18
remotes/origin/android-goldfish-3.18-dev
remotes/origin/android-goldfish-3.4
remotes/origin/android-goldfish-3.4-l-mr1-dev
remotes/origin/android-goldfish-4.14-dev
remotes/origin/android-goldfish-4.14-dev.120914098
remotes/origin/android-goldfish-4.14-dev.143174688
remotes/origin/android-goldfish-4.14-dev.150
remotes/origin/android-goldfish-4.14-dev.20190417
remotes/origin/android-goldfish-4.14-dev.backup
remotes/origin/android-goldfish-4.14-gchips
remotes/origin/android-goldfish-4.4-dev
remotes/origin/android-goldfish-4.9-dev
remotes/origin/android-goldfish-5.4-dev
remotes/origin/heads/for/android-goldfish-3.18-dev
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
gs@aigo:~/nvme_1T/android9.0.0_35/kernel/goldfish$
查看readme
最重要的一句话是:
即输入 “make help”,可以查看当前支持的 config,如下图:
这里我们选择“x86_64_ranchu_defconfig”,为什么是x86_64,是因为上一篇文章使用的也是x86_64。而为什么是“ranchu”,因为准备工作中查看默认的linux内核也是ranchu,(虽然我还是不清楚ranchu是啥意思)。
编译linux内核
make clean
make mrproper
make x86_64_ranchu_defconfig
make -j$(nproc --all)
编译成功后,会输出如下:
说明一下,kernel在x86_64目录下也有,只是x86_64目录下的内核镜像是个软链接,链接在x86目录下的。
emulator命令启动编译好的linux内核镜像
输入命令“emulator -kernel kernel/goldfish/arch/x86_64/boot/bzImage -show-kernel”,如下:
说明一下,“-show-kernel”表示:在终端窗口中显示内核调试消息。
此时,模拟器正常启动了。
参考