01.Root和刷机基础
基础概念
ADB
ADB 的全称为 Android Debug Bridge,是 android sdk 里的工具, 可以用它对 android 模拟器或者安卓真机进行调试,adb 命令可以实现的功能有:
- 运行设备的 shell (命令行)
- 管理模拟器或设备的端口映射
- 计算机和设备之间上传/下载文件
- 将本地 apk 软件安装至模拟器或 android 设备
adb 需要安装驱动
fastboot
什么是 fastboot?
fastboot 是一种协议,是一种通过 USB 连接与 bootloader 通讯的机制。它被设计的非常容易实现,适用于 Linux、Windows 或者 macOS 等多种平台。fastboot 是 Android 系统提供的一种较 recovery 更底层的通过 USB 更新文件系统的方式。 Android 开发包提供了 fastboot.exe 工具用于与 Android 系统通信,主要完成分区镜像烧录、分区擦除、设备重启、获取设备状态信息等操作。当需要通过 fastboot 协议与 Android 系统交互时,Android 系统需要启动到 bootloader 模式,此时只有最基础的硬件初始化,包括按键、USB、存储系统、显示等模块,以支持分区镜像的写入和系统启动模式的切换。
fastboot 是 PC 与 BootLoader 的 USB 通信的命令行工具,通过向 BootLoader 传送刷机文件(
.img
)实现 Android 系统分区重烧。fastboot astboot 需要 BootLoader 支持,且需要使用 USB 数据线连接,因此常称为线刷模式。
fastboot 需要安装驱动;fastboot 是常说的线刷工具
fastboot 工具
FastbootEnhance
windows 工具
A user-friendly Fastboot ToolBox & Payload Dumper for Windows
Releases · libxzr/FastbootEnhance
fastboot 命令
常用命令
- adb reboot bootloader——将手机重启到 Fastboot 模式
- fastboot reboot Fastboot 模式下重启手机
- fastboot devices 查看 Fastboot 模式下连接的手机
- 擦除分区命令
fastboot erase system
- `fastboot flash boot boot.img
fastboot flash bootloader bootloader-name.img
- 刷入 bootloader 镜像文件,一般用于刷机后引导不正常时,或者引导模式对手机信息识别错误的情况下,刷入官方包里的 bootloader 镜像文件,另外如果是官方的升级包,一般都是默认刷入它。在官方的升级包的 bat 批处理命令里,也可以看到这一条类似的命令。
fastboot flash radio radio-name.img
- 刷入 radio 无线驱动包,管理手机信号芯片等。
fastboot flash recovery TWRP-name.img
- 刷入 recovery 系统的镜像文件,这里是 TWRP 的 recovery 系统,一种常用的第三方 recovery 刷机系统。recovery 镜像文件需要匹配不同的机型,如果刷入后进不去 recovery,很简单,找个机型正确的 recovery 包再次刷入就行了。所以刷这玩意,常备一个官方 rom 里提取出来的 recovery 文件,随时刷回。
fastboot flash boot boot.img
- 刷入 boot 包,应该是引导系统的底层包?经常刷机时会遇到刷机成功,启动进入系统却失败,都是 boot.img 没刷导致。可能原因就是 boot.img 与 system.img 不匹配,但是我并不是非常确定,所以也不好跟你乱说,只是说了这种用法,更明确的技术解释期待他人吧。
fastboot flash system system.img
- 刷入 system 的安卓系统主要文件。
这里好几条命令,又是 bootloader,又是 boot,还有 radio,recovery 为什么要这么命名。这个我也没有过多深究,说一下个人理解,并非肯定正确的解释。
安卓的文件管理类似 linux,linux 与 windows 对存储分区的管理不同。windows 我们是 c 盘 d 盘这样说,linux 就是 data 目录,system 目录,etc 目录这样,是不是明白了点。bootloader 这些名词应该也是对应的目录,但是这些是特殊目录,在安卓系统的框架里,已经固定了各自的权限和作用。所以刷机就是用特殊的命令去写入各种包,组成一套新的系统。你可以把这些命令理解为 ctrl c 和 ctrl v……
fastboot flash cache cache.img
- 刷入 cache 缓存文件,如果不刷它的话也可以清空,系统如果找不到 cache 缓存文件,就会自动生成。虽然它不是必须的可以为空,但是如果它已经有了,反而可能会影响系统启动,比如 cache 为旧系统产生的,刷机后新系统会先去读取 cache 的数据,导致不匹配而启动异常。所以刷机常说要双清,其中一清就是清除 cache,还有一清就在下一条命令,叫 userdata
fastboot flash userdata userdata.img
- 刷入 userdata 镜像文件,直接字面理解,就是用户数据,既然是用户数据,它也同 cache 缓存一样,是可有可无的。cache 和 userdata 的清除只会删掉你的使用数据,但不会导致系统崩溃。清除是很容易的,但是要保留就很难了。啥都清空刷机没啥意思,如果你能保留住自己的数据刷机那就很有成就感了。
fastboot reboot-bootloader
- 重启 bootloader 模式
fastboot -w
- 清空用户数据区和缓存区.相当于 recovery 菜单中的 “wipe data/factoryreset”
这和别人用的刷机命令里的双清是否是同一个命令就不知道了。
在 nexus5 升级 6.0 的过程里,我折腾了十几遍刷机,这条命令起到的是双清的作用。
fastboot erase boot
- fastboot erase cache
- fastboot erase recovery
- fastboot erase system
- fastboot erase userdata
清空不同的文件系统分区
BootLoader
什么是 BootLoader?
BootLoader 是嵌入式设备中用来引导内核启动的一段代码,在它完成 CPU 和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行。可以理解为它是一个独立的程序,如同 Application 程序一样,虽然 Bootloader 的体量小,但是 “ 五脏俱全 “,启动代码、中断、主程序(Boot_main 函数)、操作系统(非必须)都有。
内核启动是需要一定条件的,当设备上电后会首先运行 BootLoader,BootLoader 会初始化必要的硬件,比如 DDR、Flash、串口等,通过这段程序可以将系统硬件环境设置到一个合适的状态,为进行系统内核调试准备好环境,相关初始化完成后就会去启动内核。
(在嵌入式系统中,通常没有 BOIS 那样的固态程序,因此整个系统的加载启动任务就由 BootLoader 来完成,BootLoader 程序通常安排在嵌入式系统最开始运行的地址处 0x0000 0000
)
BootLoader 锁
解锁 Bootloader
开启开发者模式和 USB 调试
关于手机→Build 号(多次点击),打开开发者模式
OEM 解锁
开发者模式→OEM解锁
进入 Bootloader 模式
輸入 adb reboot bootloader
並按 Enter,手機會立即重啟至 Bootloader
模式。
1
adb reboot bootloader
此時手机會出现這畫面就是 Bootloader 模式
可以看到目前綠色字代表目前是鎖定狀態,我們接下來要解鎖:
然后,通過 fastboot devices
命令驗證 fastboot 是否成功:
1
fastboot devices
如果沒反應,請在電腦上安裝最新 Pixel 驱动 (我也卡在這邊好久,爬文找到答案)
https://developer.android.com/studio/run/win-usb?hl=zh-cn
解锁 Bootloader
注意:解鎖 Bootloader 等同重回原廠設定,請事先登出 Google 帳號 & 刪除指紋、密碼等安全設定。
1
fastboot flashing unlock
输入命令后用音量鍵選擇 Unlock the bootloader
,接著他會重啟 Bootloader:
然後你會看到它變成紅色 Unlock,此時代表成功解鎖 Bootloader:
重新開機後,出現如下這個畫面就是解鎖成功
解鎖 Bootloader 後,此時手機會恢復出廠狀態,因為還是要使用 adb 指令
所以要重新去打開 OEM 解锁 & USB 调试,见前面
Recovery
什么是 Recovery?
Recovery 本身的本质也是一个简单 Linux 加一个 Google 开发简单图形界面。它跟你在用的内核的 boot.img 分区的格式是完全一样的。他的作用在于当你的产品里的内核有问题时; 你可以切换到 Recoverty 这个小操作系统里用工具重新下载内核。因此如果打比方的话,更像 PC 机的可引导的 U 盘修复盘。 recovery 过程主要有两个作用:factory reset 和 OTA install。一般 Android 系统都有两个分区 /boot /recovery。这两个分区都可以引导系统。recovery mode 从本质上来看就像是一个袖珍版的 Linux。Android 的上层结构 (虚拟机) 可以调用一个特定的类 ( RecoverySystem ) 来写入命令参数以提供重启之后 recovery 模式所必需的命令参数。简而言之,recovery 模式其实方便了开发者升级系统和擦除相应的分区 ( /data 和/cache
)。
进入到 Recover 模式
1
adb reboot recovery
TWRP
官网,可查看支持的设备列表:Devices
如果你的设备有来自 TWRP 的官方支持,只需在打开 USB 调试后将手机与电脑相连,然后打开电脑端的命令行窗口:
- 执行
adb reboot bootloader
进入 Bootloader 界面 - 执行
fastboot boot TWRP.img
进入临时 TWRP - 在 TWRP 中刷入你下载的 Magisk 安装包
有 twrp 官方支持可以进入临时 twrp,这个方法在 Android 10 之后好像就失效了,这种方式基本失效了
TWRP 资源:
一加各机型TWRP官方/非官方版本,含最新3.7.0版本 - 大侠阿木博客
解锁 Bootloader、手机重启后,需要重新设法进入 Bootloader(你可以重新开启一次开发者模式通过高级重启进入),然后在终端使用以下指令:
1
2
fastboot boot path/to/twrp-3.3.1-0-guacamoleb.img
# fastboot boot 指令提供了临时从某个镜像文件启动的方式,大大降低了 debug 的难度。
正常情况下,手机会临时进入一次 TWRP。
氢 OS 出厂版本仍然使用低版本的 Bootloader,尚不支持 fastboot boot 指令。这不影响你下一步刷入氧 OS。在你刷完最新版本的氧 OS 以后你可以再使用 fastboot boot 命令尝试临时进入 TWRP。
Android 启动模式
Android 系统相对开源,因此允许用户对手机系统进行一定修改即刷机。因此对应不同的功能以及权限,其一般具备 6 个不同模式,分别为一般启动模式(normal mode)、安全模式(safe mode)、恢复模式(recovery mode)、引导模式(bootloader mode)、fastboot 模式和诊断模式(diagnostic mode)这种说法。一般分 2 种说法:透明系统栏和沉浸式模式。一般使用透明系统栏比较多,沉浸式模式基本只有游戏,全屏视频才用得上。
一般启动模式(normal mode)
这个模式的功能是正常启动手机,开启方法为关机状态下按电源键启动。该模式即俗称的开机,进入正常的系统,即用户正常使用手机的系统。
安全模式(safe mode)
此模式和正常启动一样,但没有登记 Google,所以不能访问 Market 或使用你的 Google 账号。进入方法一般为按住 “menu” 键,按电源键启动手机,直至手机启动完成松开 “menu” 键。该系系统因不同厂家设置而不同,进入方法也有所不同。
恢复模式(recovery mode)
该模式下使用音量键上下进行选择,电源键进行确定,当然现在市面上已经出现触摸版的第三方 recovery 模式,允许用户使用触屏进行操作。该模式具有相对较高的修改权限,可进行打开命令解释程序(shell),刷新映像文件(flash image),执行备份等。该模式可根据用户的需要进行修改,因此有官方 recovery 模式以及第三方 recovery 模式。第三方 recovery 模式可以识别第三方 rom 包,因此可以用来刷机。而官方 recovery 一般不能识别第三方 zip 文件。进入方式一般为就是音量键上 + 电源键。
引导模式(bootloader mode)
该模式的功能是从 SD 卡上安装新的系统映像(DREAIMG.NBH),其中包括刷系统以及 recovery,具有很高的修改权限。该模式基本每款手机都拥有,但其命名不一定相同。大多数 Android 手机解锁或获取 root 权限都使用模式进行。进入方法一般为音量键下 + 开机键。
fastboot 模式(fastboot mode)
该模式主要是在电脑上使用 fastboot 命令来刷新映像文件,并可以进行清理数据等一定的操作。进入方法一般为按住音量键下 + 开机键启动手机,直至屏幕出现 FASTBOOT 字样后松开返回键。
诊断模式(diagnostic mode)
该模式是为了测试手机各项功能的模式,一般在购买新手机时会使用到该模式以便对手机 CPU、传输速率以及屏幕显示效果等进行测试。进入方式因手机厂商设置不同而不同,一般是在拨号界面输入一定的数字符号。
Android 系统分区介绍
Hboot——系统开机引导类似电脑 BIOS,这块刷错手机就会变成砖
Radio——通讯模块、基带、WIFI、Bluetooth 等衔接硬件的驱动软件
Recovery——系统故障时负责恢复
Boot——Linux 嵌入式系统内核
System——系统文件、应用
Cache——系统运行时产生的缓存
Userdata——用户使用 APP 产生的缓存数据
刷机方式
线刷
fastboot 是一种线刷,就是使用 USB 数据线连接手机的一种刷机模式。这种模式是更接近于硬件的界面,所以这个模式一般好似在手机变砖或者修复时使用的。
卡刷
通过 Recovery 刷机称为卡刷,是存在于安卓系统 recovery 分区的一个微型系统,类似于电脑的微型 pe 系统,用于卡刷 ROM 升级包,清除数据,恢复出厂设置,备份数据等,一些第三方 recovery 比如 CWM、TWRP 拥有更加强大的功能,比如 adb sideload 模式,挂载储存设备,卡刷第三方 rom,卡刷 supersu 进行 root 等。
怎么进入 fastboot
模式和 Recovery 模式
- fastboot 模式怎么进入?
- 首先使手机进入完全关机状态,然后同时按住【电源键】+【音量 +】键,大约 2-3s 后,就可以进入 Fastboot 模式。
- 开机状态:
adb reboot bootloader
- Recovery 模式怎么进入?
- 首先使手机进入到完全关机状态,然后同时按住【电源键】+【音量 -】不放,待进入 Recovery 模式后全部放开即可。部分机型可能正好相反。
- 开机状态:
adb reboot recovery
Root
Root 技术方案
从最早的简单粗暴直接在 System分区中塞入/bin/su程序
(SuperUser/SuperSU 时代)
到 “systemless
” 的基于 overlay fs 的 Magisk,到现在完全不需要改动文件系统,纯内核操作的 KernelSU
。
最新技术是 SKRoot。
SuperSU 后期也是 System-less 的,Magisk 的狐狸版新版也是按需挂载 SU 的。
SKRoot 领先在了 SE-Linux 的零接触,全内核态。SKU 是内核态与用户态皆有。
刷机
通用刷机步骤
安装 ADB 工具包
解锁 BootLoader
刷入 TWRP … ?
[[#TWRP]]