小米 MIX2S ③ 系统共存操作方案

您所在的位置:网站首页 mix2s出厂系统 小米 MIX2S ③ 系统共存操作方案

小米 MIX2S ③ 系统共存操作方案

2022-11-29 03:48| 来源: 网络整理| 查看: 265

使用本篇教程建议先阅读我前两篇的教程,分别是安装 Windows 11 + MIUI 双系统

为什么还要安装第三个操作系统?不够用吗?并不是的,只是为了懒。

由于这个手机本来就是几年前的手机,从海鲜市场购置到的。8GB RAM + 256 ROM

可玩性比较高,有点像当年的 HTC HD2 刷机王。

三系统的意义?

由于在使用 Recovery 进行备份时可能会产生 data 加密解密的问题,造成无法正确还原,或者进行刷机的时候,不同的系统刷来刷去的会导致未知问题产生。

如何安装第三个系统?

主要逻辑还是为 system data vendor 这三个分区改名

进入 Recovery 使用 adb shell 操作 parted

adb shell blkid // 分别查看 system userdata vendor 位于哪个设备块 // 运行后可得知 sda 与 sde 两个存储设备。我们来操作这两个即可// 将 parted 推送到 /sbin 准备运行 adb push parted /sbin/parted adb shell chmod a+x /sbin/parted umount /data umount /sdcard // 卸载 userdata 分区挂载 // 访问 sde 存储器 /sbin/parted /dev/block/sde P // 打印出来所有分区信息rm 25 // 删除编号 25 的分区 // 分别建立下面四个分区 mkpart miuiData ext4 START END mkpart system ext2 START END mkpart vendor ext2 START END mkpart userdata ext4 START END // 注意 START 与 END 为分区大小的定义,根据自己的喜好来设定 // 然后就是将现存的分区改成其他名字,这里改成了 miuiData miuiSystem miuiVendor quit // 退出当前访问的存储器 /sbin/parted /dev/block/sde // 访问 sde 存储器 name 47 miuiVendor name 48 miuiSystem // 将分区编号 47 与 48 分别重命名

最终我们得到了三个新的分区 userdata, system, vendor

原先的三个分区依然存在,没有变化,只是名字被重命名为了 miuiData; miuiSystem; miuiVendor

此时只需要在 Recovery 中格式化 data 分区即可安装新的 ROM(如果遇到错误,重启下 Recovery)

还原到 MIUI 系统

原理就是再次使用 parted 将当前的分区 userdata, system, vendor 改名,改成任何都行,例如改为

userdataBAK, systemBAK, vendorBAK

然后再把 miuiData; miuiSystem; miuiVendor 分别改回来 userdata, system, vendor

还原一下 boot 重启即可完成 MIUI 系统还原,相比备份,还原来得更快,而且更简单,过程耗费更少的时间

现在尝鲜刷了一个移植的 originOS 系统,但是主要目的就是体验下就行。不打算长期使用。只需要改下名字即可还原到原来的 MIUI 系统。日后若有更好玩的系统,只需要再次改回来,重新刷一下 ROM 即可

缺点

如果你的 MIX2S 是 64GB 的那么这个方案很难实现,内存小的不太好操作。

一键切换

手动更换系统会比较麻烦,要是一不小心弄错了,就会导致分区表错误,因为操作分区表删除,更名是比较危险的行为,一旦发生错误,将无法启动,会变砖头,只能通过高通的 EDL 9008 模式重新还原原始分区表。

因此我们可以通过制作一个刷机包,刷机包将会自动运行更名的代码,使错误降低。

确保分区都已经准备好,我们找到任意刷机包,将其改装为仅运行 shell 命令的即可

如何改装?

定位到刷机包里的 updater-script 使用合适的代码编辑器,例如 Notepad++ 编辑该文件,删除所有内容。然后输入下面的注释行,保存即可

# dummy file

复制 updater-script 并将其更名为 update-binary 继续使用代码编辑器编辑

下面的代码目的就是使用 sgdisk 分区工具将位于 /dev/block/sda 设备的 21, 23, 29, 28 四个分区分别更名为 boot, vendor, system, userdata 来实现切换到第二个系统的功能

#!/sbin/sh OUTFD=$2 ZIP=$3 SDAPATH="/dev/block/sda" SDEPATH="/dev/block/sde" SGDISKBIN="/tmp/krtmp/sgdisk" mkdir /tmp/krtmp cd /tmp/krtmp unzip -o "$ZIP" chmod 0755 $SGDISKBIN # unmount data umount /data && umount /sdcard # Change SDA partitions 2 major boot $SGDISKBIN --change-name=21:boot $SDAPATH $SGDISKBIN --change-name=23:vendor $SDAPATH $SGDISKBIN --change-name=29:system $SDAPATH # Change SDE partitions 2 secondary $SGDISKBIN --change-name=45:2nd-boot $SDEPATH $SGDISKBIN --change-name=47:2nd-vendor $SDEPATH $SGDISKBIN --change-name=48:2nd-system $SDEPATH # switch userdata partitions's name $SGDISKBIN --change-name=28:userdata $SDAPATH $SGDISKBIN --change-name=22:2nd-data $SDAPATH sleep 2 #reboot recovery exit 0

接下来就是复制这些代码,派生出切换到 MIUI 系统的代码,很简单,就是分区编号互换一下即可。大致原理和思路就是这样的(这样做的目的仅仅是解决懒。不建议小白操作,过程和逻辑较为复杂)

#!/sbin/sh OUTFD=$2 ZIP=$3 SDAPATH="/dev/block/sda" SDEPATH="/dev/block/sde" SGDISKBIN="/tmp/krtmp/sgdisk" mkdir /tmp/krtmp cd /tmp/krtmp unzip -o "$ZIP" chmod 0755 $SGDISKBIN # unmount data umount /data && umount /sdcard # Change SDA partitions 2 secondary $SGDISKBIN --change-name=21:2nd-boot $SDAPATH $SGDISKBIN --change-name=23:2nd-vendor $SDAPATH $SGDISKBIN --change-name=29:2nd-system $SDAPATH # Change SDE partitions 2 major boot $SGDISKBIN --change-name=45:boot $SDEPATH $SGDISKBIN --change-name=47:vendor $SDEPATH $SGDISKBIN --change-name=48:system $SDEPATH # switch userdata partitions's name $SGDISKBIN --change-name=28:2nd-data $SDAPATH $SGDISKBIN --change-name=22:userdata $SDAPATH sleep 2 #reboot recovery exit 0

至于分区的编号如何获得?使用 parted 列出来即可,根据自己的编号来设置

在最后就是把脚本打包到刷机包里,最关键的是还需要 sgdisk 二进制文件

通过实测,切换后重启并不能顺利启动系统,猜测这是因为还有其他分区的文件不能共用,因此无法顺利启动。要解决这个问题,只需要进入 Recovery 直接卡刷一下原系统的 zip 包即可。这样其他分区的即可得到更新。最后顺利启动。

修改刷机脚本

由于每次切换系统都需要刷一次原包,而我们已经实现了 system 和 vendor 分区的无损转换,因此我们可以将刷机包里的 system 与 vendor 的分区刷写去掉,因为这是没有必要的。可以节省大量的时间!

使用 7z 打开刷机包,找到 update-script 并使用 Notepad++ 编辑器进行编辑

注释或者删除掉与 system 和 vendor 有关的更新代码,然后将脚本更新到刷机包里

删除 system 与 vendor 的镜像文件,缩减刷机包的体积

删除后

其他类型 AOSP 刷机脚本注释掉的示例



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3