本指南分步介绍了如何下载、编译和刷写用于开发的自定义 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 (bluejay) | 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 |
除了工厂支持的内核之外,出于 GKI 开发目的,Pixel 6 和 6 Pro 设备还在支持的 Pixel 6/6 Pro Android 平台和内核组合表中包含的 Android Common 内核分支上获得支持。由于 Android 平台 HAL 和 Pixel 内核驱动程序之间的供应商 UAPI 差异,该表提供了受支持的构建组合。
支持的 Pixel 6/6 Pro Android 平台和内核组合
Pixel 内核清单分支 | GKI 分支 | Android 平台版本 | aosp-main 支持? |
---|---|---|---|
gs-android-gs-raviole-mainline | android-mainline (v6.12) | BP11.241025.006 (12620009) | 是 |
android-gs-raviole-6.1-android15-qpr2-beta | android14-6.1 | BP11.241025.006 (12620009) | 是 |
gs-android13-gs-raviole-5.15 | android13-5.15 | TQ1A.230205.002 (9471150) | 否 |
准备您的 Pixel 设备
以下流程图描述了在 Pixel 6 及更高版本设备上更新内核的流程
使用 flash.android.com 刷写设备
- 导航到 flash.android.com
- 根据支持的 Android 平台和内核组合选择 Android 版本。
- 选择以下选项
- 擦除设备
- 强制刷写所有分区
- 停用验证
- 按下安装版本按钮以刷写设备。
下载并编译内核
同步内核代码库
运行以下命令以下载内核源代码。请参阅支持的 Pixel 6/6 Pro Android 平台和内核组合表,了解 Pixel KERNEL_MANIFEST_BRANCH。
repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags
更新供应商 ramdisk
更新内核代码库中的 vendor_ramdisk-DEVICE.img
文件,以匹配设备上刷写的 Android 平台版本。有几种选项可以更新 vendor_ramdisk-DEVICE.img
文件。如果您使用的是 Android 15 QPR2 (BP11.241025.006) 或更高版本,请使用选项 (1)。否则,请使用选项 (2)。
选项 1) 仅更新 vendor_boot 分区的 DTB 和 DLKM ramdisk 位
从 fastboot 版本 35.0.2-12583183 开始,您可以直接在
vendor_boot
分区上刷写 DTB 和 DLKM ramdisk。从 v35.0.2-12583183 工件下载并解压缩sdk-repo-HOST_OS-platform-tools-12583183.zip
到您的主机环境以供使用。按照刷写内核映像中的说明刷写 DTB 和
vendor_boot:dlkm
。选项 2) 从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
以获取供应商 ramdisk。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 (bluejay) private/devices/google/bluejay/vendor_ramdisk-bluejay.img cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \ KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
编译内核 (Kleaf)
在 Android 13 中,build.sh
脚本已替换为名为 Kleaf 的新内核构建系统。对于使用 android13-5.15
及更高版本的设备,应使用 Kleaf 构建内核。
对于使用 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 - 使用 Bazel 构建 Android 内核。
刷写内核映像
注意:如果您尚未停用验证,则需要在刷写自定义内核之前执行此操作。以下是执行此操作的命令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 (动态分区) |
对于 Pixel 6/6 Pro/6a,如果您跳过了更新供应商 ramdisk部分中的 vendor_ramdisk
下载,则使用以下命令更新 DTB 和 DLKM ramdisk,而不是刷写 vendor_boot.img
映像
fastboot flash --dtb out/DEVICE/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img
以下是 Pixel 6 在 android-mainline
上的刷写命令
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 |
---|---|
v5.10 | out/mixed/dist |
v5.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 及更早版本设备的内核代码库分支。这些是不支持 GKI 的设备。
旧版 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 (flame) Pixel 4 XL (coral) |
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 (blueline) Pixel 3 XL (crosshatch) |
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 |