天天看點

編譯Android 的 linux核心,并用emulator指令啟動編譯好的linux核心準備工作編譯linux核心參考

準備工作

使用上一篇文章,編譯Android源碼,并用模拟器啟動編譯好的鏡像,可以在終端輸入 “emulator ” 指令啟動模拟器。

檢視emulator 指令預設使用的linux核心檔案。

輸入指令“emulator -verbose | grep kernel”,如下圖:

編譯Android 的 linux核心,并用emulator指令啟動編譯好的linux核心準備工作編譯linux核心參考

可以看出,linux核心是ranchu版本的。(我也不知道ranchu是什麼意思)

檢視Android模拟器使用的linux版本

輸入“adb shell”進入模拟器的終端;

編譯Android 的 linux核心,并用emulator指令啟動編譯好的linux核心準備工作編譯linux核心參考

可見,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

最重要的一句話是:

編譯Android 的 linux核心,并用emulator指令啟動編譯好的linux核心準備工作編譯linux核心參考

即輸入 “make help”,可以檢視目前支援的 config,如下圖:

編譯Android 的 linux核心,并用emulator指令啟動編譯好的linux核心準備工作編譯linux核心參考

這裡我們選擇“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)
           

編譯成功後,會輸出如下:

編譯Android 的 linux核心,并用emulator指令啟動編譯好的linux核心準備工作編譯linux核心參考

說明一下,kernel在x86_64目錄下也有,隻是x86_64目錄下的核心鏡像是個軟連結,連結在x86目錄下的。

emulator指令啟動編譯好的linux核心鏡像

輸入指令“emulator -kernel kernel/goldfish/arch/x86_64/boot/bzImage -show-kernel”,如下:

編譯Android 的 linux核心,并用emulator指令啟動編譯好的linux核心準備工作編譯linux核心參考

說明一下,“-show-kernel”表示:在終端視窗中顯示核心調試消息。

此時,模拟器正常啟動了。

參考

emulator指令詳解

繼續閱讀