準備工作
使用上一篇文章,編譯Android源碼,并用模拟器啟動編譯好的鏡像,可以在終端輸入 “emulator ” 指令啟動模拟器。
檢視emulator 指令預設使用的linux核心檔案。
輸入指令“emulator -verbose | grep kernel”,如下圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3QjM2ITMwEDMzAjNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
可以看出,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一緻。下面是切換以後的分支。
[email protected]o:~/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
[email protected]:~/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”表示:在終端視窗中顯示核心調試消息。
此時,模拟器正常啟動了。
參考
emulator指令詳解