Fari

手机刷机相关知识

recovery/bootloader/fastboot关系

recovery和android一样,是手机上的两个独立系统(理解为电脑装了双系统)。手机启动时是可以选择启动哪一个的,默认是android

类比于电脑的PE系统,可以对android系统进行刷机、升级、备份等操作

例如,你可以提前在手机上下载好新的android系统,通过进入recovery模式安装该新系统,即卡刷

因为Google官方的recovery系统不好用,所以有人开发出第三方的twrp recovery

bootloader是连接系统和硬件的桥梁,类似bios,主板上电之后,首先bl会启动先初始化硬件并做映射,然后才会启动系统。相当于android或recovery的爸爸

现在的很多手机为了防止刷其他的系统,就会在bootloader上加锁,所以刷系统前需要解锁bootloader。

fastboot可以理解为手机的一个运行模式或一个接口,通过它你就可以直接向bootloader发出指令,例如,当你的手机运行于fastboot模式下,将手机连接电脑,并在电脑上下载android或者recovery的镜像,然后通过命令让bl安装该镜像,即线刷

OTA:空中升级,即直接通过无线网下载镜像进行升级,而不用线刷或卡刷

OEM:bootloader的开关,只有打开这个开关才能解锁bootloader

bootloader/BIOS/UEFI/Legacy

计算机的硬件千差万别,甚至于你可以自己动手组装一部手机或者一台电脑。为了让操作系统能够兼容各种机器,操作系统只能使用虚拟硬件(类似于java内存模型)。在x86架构中,这种用于抽象出虚拟硬件的东西叫做BIOS,在arm架构中就叫做bootloader。

UEFI和Legacy就是两种不同的BIOS(都是指x86下的),可以说,UEFI是新一代的BIOS,传统BIOS统称Legacy。事实上,UEFI只是一个规范,具体的实现得看厂商(类似于jvm规范)。

可以简单理解为:Legacy需要根据不同的硬件进行汇编开发,而UEFI则使用统一的c语言接口,通用性更强。类比于在原生操作系统上开发和在java虚拟机上做开发的区别。

更直观的来看就是:Legacy相当于直接在硬件上烧录一个程序,这个程序的功能就是加载一个系统。而UEFI(说的是UEFI的具体实现)则可以直接看作一个系统,它可以运行各种程序或驱动,甚至可以安装文本编辑器,浏览器等,而操作系统就是安装在其里面的一个程序

现在很多基于arm的手机或者平板都开始支持UEFI(但仍然叫bootloader),使得能在上面安装windows、Ubuntu等电脑操作系统

刷机步骤:

注:这是以前的方法,如果过程中提示 recovery_ab 找不到partition 之类的错误,应该是手机使用了 boot_a/b 逻辑分区的方式,这种情况的刷机方式在本文下面有写

  1. 下载小米官方解锁工具解锁,手机关机后按住音量下加电源键进入fastboot模式。此时可能解锁工具提示找不到设备,有可能是usb口的问题,换个插口试试

  2. 解锁后会清空设备并重启

  3. 将下载好的系统镜像解压缩,并将 .img 文件传输到手机

  4. 电脑上下载 platform-tool工具(ADB工具)压缩包,解压缩,cmd进入该目录

  5. 进入fastboot模式:

    1. cmd输入 ./fastboot devices 命令查看是否已经进入fastboot模式

    2. ./fastboot flash boot XXXXX_XXXXX.img 刷入系统镜像

    3. Fastboot flash boot xxx.img是刷入主系统镜像,若要刷入recovery(例如twrp)则使用 fastboot flash recovery xxx.img,若什么镜像都不想安装,则直接使用 fastboot boot xxx.img命令

    4. 提示完成后输入 ./fastboot reboot 重启手机

刷magisk:

见:https://magiskcn.com/

magisk通过修改替换boot.img文件的形式获取root权限。

什么是boot.img?

通过解压miui的卡刷包可以看到里面有各种各样的xxx.img,其中boot.img即为android内核文件,一般来说,不管你是什么系统,只要是基于android的,并且android版本一样,那么这个boot.img就可以互换,不管是miui还是其他什么ui,指的就是该内核的ui

  1. 下载官方卡刷包(需和手机现在系统的版本一致,实在没有android大版本一直应该也可以),解压,提取payload.bin文件(如果解压后就有boot.img则省略下一步)

  2. 下载payloadbin提取软件,可以提取其中的各种 xxx.img

  3. 复制上一步提取的boot.img到手机,并使用手机上的magisk manage软件修改boot.img,形成一个新的 Magisk_xxx.img

  4. 将上一步的magisk_xxx.img复制回电脑,手机连接电脑并进入fastboot模式,执行fastboot flash boot Magisk_xxx.img即可刷入修改后的内核镜像,(可选,因为貌似不这样做也没问题:可以同时也将提取出来的vbmeta.img也复制到adb工具目录下,刷入bootimg时也将该img文件刷入。刷入完成后执行 ‘fastboot.exe –disable-verity –disable-verification flash vbmeta vbmeta.img’命令关闭AVB校验,avb校验img文件的完整性),接着重启手机即可

卡刷步骤

下载好系统卡刷rom,应该是zip格式(这一步可以不用是miui系统)

下载twrp,应该是一个img文件

下载安卓的platform-tools

手机解锁(小米有提供专用的解锁软件)

解锁后,手机关机,连上电脑,然后按住音量下和电源键进入fastboot模式

电脑进入platform-tools的目录,把下载的系统重命名miui.zip,twrp重命名twrp.img,都放在platform-tools目录下

然后执行命令:fastboot boot twrp.img 临时启动twrp,这一步就类似于启动一个U盘的pe系统。

然后再进入”高级“–>”刷入当前的TWRP“,将twrp固化,相当于将系统中的recovery真正替换掉

再选择”重启“–>”Recovery“,此时应该进入的就是TWRP

电脑上执行 adb push miui.zip /sdcard/ 将rom上传进系统

然后在TWRP的界面上选择”安装“,然后选择刚才上传的rom文件,即可开始安装系统。

安装完成后重启即可


什么是slot a/b(槽位a/b)?

刷机过程中,经常可以看到”槽位a/b“或”slot a/b“等信息,这是安卓系统用于OTA的一种技术,每个槽位都可以安装一个完整的操作系统,如果当前使用的系统安装在a槽位,则当系统要更新时,新版本系统会自动安装到b槽位,然后将系统启动槽位设置为b,这样下次重启系统就会进入b槽位的系统。

如何查看当前系统槽位?

使用命令:fastboot getvar current-slot

如何设置启动槽位?

该命令将启动槽位设置为b:fastboot.exe set_active b

如何将img安装到指定槽位?

这个命令将twrp安装到b槽位:fastboot flash boot_b twrp.img

recovery和a/b槽位又是什么关系?

以下为我个人理解:以前是使用 boot/recovery 两个分区单独作为双系统,现在则将双系统都放在boot分区下,然后以逻辑分区boot_a和boot_b作为双系统。

参考:

https://xdaforums.com/t/no-such-partition.3733811

https://xdaforums.com/t/how-to-fastboot-into-reboot-recovery.4509363

https://xiaomi.eu/community/threads/installing-a-custom-recovery.67841