刷机维护
一加 6T 刷机 Ubuntu Touch 主要流程和问题
本文档使用 MrDoc 发布
-
+
首页
一加 6T 刷机 Ubuntu Touch 主要流程和问题
> 本文记录在一加 6T 上进行系统级实验的完整技术路径。目标是从官方氧 OS 11 降级回氧 OS 9 底包,解锁分区结构,调整 system 分区容量,并实现系统层面的读写修改权限。 > 本文仅供技术研究用途,涉及底层操作前请务必完整备份。 ## 一、 前置条件 - 电脑已安装adb、fastboot等名称 - 电脑已安装一加/OPPO驱动 - 电脑已安装高通COM驱动 - 电脑已下载parted分区程序 - 电脑已下载编译unpackbootimg程序 相关资源: https://drive.google.com/drive/folders/1VysK-3ksMg6AXTcv-km3LWiNR9LA2ja7?usp=sharing ## 二、降级至氧 OS 9 底包 在一加 6T(代号 *fajita*)上,Android 10/11 分区布局已改为 A/B 动态结构,system 分区被拆分为 `system_a` 与 `system_b`,且大小受限。 要进行底层修改,推荐先**降级回氧 OS 9** 底包,该版本使用传统 GPT 分区表结构,便于直接操作 `system_a`。 ### 1. 下载 Oxygen OS 9 全量包 可通过官方或 XDA 提供的 `.zip` 全量线刷包,如: ``` OnePlus6TOxygen_34_OTA_015_all_1902222344_downgrade.zip ``` ### 2. 进入 Fastboot 模式并线刷底包 确保 bootloader 已解锁: ```bash adb reboot bootloader fastboot oem unlock ``` 再使用 `fastboot update` 线刷底包: ```bash fastboot update OnePlus6TOxygen_34_OTA_015_all_1902222344_downgrade.zip ``` 完成后系统将回到 Oxygen OS 9(Android 9.0)。 >进入系统后,需进入开发者模式,开启USB调试和OEM解锁功能 --- ## 二、进入临时 TWRP 环境 为了修改分区,需要一个具备完整 shell 的环境。 但直接刷入 TWRP 可能导致 A/B 不匹配,因此建议使用**临时引导方式**: ```bash # 该版本不会产生卡Logo问题 fastboot boot twrp-3.3.1-0-fajita.img ``` 此命令仅临时加载,不会覆盖原 boot 分区。 进入 TWRP 后,电脑终端通过 `adb shell`进入或手机直接进入终端执行命令即可。 ```bash # 将电脑上下载的parted程序推送到 TWRP的根目录下 adb push ./parted / adb shell ``` --- ## 三、查看与分析原始分区表 进入 shell 后: ```bash parted /dev/block/sda (parted) unit MB (parted) print ``` 输出示例: ``` Number Start End Size File system Name Flags 1 24.6kB 32.8kB 8192B ssd 2 32.8kB 33.6MB 33.6MB ext4 persist 3 33.6MB 34.6MB 1049kB misc 4 34.6MB 35.7MB 1049kB param 5 35.7MB 36.2MB 524kB keystore 6 36.2MB 36.7MB 524kB frp 7 36.7MB 305MB 268MB ext4 op2 8 305MB 316MB 10.5MB oem_dycnvbk 9 316MB 326MB 10.5MB oem_stanvbk 10 326MB 334MB 8290kB reserve1 11 334MB 351MB 16.6MB reserve2 12 351MB 352MB 524kB config 13 352MB 3350MB 2999MB ext2 system_a 14 3350MB 6349MB 2999MB system_b 15 6349MB 6454MB 105MB ext4 odm_a 16 6454MB 6559MB 105MB odm_b 17 6559MB 125GB 118GB ext4 userdata ``` 可以看到: * `system_a` / `system_b` 约 3GB,过小; * `userdata` 过大; * 分区 13–17 为可调整区域。 --- ## 四、删除与重建分区结构 我们目标是: **扩容 system_a / system_b,缩小 userdata。** > Ubuntu Touch 默认将system_a作为根分区,安装系统命令会导致根目录存储耗尽 ### 1. 删除旧分区 13–17 在 `parted` 中执行: ```bash (parted) rm 13 (parted) rm 14 (parted) rm 15 (parted) rm 16 (parted) rm 17 ``` ### 2. 查看可用空间 ```bash (parted) print free ``` 输出中会显示 “Free Space” 段约 110GB,可供重新划分。 ### 3. 重建分区并指定大小 ```bash (parted) mkpart system_a ext4 352 112992 # 新建 system_a 分区 103GB (parted) mkpart system_b ext4 112992 115991 # 新建 system_b 分区 3GB (parted) mkpart odm_a ext4 115991 116490 # 新建 odm_a 分区 (parted) mkpart odm_b ext4 116490 116989 # 新建 odm_b 分区 (parted) mkpart userdata ext4 116989 117989 # 新建 userdata 分区 6GB ``` ### 6. 格式化新分区 ```bash mke2fs -t ext4 /dev/block/sda13 mke2fs -t ext4 /dev/block/sda14 mke2fs -t ext4 /dev/block/sda15 mke2fs -t ext4 /dev/block/sda16 mke2fs -t ext4 /dev/block/sda17 ``` 确认系统分区格式为 ext4,以支持修改后挂载为 rw。 --- ## 五、修复文件系统与检查挂载 执行: ```bash e2fsck -f -y -v /dev/block/sda13 ``` 若显示 `clean` 状态,即文件系统无问题。 挂载测试: ```bash mount /dev/block/sda13 /mnt/system df -h /mnt/system ``` --- ## 六、定位并提取 boot_a 镜像 Android 的 `boot_a` 分区包含内核与 ramdisk,是实现系统可读写的关键。 通过以下命令可查找其路径: ```bash ls -l /dev/block/by-name/ | grep boot ``` 通常输出为: ``` boot_a -> /dev/block/sde11 ``` 提取镜像到可写目录: ```bash dd if=/dev/block/sda8 of=/boot_a.img ``` 再通过 `adb pull` 拉取: ```bash adb pull /boot_a.img . ``` --- ## 七、解包 boot.img 并修改 ramdisk 使用 `unpackbootimg` 工具: ```bash mkdir pack ./unpackbootimg -i boot_a.img -o pack ``` > 注意解包得到的cmdline行内容,打包需带入 得到文件: ``` boot_a.img-zImage boot_a.img-ramdisk.gz boot_a.img-cmdline ... ``` ### 1. 解压 ramdisk ```bash mkdir ramdisk cd ramdisk gzip -dc ../boot_a.img-ramdisk.gz | cpio -i ``` 修改脚本文件: ``` vi scripts/halium ``` 找到类似行: ```bash echo "/dev/root / rootfs defaults,ro 0 0" >> $FSTAB ``` 改为: ```bash echo "/dev/root / rootfs defaults,rw 0 0" >> $FSTAB ``` 这样系统启动后根文件系统即为可读写模式。 --- ## 八、重新打包 boot.img 压缩回 ramdisk: ```bash find . | cpio -o -H newc | gzip > ../boot_a.img-ramdisk-new.gz ``` 重新打包: ```bash ../mkbootimg \ --kernel boot_a.img-zImage \ --ramdisk pack/boot_a.img-ramdisk-new.gz \ --cmdline "androidboot.hardware=qcom androidboot.console=ttyMSM0 video=vfb:640x400,bpp=32,memsize=3072000 msm_rtb.filter=0x237 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 service_locator.enable=1 swiotlb=2048 androidboot.configfs=true androidboot.usbcontroller=a600000.dwc3 firmware_class.path=/vendor/firmware_mnt/image loop.max_part=7 console=tty0 selinux=0 apparmor=1 security=apparmor systempart=/dev/disk/by-partlabel/system" \ --base 0x00000000 \ --pagesize 4096 \ --kernel_offset 0x00008000 \ --ramdisk_offset 0x01000000 \ --second_offset 0x00f00000 \ --tags_offset 0x00000100 \ --os_version 9.0.0 \ --os_patch_level 2018-12 \ --hash sha1 \ -o ../boot_new.img ``` --- ## 九、刷入修改后的 boot 并验证 进入 fastboot: ```bash adb reboot bootloader fastboot flash boot_a boot_a-new.img fastboot reboot ``` 启动后验证是否可写: ```bash mount | grep rootfs ``` 如果输出中包含 `rw`,说明系统已可读写。 ## 十一、其他扩展事项 修改镜像源 ```bash vi /etc/apt/sources.list :%s/ports.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g ``` ## 十二、总结与注意事项 | 环节 | 关键命令 | 说明 | | ------- | ------------------------ | ------------------------- | | 降级底包 | `fastboot update` | 确保使用 Android 9 GPT 结构 | | TWRP 引导 | `fastboot boot` | 避免永久替换 boot | | 分区操作 | `parted` / `mke2fs` | 精确控制 system 与 userdata 大小 | | Boot 解包 | `unpackbootimg` / `cpio` | 修改系统挂载模式 | | Boot 回封 | `mkbootimg` | 恢复为可刷入镜像 | | 最终验证 | `mount` | 检查是否成功变为 rw | --- ## 结语 通过以上过程实现如下功能: - 1、一加 6T 的 system 分区从 3GB 扩容至 103GB - 2、系统成功实现默认可写。 该方案验证了旧 GPT 模式下手动重建分区、定制 boot.img 的可行性。 > ⚠️ 建议保留原始 boot.img 与 GPT 备份,任何写入错误均可能导致设备无法启动。 > 推荐结合 `fastboot getvar all` 与 `parted print` 输出记录,以便随时恢复。
Nathan
2025年10月14日 11:04
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文件
Docx文件
分享
链接
类型
密码
更新密码