本文只是自用笔记、备忘、…
解决思路
修改linux内核的rootfs的某个必然会被执行的脚本 以监控android启动进度
我自编译的LineageOS-19.1 内核启动正常、卡在LineageOS弧形图标(android门口)
由于我不太熟悉android源码,
因此最容易办法是 修改linux内核启动后的第一个进程之后的根文件系统rootfs中的某个必然会被执行的脚本,
在其中增加类似监控的脚本 并将结果日志写入sd卡文件,该脚本自身必须具备侦测当前启动阶段、确保自身只能有一份运行,
因为 android不能正常启动,所以无法从外部操作手机,而该监控脚本相当于是从外部操作手机的
失败记录
增加android服务失败(对android源码不熟悉)
试图增加android服务,
重新编译、手机启动到android卡住界面,
重启到fastboot、到twrp ,
twrp的adb查看手机sd卡中 vendor/myLogScript.sh
都没有 ,更不用说脚本运行了,
充分说明 对android源码不熟悉的问题, 应该修改linux内核的rootfs的某个必然会被执行的脚本 以监控android启动进度,更容易
https://github.com/LineageOS/android_system_core.git : /app4/lineage19_oneplus6/system/core
/app4/lineage19_oneplus6/system/core/libcutils/fs_config.cpp
/app4/lineage19_oneplus6/system/core/rootdir/init.rc
https://github.com/TheMuppets/proprietary_vendor_oneplus.git /sdm845-common: /app4/lineage19_oneplus6/vendor/oneplus/sdm845-common
/app4/lineage19_oneplus6/vendor/oneplus/sdm845-common/sdm845-common-vendor.mk
/app4/lineage19_oneplus6/vendor/oneplus/sdm845-common/myLogScript.sh
问题
1. oneplus6主板电路可能有不同版本
不充分的理由是 LineageOS官方OTA包(16.1, 17.1)在此oneplus6设备上启动变砖(应该是内核崩溃), 而LineageOS-17.1也应该有其存在用途(旧版电路主板的oneplus6)
- Lineage-17.1(android10) 启动变砖: 下载网页/lineage-17.1-20210420-nightly-enchilada-signed.zip
这说明 该OTA包中的vendor、设备树 可能是针对 前一期的oneplus6,
由此可知 一加厂商 销售的 oneplus6 的电路板 并不统一 可能存在后续更新,
因此才造成LineageOS-17.1中的旧设备树 在我这台oneplus6设备上 内核崩溃
2. LineageOS也并非全开源,其构建过程被其隐藏
OTA包LineageOS-19.1-nightly-enchilada.zip正常启动手机,但并未提供构建过程,
使用LineageOS19.1编译出的OTA包LineageOS-19.1-enchilada-UNOFFICIAL.zip内核启动正常但卡在android门口(LineageOS的弧形LOGO)
由此猜测 LineageOS的OTA的编译过程中有更多设置是隐藏的 不愿提供的
后续比对我编译的OTA包(内核正常启动、卡在android门口)和同版本LineageOS提供的正常OTA包, 会进一步验证此猜测
步骤
1. oneplus6线刷
oneplus6 线刷包(android9)
-
主 OnePlus6-brick-enchilada_22_K_52_210716_repack-HOS-10_0_11.zip/readme.md
-
备 enchilada_22_K.52_210716_repack–HOS-10.0.11.zip/readme.md
2. oneplus6手机root
oneplus6 APatch-root.md
Magisk不支持自定义/system/bin/su
路径?而APatch支持
3. 放弃oneplus官方伪开源,选择支持更多设备的LineageOS
既然 oneplus官方开源是伪的、毫无优势,那么何必拘泥于该厂商?不如选择支持更多这类设备的LineageOS
当然LineageOS也并非全开源,其构建过程也是自有隐藏的 见问题/2
oneplus官方伪开源 OnePlus Open Source Software,
oneplus官方明确声明自oneplus3t起, 不再发布linux内核设备树,
至此oneplus其实也只比小米等厂商多一个优势: 更容易解锁bootloader的优势而已
oneplus和小米等设备的 vendor驱动 、设备树 都只能 从其真机或已验证正常的OTA包中提取设备树
比如 vendor驱动仓库 OnePlusOSS/android_vendor_oneplus_SDM845.git 提供的是二进制文件
4. oneplus6正常刷入、正常启动的Lineage-OTA包LineageOS-[19.1,20.0,21.0].nightly-enchilada-signed.zip
既然LineageOS官方OTA包(16.1, 17.1)在此oneplus6设备上启动变砖(崩溃),那么我自己编译这两版本肯定也是结果相同的
因此 自己编译应该选择LineageOS(19.1,20.0,21.0),不要选择LineageOS(16.1, 17.1)
-
Lineage-16.1(android9) TODO
-
Lineage-17.1(android10) 启动变砖: 下载网页/lineage-17.1-20210420-nightly-enchilada-signed.zip
-
Lineage-18.1(android11) 启动变砖: 下载网页/lineage-18.1-20220421-nightly-enchilada-signed.zip
-
Lineage-19.1(android12) 正常进android: 下载网页/lineage-19.1-20221227-nightly-enchilada-signed.zip
-
Lineage-20.0(android13) 正常进android: 下载网页/lineage-20.0-20240214-nightly-enchilada-signed.zip
-
Lineage-21.0(android14) 正常进android: 下载页面/lineage-21.0-20241106-nightly-enchilada-signed.zip
-
Lineage-22.1(android15) TODO
参考1 oneplus6-lineage-ota.md
5. LineageOS-19.1 编译(启动内核崩溃)
sdm845(oneplus6)的启动漰溃ramdump被提交3e7f37解析-内核启动日志报错(空指针、Oops)
6. qualcomm的ramdump抓取(串口900E端口)
ramdump日志获取正常: sketch–qualcomm-QXDM-QPST-boot_stuck_log.md#qpst-get-ramdump-log
7. qualcomm的ramdump解析(linux内核启动控制台日志表明可能是vendor驱动错)
ramdump解析正常(拿到linux内核崩溃日志): lineage-17.1/ramdump-parse.md
8. LineageOS-19.1(官方)OTA包解开(payload.bin解包、system.img挂载、vendor.img挂载)与TheMuppets/proprietary_vendor_oneplus.git/sdm845-common
作文件列表md5sum比对(补全后者PRODUCT_COPY_FILES
少复制文件后,则我自编译19.1内核启动正常,但卡在LineageOS弧形图标即android门口)
vendor提取: lineage-17.1–otaExtractVendor-19.1-Official/vendor-extract/OTA-payload.bin-extract–oneplus6-LineageOS16.1.md
vendor比较:lineage-17.1–otaExtractVendor-19.1-Official/otaOfficialVentor-compare-to-TheMuppets----proprietary_vendor_oneplus-sdm845Common/compare.md
修复内核崩溃,
TheMuppets/proprietary_vendor_oneplus.git
不缺少文件,只是 编译过程 TheMuppets/proprietary_vendor_oneplus.git : vendor/oneplus/sdm845-common/sdm845-common-vendor.mk 的 PRODUCT_COPY_FILES
少复制了一些文件
9. LineageOS-19.1(官方)OTA包和我自编译OTA包 作 目录树扩展名统计比对(发现差异)
比较目录树扩展名统计结果文件 bcompare <(curl https://gitlab.com/oneplus6_enchilada/wiki/-/raw/dev/lineage-17.1--otaExtractVendor-19.1-Official/vendor-extract/Sys_imgMntD_tree_extendAggregate.txt) <(curl https://gitlab.com/oneplus6_enchilada/wiki/-/raw/dev/lineage-17.1--otaExtractVendor-19.1-My/vendor-extract/Sys_imgMntD_tree_extendAggregate.txt)
得到差异
OTA包/:payload.bin:/system.img:/system/apex/x.apex
: 我未展开 而 官展开
我自编译OTA包的比如com.android.adbd.apex是未展开的单独文件,
而官方OTA包的比如com.android.adbd是展开的目录
…更多差异待分析