本指南提供逐步操作說明,說明如何下載、編譯及刷新自訂 Pixel 核心,以利開發。有了 GKI,現在可以獨立於 Android 平台版本之外更新核心。這些步驟僅適用於 Pixel 6 和後續機型。這是因為 Pixel 5 和舊版裝置需要更新 vendor
分割區的核心模組,而這取決於這些裝置的 Android 平台版本。GKI 支援的 Pixel 核心分支表格列出每個 GKI 支援的 Pixel 裝置的核心存放區資訊清單分支。如要瞭解 Pixel 5 和舊版核心資訊清單分支,請參閱「舊版 Pixel 核心」一節。
GKI 支援的 Pixel 核心分支
裝置 | AOSP 樹狀結構中的二進位檔路徑 | 存放區分支 | GKI 核心 |
---|---|---|---|
Pixel 9 Pro Fold (comet) | device/google/comet-kernels/6.1 | android-gs-comet-6.1-android15-qpr1 | android15-6.1 |
Pixel 9 (tokay) Pixel 9 Pro (caiman) Pixel 9 Pro XL (komodo) |
device/google/caimito-kernels/6.1 | android-gs-caimito-6.1-android15-qpr1 | android15-6.1 |
Pixel 8a (akita) | device/google/akita-kernels/5.15 | android-gs-akita-5.15-android15-qpr1 | android15-5.15 |
Pixel 8 (shiba) Pixel 8 Pro (husky) |
device/google/shusky-kernels/5.15 | android-gs-shusky-5.15-android15-qpr1 | android15-5.15 |
Pixel Fold (felix) | device/google/felix-kernels/5.10 | android-gs-felix-5.10-android15-qpr1 | android15-5.10 |
Pixel Tablet (tangorpro) | device/google/tangorpro-kernels/5.10 | android-gs-tangorpro-5.10-android15-qpr1 | android15-5.10 |
Pixel 7a (lynx) | device/google/lynx-kernels/5.10 | android-gs-lynx-5.10-android15-qpr1 | android15-5.10 |
Pixel 7 (panther) Pixel 7 Pro (cheetah) |
device/google/pantah-kernels/5.10 | android-gs-pantah-5.10-android15-qpr1 | android15-5.10 |
Pixel 6a (藍鳥) | device/google/bluejay-kernels/5.10 | android-gs-bluejay-5.10-android15-qpr1 | android15-5.10 |
Pixel 6 (oriole) Pixel 6 Pro (raven) |
device/google/raviole-kernels/5.10 | android-gs-raviole-5.10-android15-qpr1 | android15-5.10 |
除了工廠支援的核心外,Pixel 6 和 6 Pro 裝置僅支援在「支援的 Pixel 6/6 Pro Android 平台和核心組合」表格中列出的 Android 通用核心分支,用於 GKI 開發。由於 Android 平台 HAL 和 Pixel 核心驅動程式之間的供應商 UAPI 不同,因此表格會提供支援的建構組合。
支援的 Pixel 6/6 Pro Android 平台和核心組合
Pixel 核心資訊清單分支 | GKI 分支 | Android 平台版本 | aosp-main 支援服務? |
---|---|---|---|
gs-android-gs-raviole-mainline | android-mainline (v6.8) | AP1A.240505.004 (11583682) | 是 |
android14-gs-pixel-6.1 | android14-6.1 | AP1A.240505.004 (11583682) | 是 |
gs-android13-gs-raviole-5.15 | android13-5.15 | TQ1A.230205.002 (9471150) | 否 |
完成 Pixel 裝置準備
下列流程圖說明在 Pixel 6 以上裝置上更新核心的程序:
使用 flash.android.com 刷新裝置
- 前往 flash.android.com
- 根據支援的 Android 平台和核心組合,挑選 Android 版本。
- 選取下列選項:
- 抹除裝置資料
- 強制刷新所有分區
- 停用驗證功能
- 按下「Install build」按鈕,即可刷新裝置。
下載並編譯核心
同步處理核心存放區
執行下列指令下載核心原始碼。請參閱 Pixel KERNEL_MANIFEST_BRANCH 的支援的 Pixel 6/6 Pro Android 平台和核心組合表格。
repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags
更新供應商 RAM 磁碟
更新核心存放區中的 vendor_ramdisk-DEVICE.img
檔案,以符合在裝置上刷新的 Android 平台版本。您可以採取以下幾種做法。
方法 1) 從 Pixel 原廠映像檔中擷取供應商的 RAMDISK 映像檔。
請前往 https://developers.google.com/android/images 下載裝置支援的原廠映像檔。
擷取
vendor_boot.img
:- 以下指令以 Pixel 6 Pro AP1A.240505.004 為例。將 zip 檔案名稱替換為您下載的原始映像檔檔案名稱。
unzip raven-ap1a.240505.004-factory-9d783215.zip
cd raven-ap1a.240505.004
unzip image-raven-ap1a.240505.004.zip vendor_boot.img
解壓縮
vendor_boot.img
以取得供應商 RAM 磁碟。KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_out
將已解壓的
vendor-ramdisk-by-name/ramdisk_
檔案複製到 Pixel 核心存放區。裝置 DEVICE_RAMDISK_PATH Pixel 6 (oriole)
Pixel 6 Pro (raven)prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img Pixel 6a (藍鳥) private/devices/google/bluejay/vendor_ramdisk-bluejay.img cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \ KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
方法 2) 從本機建構的 Android 平台存放區複製 vendor_ramdisk
。
裝置 | DEVICE_RAMDISK_PATH |
---|---|
Pixel 6 (oriole) Pixel 6 Pro (raven) |
prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img |
Pixel 6a (藍鳥) | private/devices/google/bluejay/vendor_ramdisk-bluejay.img |
cp ANDROID_ROOT/out/target/product/DEVICE/vendor_ramdisk-debug.img \
KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH/vendor_ramdisk-DEVICE.img
編譯核心 (Kleaf)
在 Android 13 中,build.sh
指令碼已由名為 Kleaf 的新核心建構系統取代。如果裝置使用 android13-5.15
以上版本,則應使用 Kleaf 建構核心。
如果是搭載 android14
以上核心的 Pixel 6 和 6 Pro,請執行 Kleaf 建構指令:
tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist
如果是搭載 android13-5.15
核心的 Pixel 6 和 6 Pro,請執行 Kleaf 建構命令:
tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist
如要使用其他 Pixel 核心,請執行 KERNEL_REPO_ROOT
中的 build_DEVICE.sh
指令碼。在大多數情況下,DEVICE
必須是與「GKI 支援的 Pixel 核心分支」表格中「AOSP 樹狀結構中的二進位路徑」欄所使用的程式碼名稱相符的程式碼名稱。這可以是裝置的代號,例如「akita」(Pixel 8a),也可以是代表一組共用核心的相關裝置的代號,例如「caimito」,代表 Pixel 9 (tokay)、Pixel 9 Pro (caiman) 和 Pixel 9 Pro XL (komodo)。如果是 android14
和更早版本,請為 Pixel 6 和 Pixel 6 Pro 使用 build_slider.sh
,為 Pixel 7 和 Pixel 7 Pro 使用 build_cloudripper.sh
。
舉例來說,如要在分支 android-gs-raviole-5.10-android14
上為 Pixel 6 建構核心,請執行下列指令:
build_slider.sh
根據預設,build_DEVICE.sh
指令碼會使用預建的 GKI 核心,加快建構程序。如果您想修改核心核心,請改為設定環境變數 BUILD_AOSP_KERNEL=1
,以便從本機來源建構核心。
如要進一步瞭解核心建構系統及其自訂建構方式,請參閱 Kleaf - Building Android Kernels with Bazel。
刷新核心映像檔
注意:如果您尚未停用驗證功能,請先停用再閃記自訂核心。以下是執行這項操作的指令:fastboot oem disable-verification
警告:如果您在平台版本上刷新自訂核心,如果與新核心相關的安全性修補程式等級 (SPL) 降級,則可能需要清除裝置資料。 這項程序會清除所有個人資料。請務必先備份資料,再清除資料。fastboot -w
如要刷新核心映像檔,請針對裝置列出的每個核心分區執行 fastboot flash
指令。針對動態分割區,您必須先重新啟動至 fastbootd
模式,才能進行閃燈作業。
裝置 | 核心分割區 |
---|---|
Pixel 6
(oriole) Pixel 6 Pro (raven) Pixel 6a (bluejay) |
boot dtbo vendor_boot vendor_dlkm (動態分割區) |
Pixel 8 (shiba) Pixel 8 Pro (husky) Pixel Fold (felix) Pixel Tablet (tangorpro) Pixel 7a (lynx) Pixel 7 (panther) Pixel 7 Pro (cheetah) |
boot dtbo vendor_kernel_boot vendor_dlkm (動態分割區) system_dlkm (動態分割區) |
以下是 android-mainline
上 Pixel 6 的閃燈指令:
fastboot flash boot out/slider/dist/boot.img
fastboot flash dtbo out/slider/dist/dtbo.img
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img
您可以在 DIST_DIR 中找到核心映像檔。
核心分支 | DIST_DIR |
---|---|
5.10 版 | out/mixed/dist |
5.15 以上版本 | out/DEVICE/dist |
注意:如果您有序列式隨身碟,且想啟用序列式記錄,指令如下:從主機連線的範例指令: fastboot oem uart enable
fastboot oem uart config 3000000
screen -fn /dev/ttyUSB* 3000000
還原原廠映像檔
如要將裝置還原為出廠映像檔,可以使用 flash.android.com。
舊版 Pixel 核心
以下是舊版 Pixel 核心分支表格,提供 Pixel 5 和先前推出裝置的核心存放區分支。這些是 Google 鍵盤不支援的裝置。
舊版 Pixel 核心分支
裝置 | AOSP 樹狀結構中的二進位檔路徑 | 存放區分支 |
---|---|---|
Pixel 5a (barbet) Pixel 4a (5G) (bramble) Pixel 5 (redfin) |
device/google/redbull-kernel | android-msm-redbull-4.19-android14-qpr3 |
Pixel 4a (sunfish) | device/google/sunfish-kernel | android-msm-sunfish-4.14-android13-qpr3 |
Pixel 4 (火焰紅) Pixel 4 XL (珊瑚色) |
device/google/coral-kernel | android-msm-coral-4.14-android13 |
Pixel 3a (sargo) Pixel 3a XL (bonito) |
device/google/bonito-kernel | android-msm-bonito-4.9-android12L |
Pixel 3 (藍線) Pixel 3 XL (交叉陰影) |
device/google/crosshatch-kernel | android-msm-crosshatch-4.9-android12 |
Pixel 2 (walleye) Pixel 2 XL (taimen) |
device/google/wahoo-kernel | android-msm-wahoo-4.4-android10-qpr3 |
Pixel (sailfish) Pixel XL (marlin) |
device/google/marlin-kernel | android-msm-marlin-3.18-pie-qpr2 |