前言
一加 11 之前的版本是可以在氢氧 OS 之间互相刷的,后来合并到 ColorOS 后,莫名增加了很多门槛。在大多数教程中都是基于 Windows 平台。其实要线刷系统思路很简单,就是从 payload.bin
中解压出 img
文件,然后通过 fastboot
刷进去即可。
准备工作
- 安装 adb
1
| brew install android-platform-tools
|
- 下载固件:从 XDA这篇文章中找到官方下载链,接,国内也有人做了分流。理论上来说都是安全的,如果有人修改了文件,签名验证应该过不了。
- CPH2583 = US = 美版
- CPH2573 = IN = 印度版
- CPH2581 = EU&PU = 欧版
提取 img
这里以 CPH2581
为例,解压 zip 文件到文件夹 oneplus12
中。目录结构如下,FTH
为手动创建,用于存放提取出来的 img
文件,flash-all.sh
为刷机脚本。以下所有操作都是在 oneplus12
文件夹中。
1 2 3 4 5 6
| ➜ ll .rwxr-xr-x@ 1.2k gythialy 22 May 11:16 flash-all.sh drwxr-xr-x - gythialy 22 May 11:42 FTH drwxr-xr-x@ - gythialy 22 May 10:04 META-INF .rw-r--r--@ 6.6G gythialy 1 Jan 2009 payload.bin .rw-r--r--@ 357 gythialy 1 Jan 2009 payload_properties.txt
|
提取工具为 payload-dumper-go,官方构建的二进制文件在 macOS ARM 平台会报错,所以下面基于 docker 镜像操作。镜像 latest
tag 基于 d0b0efee72be 构建。
1
| docker run -it --rm -v $PWD:/app/ -v $PWD/FTH:/FTH ghcr.io/gythialy/payload-dumper-go:latest -o /FTH /app/payload.bin
|
提取完成后的 FTH
文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| .rwxr-xr-x 279k gythialy 22 May 10:22 abl.img .rwxr-xr-x 336k gythialy 22 May 10:22 aop.img .rwxr-xr-x 29k gythialy 22 May 10:22 aop_config.img .rwxr-xr-x 1.4M gythialy 22 May 10:22 bluetooth.img .rwxr-xr-x 201M gythialy 22 May 10:21 boot.img .rwxr-xr-x 254k gythialy 22 May 10:22 cpucp.img .rwxr-xr-x 16k gythialy 22 May 10:22 cpucp_dtb.img .rwxr-xr-x 61k gythialy 22 May 10:22 devcfg.img .rwxr-xr-x 67M gythialy 22 May 10:22 dsp.img .rwxr-xr-x 25M gythialy 22 May 10:22 dtbo.img .rwxr-xr-x 1.0M gythialy 22 May 10:22 engineering_cdt.img .rwxr-xr-x 106k gythialy 22 May 10:22 featenabler.img .rwxr-xr-x 1.6M gythialy 22 May 10:22 hyp.img .rwxr-xr-x 98k gythialy 22 May 10:22 imagefv.img .rwxr-xr-x 8.4M gythialy 22 May 10:21 init_boot.img .rwxr-xr-x 426k gythialy 22 May 10:22 keymaster.img .rwxr-xr-x 302M gythialy 22 May 10:22 modem.img .rwxr-xr-x 908M gythialy 22 May 10:22 my_bigball.img .rwxr-xr-x 336k gythialy 22 May 10:22 my_carrier.img .rwxr-xr-x 336k gythialy 22 May 10:22 my_engineering.img .rwxr-xr-x 907M gythialy 22 May 10:23 my_heytap.img .rwxr-xr-x 360k gythialy 22 May 10:22 my_manifest.img .rwxr-xr-x 767M gythialy 22 May 10:22 my_product.img .rwxr-xr-x 721k gythialy 22 May 10:22 my_region.img .rwxr-xr-x 1.1G gythialy 22 May 10:22 my_stock.img .rwxr-xr-x 1.7G gythialy 22 May 10:22 odm.img .rwxr-xr-x 872k gythialy 22 May 10:22 oplus_sec.img .rwxr-xr-x 4.3M gythialy 22 May 10:22 oplusstanvbk.img .rwxr-xr-x 4.0M gythialy 22 May 10:21 product.img .rwxr-xr-x 61k gythialy 22 May 10:22 qupfw.img .rwxr-xr-x 105M gythialy 22 May 10:21 recovery.img .rwxr-xr-x 139k gythialy 22 May 10:22 shrm.img .rwxr-xr-x 15M gythialy 22 May 10:22 splash.img .rwxr-xr-x 649M gythialy 22 May 10:22 system.img .rwxr-xr-x 7.4M gythialy 22 May 10:21 system_dlkm.img .rwxr-xr-x 911M gythialy 22 May 10:22 system_ext.img .rwxr-xr-x 4.1M gythialy 22 May 10:22 tz.img .rwxr-xr-x 3.2M gythialy 22 May 10:22 uefi.img .rwxr-xr-x 201k gythialy 22 May 10:22 uefisecapp.img .rwxr-xr-x 8.2k gythialy 22 May 10:22 vbmeta.img .rwxr-xr-x 8.2k gythialy 22 May 10:21 vbmeta_system.img .rwxr-xr-x 4.1k gythialy 22 May 10:22 vbmeta_vendor.img .rwxr-xr-x 1.2G gythialy 22 May 10:22 vendor.img .rwxr-xr-x 201M gythialy 22 May 10:21 vendor_boot.img .rwxr-xr-x 30M gythialy 22 May 10:21 vendor_dlkm.img .rwxr-xr-x 1.1M gythialy 22 May 10:22 xbl.img .rwxr-xr-x 229k gythialy 22 May 10:22 xbl_config.img .rwxr-xr-x 877k gythialy 22 May 10:22 xbl_ramdump.img
|
flash-all.sh
会自动检查 FTH
目录中所有的 img
文件,并通过 fastboot
刷写。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #!/bin/bash
file=vendor_boot
if ! command -v fastboot &> /dev/null; then echo "fastboot not found." exit 1 fi
echo "************************ START FLASH ************************" echo "******************* REBOOT FASTBOOTD *******************" fastboot -aa fastboot reboot fastboot sleep 5
for img in FTH/*.img; do echo "flashing $img" fastboot flash "$(basename "$img" .img)" "$img" done
if [ -f FTH/$file.zip ]; then echo unzip -p FTH/$file.zip FTH/$file > FTH/$file.img echo "********************** FTH FLASHING **************************" fastboot flash $file FTH/$file.img echo "*********************** FASTBOOT AGAIN ***************************" rm -f FTH/$file.img fi
echo "**************************** FOMAT DATA ******************************" fastboot -w sleep 5
fastboot reboot bootloader sleep 5
fastboot flashing lock echo "Press the \"volume down\" button to \"lock the bootloader"
exit 0
|
刷机
解锁 OEM+Bootloader 锁
- 设置 -> 关于本机 -> 版本信息 -> 版本号敲几次进开发者
- 设置 -> 其他设置 -> 开发者选项 ->OEM 解锁和 USB 调试勾上
- 手机连电脑,允许 USB 调试
adb devices
能看看到设备
adb reboot bootloader
重启到 fastboot 模式
fastboot flashing unlock
,然后音量上下选 unlock
注:会清空所有数据,做好备份。
开始刷写
执行 ./flash-all.bash
即可。如果还想 root,把最后的 fastboot flashing lock
注释掉即可。
参考链接
- How to convert from ColorOS to Global ..US.. India On Chinese Oneplus 12
- 一加 OnePlus12
总结
网上有一些第三方提取的 img
文件,从安全角度考虑,建议从官方下载全量包,自行提取比较好。理论上来说,此步骤同样适合 Linux 平台。
---EOF---