众所周知三星手机移除了所有fastboot指令,替换为了自家的odin,同时修改了Android固件格式为五件套(ap,bl,cp,csc,home-csc),这意味着几乎所有的刷机活动都依赖odin,也就是说几乎只能刷入官方和官改系统。然而得益于动态分区工程,也可以另辟蹊径解除这一限制。
原理
动态分区利用vfs将system,vendor和userdata合并为一个super分区,类似于WindowsPhone的存储池,好处是OTA无需修改分区表,加快速度并减少复杂度。但是传统的fastboot(在efiesp等分区中)不支持vfs,因此只能刷写整个super分区,要刷写逻辑分区,必须在recovery里面再做一个支持程序(也就是fastbootd模式),这也就是为什么treble机型刷机需要fastboot reboot fastboot的原因。
参考https://source.android.com/docs/core/architecture/bootloader/fastbootd?hl=zh-cn
Samsung的odin相当于fastboot的等价产物(事实上有帖子指出这玩意就是对fastboot的封装,不知道三星图啥,也许一开始是为了防私自刷机,问题是odin和netodin两大工具早就泄露满天飞了),也不支持vfs,三星的recovery自然也没有fastbootd的支持。
因此我们的思路很明确了,既然无法还原fastboot(除非源代码等资料泄露),那么对recovery动手找回fastbootd,在这里实现super子分区刷写也就实现了目的。也就是说我们只需要完成两件事
- 把fastbootd补回recovery
- 想办法增加一个进入fastbootd的入口,由于动不了abl,因此直接在rec菜单动手脚
准备工作
工具/原料
- 要操作的三星手机/平板一部(下文统称手机)
- 原装数据线一根
- Windows电脑一台
软件资料
- 三星usb驱动程序
- 高通fastboot通用驱动(针对qcom处理器机型)
- 要刷的类原生包,注意三星是aonly但systemasroot因此需要ab包
- odin刷机工具
- 原厂底包,建议samfw.com下载,和你手机上的版本一致就行(如果你不需要root,可以忽略这一步,但是为了便于救砖强烈建议准备好)
- 支持lz4和tar的解压压缩软件(推荐nanazip)
- adb工具
友情提示:刷机有风险,操作请三思!出现任何问题概不负责
解锁bootloader
警告!解锁会自动双清,请自行备份重要资料!
手机退出三星账号和谷歌账户。否则锁了后果自负
手机关机根据机型进入odin,新机型按住三个按键同时插入数据线就可,老机型自行百度。懒得按打开adb然后电脑输入adb reboot download即可。
在odin界面按照提示解锁,等双清完成。
root(不需要可以跳过)
找到原厂包解压得到ap,bl,cp,csc,home_csc五个文件,找一个安装了magisk的手机,将ap传进去按照提示修补。待刷手机进入odin刷入修好的ap,重启即可(先不用配置magisk反正还得刷)
修补rec(重头戏)
把ap解包,提取里面的recovery.img.lz4,继续解包得到recovery.img
找一个网盘把img传上去,要求可以无密码直链下载,推荐sourceforge,因为修补工作要借用github action完成。
GitHub fork这个仓库(当然你有Linux系统能在本地配置环境你可以试试本地运行)
https://github.com/Johx22/Patch-Recovery
找到actions,点击recovery模块点击run workflow,输入框选择你的网盘文件直链链接(必须是直链,对于sourceforge就是文件链接去掉/downlaod后缀)
运行完了下载下来,解压出来tar(如果不是tar,自己压缩一遍)
刷入rec
手机关机进入odin模式,ap选择修好的tar,刷入,重启,目前你看不到什么变化但是关键东西我们已经放进去了
进入fastbootd
手机关机,再开机的时候按住音量+和电源不放,提示确认风险按一下电源,然后再按住音量+和电源不放直到进入recovery。
按音量键找到enter fastboot,电源确认
(高通机型请注意)电脑安装高通通用驱动。
打开命令行输入fastboot devices确认手机连接
输入fastboot flash system <类原生镜像地址,注意是img文件>
等待完成,手机自动重启进入rec
双清,重启
享受你的新手机吧!