小米手机刷机root教程(详细)

原文链接(带图片):https://note.youdao.com/s/E41q03mr

刷入第三方rec

    以前直接将TWRP刷入recovery分区,然后直接通过Magisk的压缩包,将补丁打入。 
    但是,现在recovery分区没了
    AB分区和VAB分区将recovery分区内置进了boot分区内,因此没有独立的recovery分区。
    这部分的机型若需要使用第三方rec只能从ADB工具处使用临时启动来启动第三方rec,
    部分作者发布的rec可以在临时启动后在高级选项处点击安装到手机内,原理就是将第三方rec安装进了boot分区内,
    但是只要刷入ROM包等需要刷新boot分区的操作时,安装在boot分区的第三方rec就会被刷机包的boot文件替换掉,所以说AB分区没有永久的第三方rec

目前主流的几种第三方rec

TWRP(全称:Team Win Recovery Project)【推荐】

官方网址:https://twrp.me/
奇兔twrp下载地址 http://www.romleyuan.com/lec/read?id=201
使用方法
1.进入官网下载最新的apk安装包me.twrp.twrpapp-26.apk
    https://dl.twrp.me/twrpapp/
2.安装
3.选择本机机型,下载对应的镜像文件 twrp.img

[图片上传失败...(image-961d42-1663397249560)]

4.刷入系统的两种方法
    方法一:
        点击select a file to flash ,选择下载好的twrp.ing文件
        再点击flash to recovery
    方法二(手机无法启动时):具体看下文传统A-only分区刷入方法
        将twrp.img文件pull到电脑
        通过bootfast flash recovery 命令刷入分区
        重启到recovery 
5.界面

[图片上传失败...(image-66acdd-1663397249560)]

OrangeFox Recovery(中文名:橙狐rec)

https://orangefox.download/zh-CN

1.读者自行探索
2.recovery 界面
[图片上传失败...(image-85b477-1663397249560)]

传统A-only分区刷入第三方recovery方法

1.准备工作

(1)下载ADB工具
  • a.MACOS系统安装adb方法:

      终端执行:
      brew install --cask android-platform-tools
      安装完成后,关闭并重启终端,adb环境即可生效。
    
  • b.window安装ADB的方法

    1.下载地址:https://developer.android.com/studio/releases/platform-tools?hl=zh-cn
    [图片上传失败...(image-2b0bb0-1663397249560)]
    2.将下载paltfrom-tools解压,并将文件添加到系统环境变量
    3.打开终端,就可以执行adb命令了

(2)解锁手机BL锁(以小米手机为例,自行百度手机解锁BL的方法)
    Bootloader,简称BL,其手机安全启动规范的底层的一环。
    主要作用是验证加载对象签名,防止启动第三方 ROM 或 Recovery,避免由此带来的数据安全风险。
    同时限制了 Fastboot 方式刷机(线刷),防范手机在没有授权的情况下被刷机.
  • 1.目的是让recovery分区可写入
  • 2.解bl锁会清除手机(恢复出厂设置)所有数据,记得提前备份好!!!
a.下载小米官方解锁工具
    https://www.miui.com/unlock/index.html

[图片上传失败...(image-a1bd81-1663397249560)]

b.用数据线连接手机和电脑,在关机状态下同时按住音量减键和电源键,直到出现如下界面,进入fastboot.
c.软件显示连接成功,之后按步骤解锁即可

2.刷入第三方镜像文件,这里以 twrp.img为例

(1)将手机重启到fastboot模式
(2)输入以下命令将rec文件刷入(后面的twrp.img是rec文件的路径)
    fastboot flash recovery twrp.img
(3)等待刷入成功后,重启到recovery模式
    fastboot reboot recovery
关闭AVB2.0校验(防止被覆盖和无法开机的情况)
方法一 重启到recovery,选择高级,选择关闭系统效验,移动滑块,最后一定是重启到recovery,在重启系统

[图片上传失败...(image-748875-1663397249560)]

方法二 找到系统安装包中的vbmeta.img文件,重启系统的进入fastboot,输入以下命令
    fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img
    fastboot  reboot recovery
    fastboot reboot 
    找到vbmeta.img文件的方法请看下文root系统
data分区加密,twrp安装时目录呈现乱码解决方法
    1.重启进入recovery(twrp)
    2.清除data分区的数据(会重置手机,记得做好系统备份)
    3.重启到recovery
    4.重启手机
    5.若手机无法开机
        进入fastboot 用fastboot flash 刷入MIUI安装包里的vbmeta.img 和 boot.img等img文件

VAB分区临时启动与刷入方法(没有recover分区,实现刷recover)

(1)将手机重启到fastboot模式
(2)输入以下命令将rec文件刷入(后面的twrp.img是rec文件的路径)
        fastboot boot twrp.img
        执行后会自动重启到recovery

使用twrp刷入软件的两种方式(软件的格式为zip 如magisk.zip kali-nethunter.zip)

1.不需要将安装包push到手机(手机+电脑)
    上文介绍的 配合adb sideload 的线刷
2.需要将安装包放到手机存储的卡刷 (不需要电脑)
    重启到twrp(即recovery),点击安装,找到要安装的zip文件

root刷机(红米note8pro)

卡刷:安装包放在手机存储,通过TWRP安装,不用电脑
线刷:安装包放在电脑中,通过数据线,执行adb sideload xxx.zip安装

准备工作

1.手机刷入twrp
方法如上所述
2.下载好系统刷机包(线刷包 和 卡刷包),以小米手机为例
方法一:
        1.首先在系统更新选择下载完整包,然后停止下载
        2.然后去“下载管理”继续下载,这样就不会被系统解密了,下载好的包在Download\downloaded_rom 就可以找到了

[图片上传失败...(image-888df1-1663397249560)]

方法二:
       从如下网址下载线刷包和卡刷包
        https://xiaomirom.com/series/
3.解压安装包中的img文件备份,手机无法启动时重刷(线刷包和卡刷包的img不一样,不能混刷,否则无法启动)
4.进入recovery(twro)备份boot recovery bootloader 分区(作用与第2步相同,手机无法启动时刷回来),注意不要备份data分区,高版本安装系统是加密的无法备份。
5.备份手机数据,刷机完成后用于恢复安装的软件等信息
小米手机助手:小米有官方的备份软件(也可用来刷入线刷包系统)
http://zhushou.xiaomi.com/

[图片上传失败...(image-c1d7a6-1663397249560)]

6.将卡刷包,面具magick.zip,img文件存入手机(有外置sd卡的放入外置,这要即使重置手机也不会清楚外置sd卡数据)

下载magisk安装包

https://www.mintimate.cn/2020/03/08/Magisk/

关于面具apk改zip:从22.0版本开始,
Magisk的刷入包,卸载包和apk安装包合为一体,
下载的apk可以用于安装APP,改后缀为zip即可在Recovery刷入,改名称为uninstall.zip即变身卸载包。

刷入magisk

1.使用上文提到的twrp刷入软件的两种方式的任意一种,刷入面具(Magisk)即可
2.重启进入系统后,会看到magisk的图标,但是不完整,需要重新安装
    zip改为apk,点击安装即可
3.这样就成功通过面具获得了系统的root权限

面具安装成功的标志:

[图片上传失败...(image-9419b1-1663397249560)]

手机无法启动的解决方法

1.重新刷入img文件

1.进入fastboot模式
2.尝试刷入系统原理的
    system.img
    boot.img
    vbmeta.img
3.重启

2.使用小米手机助手,重新刷入系统包

1.下载:下载方法如上所述
2.解压系统安装包
3.打开小米手机助手软件,并用USB连接手机到电脑
4.重启手机到bootfast模式
5.软件连接成功后,输入解压后文件的路径
6.点击刷机即可

基础知识

安卓REC原理:手机的系统分区

  • system:系统分区.就是我们刷ROM的分区(ROM,Read-Only Memory 只读储存器)
    包括 Android UI 和设备上预装的 APP。
    删除这个分区只会同步将 Android 系统从设备上卸载掉,
    而不会导致设备不能重启,因此你依然可以顺利让设备进入到 recovery 或 bootloader 模式来
    为它重新刷入一个新的 ROM。
    RAM,Random-Access Memory 随机储存器 内存条
  • recovery分区,只有用于普通刷机;twrp就是一个第三方的rec(recovery)

     相当于一个备用的 boot 分区,利用它我们可以使设备启动到恢复模式窗口来进行一些高级的恢复和维护操作。
    
  • data分区,用户分区;我们装APK的分区

     也被称作 userdata,是用户数据被存储的地方——也就是说你的联系人、短信、配置文件和你自己安装的 APP 都位于这里。
     删除这个分区相当于将你的设备恢复出厂设置,你的设备会变得和你第一次开机或最后一次刷入官方/自定义 ROM 后一样。
     你在设备上点击清除用户数据或恢复出厂设置按钮后,实际上清除掉的就是这个分区。
    
  • cache分区:存储使用过程中的缓存数据

    存放的是 Android 系统中经常被访问的数据和 APP 的部件。
    删除这个分区不会对你的个人数据造成影响,这个分区上的数据会随着你继续使用设备被重新收集并存储在这里。
  • misc分区:包含了各种以开关量形式保存的系统配置,包括 CID(Carrier or Region ID)、USB配置和某些硬件配置等。写入启动指令

      这是个很重要的分区,如果它遭到了破坏或有数据丢失,那么设备的一些功能可能无法正常使用
    
  • bootloader分区,主要用于线刷;

  • boot:由 kernel 和 ramdisk 构成,内核就这这里。用于启动;

  • hboot:这个是SPL所在的分区.很重要哦.也是fastboot所在的分区.刷错就真的变砖了.

  • vbmeta:vbmeta.img(verified boot metadata),

       把所有需要校验的内容在编译时就计算好打包到这个分区,
       那么启动过程中 BootLoader 只需要校验 vbmeta.img,就能确认 vbmeta 内的数据是否可信。
    
  • vendor分区:包含有厂商私有的可执行程序、库、系统服务和app等

      可以将此分区看做是system分区的补充,厂商定制ROM的一些功能都可以放在此分区
    
  • SDCard分区:就是挂载的SD卡。

  • splash1:这个就是开机第一屏幕了.

  • modem分区:主要是手机短信的通讯模块;

解锁与fastboot和recover模式

  • 当我们只是按下电源键开机时,会进入正常启动模式。

      Secondary stage bootloader会从boot分区开始启动
    
  • fastboot模式:fastboot是 android定义的一 种简单的刷机协议,用户可以通过fastboot命令 行工具来进行刷机。

      比如说 fastboot flash boot boot.img这个命令就是把boot.img的内容刷写到 boot分区中。
      一般的手机厂商不直接提供 fastboot模式刷机,而是为了显示他们的牛B之处,总 是会提供自己专有的刷机工具和刷机方法。
      比如 说三星的Odin,摩托的RSD,华为的粉屏等等。 
      但是其本质实际上是相同的,都是将软件直接fla sh到各个分区中
    
  • recovery模式:recovery是 android定义的一 个标准刷机协议。

      当进入recovery模式时,secondarystage bootloader从recovery分区开始启动
      recovery分区实际上是一个简单的Linux系统 ,
      当内核启动完毕后,开始执行第一个程序init(init程序是Linux系统所有程序 的老祖宗)。
      init会启动一个叫做recovery的程序(recovery模式的 名称也由此而来)。
      
      通过recovery程序,用户可以执行清除数据,安装刷机包等操作。
      一般的手 机厂商都提供一个简单的recovery刷机,而大名鼎鼎的CWM Recovery就是一个加入了很多增强功能的 recovery,
      要想用上CWM Recovery前提是recovery分区可以被刷写。大家在论坛上看到 的解锁bootloader,通常指的就是解锁recovery 或fastboot,允许刷写recovery分区,
      这样大家 就可以用上喜爱的CWM Recovery了。
    

系统分区介绍

1.架构与分区文件

onlyA架构(小米9) 分区名 逻辑分区
分区1 system
分区2 vendor
分区3 boot
分区4 dtbo
分区5 recovery
分区6 userdata
... ... ...
AB架构(1加7pro) 分区名 逻辑分区
分区1 system_a
分区2 system_b
分区3 vendor_a
分区4 vendor_b
分区5 boot_a
分区6 boot_b
分区7 dtbo_a
分区8 dtbo_b
分区9 userdata
... ... ...

写入分区的方法(详细命令请看下文安卓命令详解)

刷第三方recovery,本质上是将第三方的img文件刷入recovery分区
img镜像文件文件:img格式是一种文件压缩格式(archive format),主要是为了创建软盘的镜像文件(disk image),它可以用来压缩整个软盘或整片光盘的内容

1.重启手机进入 fastboot模式

    adb reboot bootloader

2.通过命令 fastboot flash 分区名 img文件地址 刷入

fastboot flash recovery twrp.img

3.刷入后重启(fastboot模式下只能用fastboot命令)

fastboot reboot  重启到系统
fastboot reboot recovery 重启到bootfast
fastboot bootloader 重启到bootfast

系统OTA升级流程

OAT(Over-The-Air)即空中下载技术,早期被广泛应用在手机行业中,终结了手机软件升级需要连接电脑、下载软件、再安装更新的繁复操作

非A/B架构系统升级流程(onlyA ,动态onlyA)

1.android系统收到服务端的OTA推送,将OTA包下载至cache分区
2.OTA下载完成后,向misc分区写入指令,表明下次启动是进入recovery模式并使用改OTA包进行升级。
3.重启手机
4.重启后最先进入bootloader,bootloader会先判断按键组合、电源寄存器等,随后会读取misc分区的内容并解析。由于步骤2中已经向misc分区写入了指令,此处bootloader读取指令后会引导启动recovery系统。
5.进入recovery,读取cache分区中的OTA包,并解析其中的升级脚本,按照其指令对系统各个分区进行升级。如果recovery自身也需要升级,会在此过程中向system中写入recovery-from-boot.p文件,这是一个recovery升级所需要的patch
6.recovery会清除misc分区
7.重启后最先进入bootloader,判断按键组合、电源寄存器、misc分区内容等,默认情况会启动Android系统,此时已经是OTA升级后的新版本系统
8.新版本Android系统启动后,会检查是否存在recovery-from-boot.p文件,如果存在,则会对recovery进行升级

A/B架构升级流程(AB,动态AB,VAB)

    1.在Android O之后,Google引入了一种新的分区结构,称为A/B分区,与之对应,传统分区结构被称为non-A/B分区
    2.A/B分区结构,顾名思义,将系统分区分成了A和B两个槽(slot),手机启动时会选择A槽或者B槽启动,运行过程中仅使用当前槽位的分区。一旦当前运行的槽出现问题,系统仍可以选择另一个槽进行启动,从而保证系统良好的可用性。
    3.采用A/B分区结构,能够实现无缝升级。例如用户正在运行A槽,此时收到OTA推送,则系统会在后台一边下载OTA数据,一边同时对B槽进行升级。当B槽系统升级完成,用户会收到重启提示,此时重启手机将自动切换到B槽的新版本系统。在此过程中,仅重启操作是会被用户感知的,这个重启与普通重启的耗时没有什么区别。
    4.由于A/B分区结构可以实现一边从服务端获取OTA数据,一边直接写入待升级的槽,不需要临时存储OTA包的空间,因此不再需要在cache或userdata分区预留足够空间。

[图片上传失败...(image-b7df37-1663397249560)]
5.传统的Recovery升级模式,如果写入System系统分区的数据有误,那么机器可能就无法启动,刷机玩家应该很熟悉这一类“变砖”的情况,甚至厂商OTA偶尔也会“变砖”。要如何避免?事实上,近年的新安卓机使用A/B分区机制,很多安卓机已经不需要Recovery来引导升级。

Android系统启动方式的变更

1.之前需要经由Recovery,使用A/B分区机制后直接通过boot来引导启动
2.在采用了A/B分区机制的安卓机中,当系统需要升级的时候,会将新的系统写入其中一个分区,写入成功后则从该分区启动;如果写入失败,或者启动失败,则从原分区启动,这相当于两个系统分区相互备份,大大减少了系统升级的故障率。
3.安卓11的机制也与此相似。出厂预装安卓11的机器,取消了Recovery分区,而且对A/B分区机制进行了一定程度的改变。安卓11需要升级系统的时候,会将新系统的数据和现在的系统数据进行对比校验,将差异部分写入另一个分区而不是系统分区;
4.利用新数据启动系统,如果系统顺利启动,那么就将差异数据写入到系统分区,启动失败则抛弃差异数据,用原来系统分区的数据启动。
5.安卓11这个新机制既有A/B分区的可靠性优点,也无需像A/B分区那样占据大量的额外空间

boot和root

    boot分区就是操作系统的内核及在引导过程中使用的文件,简单来说就是没有这个东西你的手机将无法开机。
    而获取Root的话,你可以简单的理解为Magisk把超级管理员权限补丁放到系统引导里面。

查看是否支持 A/B 分区方法

    运行 adb shell getprop ro.build.ab_update 命令查询,如果结果显示 true 表示支持 A/B 分区,如果没有返回内容则不支持。
    
    小米主要机型:
    A-only分区:小米10系列,红米K30系列,红米Note9系列等之前出厂为安卓10或更早版本的机型为
    VAB分区:小米11系列,红米K40系列,红米Note10系列等之后出厂为安卓11的机型为

VirtualAB分区和TWRP_Recovery关系

在刷入TWRP之前,你必须了解VirtualAB并没有单独的recovery分区的,而我们看到的官方recovery模式,实际仅仅是boot分区里ramdisk的组成部分。
换句话说,VirtualAB分区 并没有1个单独的recovery分区,boot分区就是recovery分区,recovery分区就是boot,对应在手机里的位置即可boot分区。
当我们刷入TWRP的时候,也就是将TWRP刷入手机的boot分区即可实现。
而rec和boot融为一体的缘故VirtualAB机型的TWRP文件一般就以1个boot.img形式存在

安卓命令详解

adb 与 fastboot

   (1) ADB和Fastboot是两个独立的实用工具,用于使用USB电缆从计算机与Android设备通信。
   (2) adb:您可以在Android设备上通过ADB执行许多重要活动,例如安装和卸载Play商店中不可用的应用程序,访问开发人员隐藏的功能,发送文件等等。 ADB二进制文件中有特定的命令。 要使用实用程序工具,必须激活“开发人员选项”才能启用USB调试模式。
   (3) fastboot:Fastboot是一种诊断工具,您可以使用它从计算机修改Android设备的文件系统。 它可以在引导加载程序模式下进行修改,因为它将命令发送到引导加载程序以进行更改,无论是安装新文件还是修改现有文件。 因此,您可以借助此特殊工具安装自定义固件,自定义恢复。

adb和fastboot的安装

macOS: 
    brew install --cask android-platform-tools
window: 
    1.下载地址:https://developer.android.com/studio/releases/platform-tools?hl=zh-cn
    2.将下载paltfrom-tools解压,并将文件添加到系统环境变量
    3.打开终端,就可以执行adb命令和fastboot命令了

常用adb命令

  • 查看帮助命令

     adb help
    
  • 查看当前设备

     adb devices  
    
  • 多个设备时指定设备

      adb -s 设备号 其他指令
      adb -s 127.0.0.1:21503 shell
      adb -s FA6AE0309067 shell
      127.0.0.1:5555 蓝叠
      127.0.0.1:7555 MUMU模拟器
      127.0.0.1:62001 夜游神模拟器
      127.0.0.1:21503 逍遥模拟器
    
  • 查看Android处理器架构

      adb shell getprop ro.product.cpu.abi
    
  • 安装APP

      adb install xxx.apk
    
  • 安装APP,已经存在,覆盖安装

      adb install -r xxx.apk  
    
  • 查看当前页面的包名和住Activity

      adb shell dumpsys window | findstr mCurrentFocus
    
  • 卸载app

      adb uninstall app包名
    
  • 往手机传递文件

      adb push 文件名 手机路径
    
  • 从手机端获取文件

      adb pull 手机路径/文件名
    
  • 移动文件

      mv /sdcard/Download/frida-server-12.8.0 /data/local/tmp/
    
  • 修改文件权限

      chmod 777 /data/local/tmp/frida-server-12.8.0
    
  • 查看日志

      adb logcat | grep 关键子
    
  • 清日志

      adb logcat -c
    
  • 手机端安装的所有app包名

      adb shell pm list packages
    
  • 屏幕截图

      adb shell screencap 手机路径/xxx.png
    
  • 录制视频
    adb shell screenrecord 手机路径/xxx.mp4

刷机相关命令

  • 重启系统

       adb reboot recovery 
    
  • 重启到recovery

      adb reboot recovery 
    
  • 重启到fastboot

      adb reboot bootloader
    
  • 线刷命令要配合twrp(不用将刷机包push到手机)

          1.手机连接电脑,TWRP点击“高级”,“ADB Sideload”或者叫“ADB线刷”,然后直接滑动开始
          2.电脑打开ADB命令行,输入命令(执行的时zip格式的软件或系统刷机包)
              adb sideload magisk.zip
    

    [图片上传失败...(image-97c4fd-1663397249560)]
    3.[图片上传失败...(image-1799b1-1663397249560)]

  • 进入安卓系统终端

          adb shell
    
  • 不进入安卓系统执行安卓命令

          adb shell "chmod 777 /data/local/tmp/frida-server-arm64"
    
  • 通过电脑端开启远程服务端口(手机重启后失效)

          adb tcpip 端口号
          adb tcpip 5555
          1.开启后可无须数据线,远程连接手机,执行adb命令
          2.开启后可通过scrcpy,Qt-scrcpy等软件通过电脑控制安卓(投屏,点击,安装)
    
  • 连接远程手机调试(wify)

          adb connect ip:端口号
          adb connect 192.168.0.222:5555
    
  • 断开远程手机连接

      adb disconnect 192.168.1.199:5555
    
  • 调回usb调试方式

      adb usb 
    
  • 安卓终端中开启服务端口(无需数据线)
    在android设备上安装“终端模拟器”等类似shell命令工具(如NetHunter终端),使用下面命令
    su
    setprop service.adb.tcp.port 5555
    stop adbd
    start adbd

  • 安卓终端调回usb调试方式:

          setprop service.adb.tcp.port -1
          stop adbd
          start adbd
    

常用fastboot命令

fastboot模式下,adb命令失效。
fastboot命令,只能在fastboot模式下执行
  • 查看帮助命令

      fastboot help
    
  • 查看设备

      fastboot devices
    
  • 获取手机相关信息:

      fastboot getvar all
    
  • 重启

      fastboot reboot            #重启手机(退出)
      fastboot reboot bootloader    #重启到bootloader模式
      fastboot reboot recovery     #重启到刷机模式
    
  • 擦除分区

      fastboot erase system    #擦除system分区
      fastboot erase boot    #擦除boot分区
      fastboot erase cache    #擦除cache分区
      fastboot erase userdata    #擦除userdata分区
    
  • 写入分区(system.img boot.img recovery.img 等img文件需要从系统原始安装包中解压得到)

    • fastboot flash system system.img

        写入system分区
        写入后相当重置系统但不清空数据
        会进入系统欢迎界面
      
    • fastboot flash boot boot.img #写入boot分区

    • fastboot flash recovery recovery.img

        写入recovery分区
        常用的卡刷模式写入的分区
      
    • fastboot flash bootloader bootloader.img 或者:fastboot flash motoboot bootloader.img

        这个是bootloader的组合镜像包,简称BL,
        最好不要乱刷!这个只能升级不能降级这个必须与gpt版本一致才能刷进去,。并且刷这个容易变砖!
      
    • fastboot flash userdata userdata.img

        刷写data分区:(用于清空data分区等),相当于回复出厂设置
        与twrp清空data一样
      
    • fastboot flash cache cache.img

        刷写cache分区:(用于清空cache分区等)
      
    • 引导启动外部镜像:

        例如要启动一个名为test.img的镜像,
        就输入:fast boot boottest.img
      

你可能感兴趣的:(小米手机刷机root教程(详细))