iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 3
1

承襲上一篇的 AOSP 的下載及編譯,
因為 kernel 的部份在 AOSP 是預編好的檔案,
所以這次我們要來學習一下,
怎麼客製化我們 kernel 的部份.

  • Guide
    • 取得 Android 官方釋出的 Pixel XL (marlin) Kernel(Android 9.0/Pie)
    • 編譯核心 Linux Kernel
    • 嵌入 AOSP 映像檔編譯
    • 刷入Pixel XL 實機 (以下步驟對於其他Google Pixel系列手機也適用。)

一、取得 Android 官方釋出的 Pixel XL (marlin) Kernel

可以透過 這裡 查詢到版本

https://ithelp.ithome.com.tw/upload/images/20190918/20120515u5YYRIL7ml.png

查到 Pixel XL 是 android-msm-marlin-3.18-pie-qpr2

$ repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-marlin-3.18-pie-qpr2
$ repo sync -j8

取得原始碼後,在此原始碼根目錄下可以列出以下目錄及一個連結檔:

  • build => 編譯命令及環境設定腳本
  • build.config => 編譯設定組態檔
  • kernel => 內核測試工具
  • prebuilts => 內核編譯工具 (Cross Compiler/GCC)
  • prebuilts-master => 內核編譯工具 (Clang)
  • private => 內核原始碼
  • .repo => repo管理目錄

所以以前的 AOSP 內核編譯需要先把 AOSP 環境架設好,
然後內核的編譯才能「依附」其下。
現在的內核編譯採用了「自給自足」模式。

二、編譯核心 Linux Kernel

$ ./build/build.sh

執行完成後你會看到 Log 最後一行會出現,
Files copied to ~
就是輸出核心映像(Kernel Image)的位置,
到該目錄下,會看到我們要的 Image.lz4-dtb 檔案。
和其他有的沒的檔案,這邊就不附圖了。

三、嵌入 AOSP 映像檔編譯

你可以直接將out/android-msm-marlin-4.4/distImage.lz4-dtb
放到 AOSP 環境中的相對位置 device/google/marlin-kernel/ 後,
或是宣告一個環境變數 TARGET_PREBUILT_KERNEL 指向 out 這個位置,
再重新 re-build boot image 即可.

$ make bootimage

四、刷入Pixel XL 實機

Android提供「不刷機測試核心」的功能,好處就是如果改壞Kernel了,重開機後(一般是長按Power Key 15秒),就能回復原有的Kernel核心,這也降低了把手機刷壞的機率(理論上目前的手機要刷壞到無法重刷那也不容易)。不刷機直接從新編譯的核心開機命令如下,先將目錄轉換至核心輸出目錄,out/android-msm-marlin-4.4/dist,執行:

$ adb reboot bootloader
$ fastboot boot Image.lz4-dtb

之後就可以從 dmesg 看出 kernel 編譯的時間確認有燒錄成功。


Reference

Building Kernels | Android Open Source Project


上一篇
[Day-02] AOSP Pie 9.0 下載及編譯
下一篇
[Day-04] Android 架構解析 (1) Kernel & HAL
系列文
Android Pie 底層開發學習心得30

尚未有邦友留言

立即登入留言