#ASOP内核编译
查看手机信息
信息类型 | 命令 | 示例输出 |
---|---|---|
设备型号 | adb shell getprop ro.product.model | Pixel 6 |
设备品牌 | adb shell getprop ro.product.brand | |
设备制造商 | adb shell getprop ro.product.manufacturer | |
操作系统版本 | adb shell getprop ro.build.version.release | 14 |
硬件信息 | adb shell getprop ro.hardware | oriole |
产品名称 | adb shell getprop ro.product.name | |
Build ID | adb shell getprop ro.build.id | UP1A.231005.007.A1 |
构建版本号 | adb shell getprop ro.build.version.incremental | 10762838 |
构建描述 | adb shell getprop ro.build.description | oriole-user 14 UP1A.231005.007.A1 10762838 release-keys |
构建日期 | adb shell getprop ro.build.date | Tue Sep 5 17:53:45 UTC 2023 |
内核版本 | uname -a | Linux 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.004 | android-12.0.0_r32 | Android12 | Pixel 6、Pixel 6 Pro | 2022-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.1 | android14-6.1 | UP1A.231005.007.A1 (10762838) |
查看了下最新的 GKIandroid14-6.1
发布版TAG是 android14-6.1-2024-04_r3
以上参数可以通过下面链接获取
- https://source.android.com/docs/setup/build/building-pixel-kernels?hl=zh-cn
- https://source.android.com/docs/core/architecture/kernel/gki-android14-6_1-release-builds?hl=zh-cn
编译软件
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
下载内核源码
#下载源码切换到对应分支
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
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
尝试编译
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
#解压**刷机包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的情况下 系统正常使用,可以略过
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
刷入内核
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
开启内核选项
#清理下
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/