Skip to content

#ASOP内核编译

查看手机信息

信息类型命令示例输出
设备型号adb shell getprop ro.product.modelPixel 6
设备品牌adb shell getprop ro.product.brandgoogle
设备制造商adb shell getprop ro.product.manufacturerGoogle
操作系统版本adb shell getprop ro.build.version.release14
硬件信息adb shell getprop ro.hardwareoriole
产品名称adb shell getprop ro.product.name
Build IDadb shell getprop ro.build.idUP1A.231005.007.A1
构建版本号adb shell getprop ro.build.version.incremental10762838
构建描述adb shell getprop ro.build.descriptionoriole-user 14 UP1A.231005.007.A1 10762838 release-keys
构建日期adb shell getprop ro.build.dateTue Sep 5 17:53:45 UTC 2023
内核版本uname -aLinux version 5.10.157-android13-4-00001-g5c7ff5dc7aac-ab10381520 (build-user@build-host) (Android (8508608, based on r450784e) clang version 14.0.7 (https://android.googlesource.com/toolchain/llvm-project 4c603efb0cca074e9238af8b4106c30add4418f6), LLD 14.0.7) #1 SMP PREEMPT Fri Jun 23 18:30:49 UTC 2023

根据build id 获取pixel系列手机对应的aosp分支

https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn

Build Id标记版本支持的设备安全补丁级别
SQ1D.220205.004android-12.0.0_r32Android12Pixel 6、Pixel 6 Pro2022-02-05

搜索build id获取驱动
https://developers.google.cn/android/drivers?hl=zh-cn

搜索 pixel6 + android 14 获取对应的刷机镜像
https://developers.google.cn/android/images?hl=zh-cn

检索Piexl6对应的内核版本代号
https://source.android.com/docs/setup/build/building-pixel-kernels?hl=zh-cn
https://source.android.com/docs/setup/build/building-pixel-kernels?hl=zh-cn#legacy-kernel-branches

检索GKI支持的分支
https://source.android.com/docs/setup/build/building-pixel-kernels?hl=zh-cn
检索GKI初始仓库
https://source.android.com/docs/core/architecture/kernel/gki-release-builds?hl=zh-cn

参数说明

手机:Pixel6
当前ROM:UP1A.231005.007.A1
目标GKI分支:android14-gs-pixel-6.1

Pixel 内核清单分支GKI 分支Android 平台 build
android14-gs-pixel-6.1android14-6.1UP1A.231005.007.A1 (10762838)

查看了下最新的 GKIandroid14-6.1
发布版TAG是 android14-6.1-2024-04_r3

以上参数可以通过下面链接获取

编译软件

sh
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

下载内核源码

sh
#下载源码切换到对应分支
mkdir pixel6_kernel && cd pixel6_kernel
repo init -u https://android.googlesource.com/kernel/manifest -b android14-gs-pixel-6.1
repo sync -c --no-tags

cd common
#查看下当前TAG
git describe --tags
#切换到android14-6.1-2024-04_r3
git checkout android14-6.1-2024-04_r3

提取厂商ramdisk

只有pixel6需要这步,其他手机请参阅android官方文档
pixel6a 的路径是 private/devices/google/bluejay/vendor_ramdisk-bluejay.img

sh
cd ~/pixel6_kernel
./tools/mkbootimg/unpack_bootimg.py --boot_img ~/pixel6_drivers/vendor_boot.img --out ~/pixel6_drivers/
cp ~/pixel6_drivers/vendor-ramdisk-by-name/ramdisk_ ~/pixel6_kernel/prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img

尝试编译

sh
tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

#提示编译完成
INFO: Build completed successfully, 515 total actions
INFO: Running command line: bazel-bin/private/google-modules/soc/gs/slider_dist
[dist] INFO: Copying to /home/kpa/pixel6_kernel/out/slider/dist

刷机说明

pixel6极容易变砖 原因是12版本之前爆出bootloader漏洞,刷入13会无法回退,如果回退会触发锁死机制
最好执行下列步骤
如果是12版本使用官方软件
https://flash.android.com/
刷入 UP1A.231005.007.A1 初始版本

下载对应版本的刷机包1
https://developers.google.com/android/images?hl=zh-cn#oriole
下载对应版本的OTA包1
https://developers.google.com/android/ota?hl=zh-cn

请校监SHA256 如果文件损坏,容易变砖 使用powershell的 Get-FileHash .\oriole-up1a.231005.007.a1-factory-79cdac9d.zip

sh
#解压**刷机包1**
#给另一个分区刷入bootloader
fastboot --slot=other flash bootloader bootloader-raven-slider-1.2-8739948.img
fastboot set_active other
fastboot reboot bootloader
fastboot set_active other
fastboot reboot bootloader
fastboot reboot

#给另一个分区刷入OTA 确保ab分区都有系统
#说明 sideload在具有ab分区的系统上,刷入的是备份区
#进入bootloader查看手机画面会显示当前分区,假如是b  sideload会刷入到a分区中,不需要自己切换
adb reboot sideload
adb devices
adb sideload oriole-ota-up1a.231005.007.a1-4f415808.zip
#刷入完成后重启,此时进入bootloader发现分区已经被切换到a了

刷机前关闭AVB2.0(可跳过)

https://www.cnblogs.com/schips/p/what_is_android_verified_boot.html
avb详细的介绍,笔者第一次不是双分区都有系统的情况下关闭成功了
后续升级了OTA,刷入vbmeta 文件提示损坏,无奈重新回滚了系统
后续在没关闭vbmeta的情况下 系统正常使用,可以略过

sh
adb reboot bootloader
fastboot oem disable-verification
fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img
#正常开机一次
adb shell getprop ro.boot.veritymode

还原avb只需要重新刷入即可 fastboot flash vbmeta vbmeta.img

刷入内核

sh
adb reboot bootloader
fastboot devices
fastboot oem disable-verification

#确保刷入镜像前 ab分区中的另一个可用,如果镜像是损坏的,手机极有可能无法恢复!
fastboot flash boot boot.img --skip-reboot
fastboot flash dtbo dtbo.img --skip-reboot
fastboot flash vendor_boot vendor_boot.img --skip-reboot
fastboot reboot fastboot
fastboot flash vendor_dlkm vendor_dlkm.img

#确认版本,写入成功
> adb shell
oriole:/ $ cat /proc/version
Linux version 6.1.75-android14-11-g235b7a813cef (build-user@build-host) (Android (10087095, +pgo, +bolt, +lto, -mlgo, based on r487747c) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362), LLD 17.0.2) #1 SMP PREEMPT Thu May  2 01:20:57 UTC 202

开启内核选项

sh
#清理下
tools/bazel clean
#配置内核选项,新版就一个命令,保存退出就可以了 命令格式抄的别人的,自行尝试
tools/bazel run //private/google-modules/soc/gs:slider_config -- menuconfig
#再次编译
tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

参考

https://bbs.kanxue.com/thread-274790.htmhttps://blog.seeflower.dev/archives/17/https://blog.arstercz.com/introduction_to_linux_dynamic_tracing/https://evilpan.com/2022/01/03/kernel-tracing/