本文介绍如何 本地编译 对应的 pixel 6 的内核,用于日常开发,并烧录。
大致流程如下:
在这里插入图片描述

  1. 首先需要 adb root
  2. 同步内核源码
  3. 更新 vendor ramdisk
  4. 编译内核
  5. 烧录

1. 下载 内核源码

1.1 找到对应的 源码分支

设备AOSP 树中的二进制文件路径仓库分支GKI 内核
Pixel 6 (oriole)
Pixel 6 Pro (raven)
device/google/raviole-kernels/5.10android-gs-raviole-5.10-android15-qpr1android15-5.10
  • 从表格里我们能知道, 对应的pixel 6 内核 分支是 android-gs-raviole-5.10-android15-qpr1

1.2 源码同步


mkdir android-gs-raviole-5.10-android15-qpr1

cd android-gs-raviole-5.10-android15-qpr1

repo init -u https://android.googlesource.com/kernel/manifest -b android-gs-raviole-5.10-android15-qpr1


repo sync -d -c --no-tags

2. 更新 vendor ramdisk

我们得益于 GKI,现在可以独立于 android 平台 build 的情况下更新我们的内核。 但是 Pixel 6/Pixel 6 Pro/Pixel 6a 在编译内核时需要先更新 内核仓库中的 vendor ramdisk. 如果不更新vendor_ramdisk ,使用内核仓库中默认的 vendor ramdisk 可能会和 pixel 6 对应的 Android build 不匹配, 导致设备因为 selinux 权限问题无法启动。

我们在之前的文章中介绍过如何编译烧录最新的 AOSP (android 15). 我们可以在aosp 编译的中间产物中找到 我们的 vendor_boot.img.

/home/leo/sda_1.6TB/android-15.0.0_r11/out/target/product/oriole/vendor_boot.img

2.1 获取 vendor ramdisk

从 vendor_boot.img 中 获取 vendor ramdisk.

out/target/product/oriole$ /home/leo/sda_1.6TB/android-gs-raviole-5.10-android15-qpr1/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img  --out vendor_boot_out

如下所示

leo@leo:~/sda_1.6TB/android-15.0.0_r11/out/target/product/oriole/vendor_boot_out$ tree
.
├── bootconfig
├── dtb
├── vendor_ramdisk
├── vendor_ramdisk00
├── vendor_ramdisk01
└── vendor-ramdisk-by-name
    ├── ramdisk_ -> ../vendor_ramdisk00
    └── ramdisk_dlkm -> ../vendor_ramdisk01


2.2 更新内核仓库中的 vendor ramdisk.

设备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
~/sda_1.6TB/android-15.0.0_r11/out/target/product/oriole/vendor_boot_out$ cp vendor-ramdisk-by-name/ramdisk_ /home/leo/sda_1.6TB/android-gs-raviole-5.10-android15-qpr1/prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img

3. 编译内核

export  BUILD_AOSP_KERNEL=1

./build_slider.sh

4.烧录

cd out/mixed/dist

adb reboot bootloader


fastboot flash boot        boot.img
fastboot flash dtbo        dtbo.img
fastboot flash vendor_boot vendor_boot.img

fastboot reboot fastboot

fastboot flash vendor_dlkm vendor_dlkm.img

烧录前:

oriole:/ # uname -a                                                           
Linux localhost 5.10.214-android13-4-00008-g62d26972ebb6-ab12324566 #1 SMP PREEMPT Mon Sep 2 13:24:39 UTC 2024 aarch64 Toybox

烧录后:

oriole:/ # uname -a                                                                                     
Linux localhost 5.10.214-android13-4 #1 SMP PREEMPT Fri Dec 13 08:19:35 UTC 2024 aarch64 Toybox

5. 本地烧录官方镜像

从如下 下载官方的 刷机包:
https://developers.google.cn/android/images#oriole

在这里插入图片描述

点击 Link 将下载 oriole-ap4a.250105.002.a1-factory-ac37771b.zip 文件

将其解压到本地:

cd /home/leo/sda_1.6TB/oriole-ap4a.250105.002.a1-factory-ac37771b/oriole-ap4a.250105.002.a1

# 直接运行该脚本进行烧录即可
./flash-all.sh 

在 flash 烧录时对 fastboot 版本有要求, 可以在如下地址中 下载最新的 fastboot 工具。
https://developer.android.com/tools/releases/platform-tools?hl=zh-cn

6. 参考:

https://source.android.google.cn/docs/setup/build/building-pixel-kernels?hl=zh-cn

更多推荐