android 15 源码分析【环境搭建: pixel6 编译kenrel 并烧录】
本文介绍如何 本地编译 对应的 pixel 6 的内核,用于日常开发,并烧录。
大致流程如下:

- 首先需要 adb root
- 同步内核源码
- 更新 vendor ramdisk
- 编译内核
- 烧录
1. 下载 内核源码
1.1 找到对应的 源码分支
| 设备 | AOSP 树中的二进制文件路径 | 仓库分支 | GKI 内核 |
|---|---|---|---|
| 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 内核 分支是 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
更多推荐


所有评论(0)