手机刷机相关知识
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 逻辑分区的方式,这种情况的刷机方式在本文下面有写
-
下载小米官方解锁工具解锁,手机关机后按住音量下加电源键进入fastboot模式。此时可能解锁工具提示找不到设备,有可能是usb口的问题,换个插口试试
-
解锁后会清空设备并重启
-
将下载好的系统镜像解压缩,并将 .img 文件传输到手机
-
电脑上下载 platform-tool工具(ADB工具)压缩包,解压缩,cmd进入该目录
-
进入fastboot模式:
-
cmd输入
./fastboot devices
命令查看是否已经进入fastboot模式 -
./fastboot flash boot XXXXX_XXXXX.img
刷入系统镜像 -
Fastboot flash boot xxx.img是刷入主系统镜像,若要刷入recovery(例如twrp)则使用 fastboot flash recovery xxx.img,若什么镜像都不想安装,则直接使用 fastboot boot xxx.img命令
-
提示完成后输入
./fastboot reboot
重启手机
-
刷magisk:
magisk通过修改替换boot.img文件的形式获取root权限。
什么是boot.img?
通过解压miui的卡刷包可以看到里面有各种各样的xxx.img,其中boot.img即为android内核文件,一般来说,不管你是什么系统,只要是基于android的,并且android版本一样,那么这个boot.img就可以互换,不管是miui还是其他什么ui,指的就是该内核的ui
-
下载官方卡刷包(需和手机现在系统的版本一致,实在没有android大版本一直应该也可以),解压,提取payload.bin文件(如果解压后就有boot.img则省略下一步)
-
下载payloadbin提取软件,可以提取其中的各种 xxx.img
-
复制上一步提取的boot.img到手机,并使用手机上的magisk manage软件修改boot.img,形成一个新的 Magisk_xxx.img
-
将上一步的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文件
- https://sourceforge.net/projects/recovery-for-xiaomi-devices/files/ 红米K40就搜索alioth,这是该机型的另一个名字
下载安卓的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上传进系统
- 这一步之前,可以先使用命令
adb shell
进入手机的终端,然后使用df -h .
查看容量够不够放得下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
-
重启手机:
fastboot reboot
-
重启到recovery:
fastboot reboot-recovery
如何将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