更新时间: 2026-08-05 04:00(每日持续更新)
目标
- 内核: Linux 7.1.6 stable | 设备: OnePlus Ace 5 (PKG110, giulia-23851, SM8650)
- 里程碑: 内核启动 → 屏幕(AA577) → 触控(S3910)
版本记录 (Commit)
| 组件 |
版本/来源 |
指纹 |
| 内核 (主线) |
Linux 7.1.6 stable (tarball) |
SHA256 995dd7188d924662b94b48fd6fb783587267590e5b8bb33dade2c771e7d855c1 |
| 内核源码 |
/home/kb/pkg110_kernel_project/linux-7.1.6/ (本地修改) |
修改见下 |
| 设备树 |
arch/arm64/boot/dts/qcom/sm8650-oneplus-giulia.dts |
2026-08-05 02:20 最后修改 |
| 面板驱动 |
drivers/gpu/drm/panel/panel-boe-aa577.c |
2026-08-05 01:38 (初始版) |
| 调试代码 |
arch/arm64/kernel/early_marker.c (调试用) |
2026-08-05 03:23 |
| config fragment |
arch/arm64/configs/giulia.config |
含 VA_BITS=39/KASLR 实验残留 |
| 参考仓库 (vendor) |
OnePlusOSS/android_kernel_modules_and_devicetree_oneplus_sm8650, 分支 oneplus/sm8650_v_15.0.0_oneplus_ace5 |
commit b34aec49 (PKG110_15.0.0.860(CN01), QCOM TAG …017.100) |
注: 内核 git commit hash 未获取(无网络访问 git.kernel.org),用 tarball SHA256 作指纹。升级内核版本前先记录指纹。
设备/Bootloader 信息
| 项 |
值 |
来源 |
| 型号 |
PKG110 (OP5D2BL1) |
getprop |
| 固件 |
PKG110_16.0.7.200(CN01), Android 16 |
getprop |
| incremental |
V.50213d4-2c63a59-2c63a56 |
getprop |
| 运行内核 |
6.1.141-android14-11-o (KSU, 2026-04-10) |
uname |
| slot |
_a (ro.boot.slot_suffix) |
getprop |
| unlock |
unlocked:yes (fastboot getvar) |
fastboot |
| secure boot |
yes (bootloader 界面显示) |
用户观察 |
| hw-revision |
20000 |
fastboot |
| variant |
SM_ UFS |
fastboot |
| version-bootloader |
(空, OPPO 不提供) |
fastboot |
| version-baseband |
(空) |
fastboot |
| vbmeta |
空壳 (flags=0, alg=0, 无描述符) |
提取分析 |
| vbmeta.device_state (ro) |
locked (伪装值) |
getprop |
| ramoops |
0xbffdbf000, 0x240000 (record 0x40000, console 0x40000, pmsg 0x200000) |
dmesg/sysfs |
| 屏幕 |
BOE AA577-P-3-A0020 (cmdline 确认) |
/proc/cmdline |
| 触控 |
Synaptics S3910 @ spi4(a90000) irq162/reset161 |
/proc/cmdline+sysfs |
| WiFi |
WCN7850 (kiwi) |
固件已提取 |
实验记录 (EXP)
| # |
实验 |
修改 |
结果 |
| EXP001 |
fastboot boot v2 单文件 (os15.0.0) |
- |
Booting OKAY → 回 fastboot (后判定假 OKAY) |
| EXP002 |
flash v4 三镜像 (os15.0.0, 空 vendor ramdisk) |
三镜像 |
回 fastboot |
| EXP003 |
flash 原厂 boot/init_boot + 我们 vendor_boot |
vendor_boot |
回 fastboot (混淆: dtb 不匹配) |
| EXP004 |
flash 三镜像 (os14.0.0+ramoops+原厂lz4 vendor ramdisk) |
多改 |
回 fastboot ~5s |
| EXP005 |
flash 我们 boot + 原厂 init_boot/vendor_boot |
boot |
回 fastboot 4.85s, pstore 空 |
| EXP006 |
fastboot boot v2 (ramoops 内核) |
- |
Booting OKAY → 回 fastboot |
| EXP007 |
fastboot boot KSU 内核 v2 |
- |
Booting OKAY → 回 fastboot, pstore 空 → fastboot boot 路径不执行内核 |
| EXP008 |
flash 45MB padding KSU boot |
KSU Image+padding |
黑屏后正常启动 → 大小非限制 |
| EXP009 |
我们 Image 的 image_size 字段改 37.5MB |
Image 头 |
回 fastboot → 排除 image_size |
| EXP010 |
os_version 对齐 14.0.0/2026-05 |
header |
回 fastboot → 排除 |
| EXP011 |
Image.gz 压缩内核 |
kernel |
设备无响应 (gzip 可能不支持, 结果无效) |
| EXP012 |
v2 flash (kernel+ramdisk+dtb) |
- |
回 fastboot |
| EXP013 |
KSU pmsg 跨重启保留测试 |
- |
pmsg 重启后消失 → bootloader 清内存, marker 方案不可行 |
| EXP014 |
ramoops marker (early_memremap) |
内核 |
pstore 空 |
| EXP015 |
ramoops marker (phys_to_virt) |
内核 |
pstore 空 |
| EXP016 |
start_kernel 入口 SMC SYSTEM_OFF 探针 |
内核 |
回 fastboot (未关机) → 未到达 start_kernel |
| EXP017 |
head.S primary_entry SMC SYSTEM_OFF 探针 |
内核 |
USB 1s 消失 (关机) → 内核入口被执行! |
| EXP018 |
KASLR off (CONFIG_RANDOMIZE_BASE=n) |
config |
回 fastboot → 排除 |
| EXP019 |
VA_BITS 52→39 (对齐 GKI) |
config |
回 fastboot → 排除 |
| EXP020 |
__primary_switched 开头 SMC SYSTEM_OFF 探针 |
head.S |
已编译待测 (out/giulia_boot_exp20.img) |
启动执行流程图 (当前定位)
Bootloader (flash 启动路径, 不执行 fastboot boot 内存加载)
│ ✓ 加载并跳转 (EXP017 证明)
▼
primary_entry ──────────────── ✓ 已确认执行 (EXP017 SMC 生效→关机)
│
▼
record_mmu_state / preserve_boot_args
│
▼
__pi_create_init_idmap ─────── ? 未定位 (嫌疑区 ①)
│
▼
init_kernel_el / __cpu_setup ─ ? 未定位 (嫌疑区 ②)
│
▼
__primary_switch / __enable_mmu (KASLR 已排除)
│
▼
__primary_switched ─────────── ? 未定位
│
▼
start_kernel 入口 ──────────── ✗ 未达到 (EXP016)
│
▼
setup_arch → ... → initramfs ─ (未到达)
下一步 (按优先级)
- EXP020 待测:
__primary_switched 开头 SMC 探针 (out/giulia_boot_exp20.img)
- 关机 → 卡死在
__primary_switch 之后/start_kernel 前 (reloc/KASLR 相关) → 放更早探针 (__cpu_setup 后)
- 不关机 → 卡死在 primary_entry 内 (create_init_idmap / __cpu_setup) → 放 H2 探针
- 定位卡死区间后深挖 (页表建立 / TCR / reloc / 内存布局)
- 建议对比主线 7.1 head.S 与 GKI 6.1 (KSU Image 可反汇编) 的早期路径差异
- 恢复生产配置: 移除 head.S/early_marker 调试代码, VA_BITS 决定最终值
构建产物 (out/)
giulia_boot.img / giulia_init_boot.img / giulia_vendor_boot.img — v4 三镜像 (主测试)
- 实验变体:
*_nokaslr *_va39 *_h1 *_marker *_sd *_gz *_v2 ksu_* (对照)
stock/ — 原厂 KSU 三镜像备份 (设备当前状态)
firmware/ — kiwi(WCN7850)/lanai/GPU zap (已提取)
- 测试流程: flash 三镜像 → reboot → 观察 (关机/adb/fastboot) → 恢复 stock 三镜像
- 恢复命令:
fastboot flash boot/init_boot/vendor_boot out/stock/stock_*.img