名词解释
ROM
Custom ROM is the name what we call a Custom OS made by the Android Development Community. These ROMs Include some special feature that Stock ROMs Doesn’t. For example, Enhanced Audio Drivers, Improved Battery, Overclocking options and many additional customizing options. There several popular Custom OSes in the world. Linage OS, CARBON, Resurrection Remix, Cyanogen (Abandoned) are a few examples.
Root
Root is actually a user account with extremely higher administrative power over the phone. Android is based on Linux so it’s the same root user you might familiar with LINUX Systems. Rooting is the process of acquiring the root user privileges. The safest way for root privileges is to install necessary files via a custom recovery.
Systemless Root
没有/system
访问权限的Root
原理:
大致是通过修改boot分区,使得手机在启动时,systemless中的文件先作为系统文件加载,然后才加载真正的系统,达到了不修改system分区而实现修改的效果,比如修改机型或是字体,只需要安装并启用相应的模块,模块存放在systemless里面,就会在手机启动时生效,又因为system本身并没有被修改,只需要禁用模块就可以还原,无需备份原有的配置;而root,也当然就是把root相关的一些文件放在systemless里,取代掉手机系统原本的su文件(SuperSU就是直接修改system里的su文件,而magisk是把su放在systemless中,手机启动时取代系统原有su)。
优点:
-
如果更改了
/system
,OTA更新时,验证系统完整性就无法通过,可能出现以下情况:- 更新完整的系统,顶替掉修改过的
/system
分区,之前的Root就会消失 - 无法进行OTA更新
- 变砖
因此Systemless Root保证用户在Root后,还能正常进行OTA更新
- 更新完整的系统,顶替掉修改过的
-
安全要求较高的APP(如:手机银行),会检查有无Root,已Root的手机被认为不安全,无法运行APP或在使用中限制功能。Systemless Root可以实现对特定的APP隐藏Root,使用户能够正常使用这些APP
缺点:
由于修改了Boot分区(在哪?):
- 可能卡在开机Logo画面(小米手机:卡米MI),因为无法通过AVB?(解锁后效验失败也会继续启动?)
- 启动设备时,可能无法通过供应商(vendor)驱动校验,可能提示:您的设备内部出现了问题
AVB
Android Verified Boot,Verified Boot的一种实现
AVB 是 Android 8.0 增加的一种启动(Boot)方式/流程:先验证一些重要分区(system.img, recovery.img, vendor.img, boot.img)的完整性,再启动系统
刷了第三方Rec好像无法通过AVB验证?修补boot好像可以通过AVB验证?
AVB2.0增加了一个vbmeta分区,其工作原理为:
- vbmeta.img的内容是待验证分区的Hash值,并且用私钥(key0)进行加密签名,私钥key0对应的公钥key0_pub被编译进BootLoader里
- 启动时,BootLoader用key0_pub验证签名,确保vbmeta是可信的
- 再用vbmeta去验证其他分区的完整性
dm-verity(device-mapper-verity) 是 Android 4.4 增加的一个内核功能,AVB 通过调用 dm-verity 实现分区完整性验证(?)
Android Verified Boot 2.0 – CSDN
Android Verified Boot 2.0 – Official Doc
Android Verified Boot 2.0 – 台译
FastBoot/Bootloader
关机后,同时按住开机键和音量下键,进入Bootloader模式
BL 锁
BootLoader锁,解锁BL锁是ROOT的必要条件
bootloader/fastboot相当于手机上的BIOS,锁住的情况下进入bootloader就会一直卡在FASTBOOT界面(?)
小米查看BL锁状态:开发者模式->设备解锁状态
手机进入fastboot模式,连接电脑,运行fastboot oem device-info
查看解锁状态
Recovery
Every android phone contains a small OS-like System called RECOVERY. Its job is to reset Phone when you can’t boot normally. But the Android developer community has made some special recovery programs that are capable of doing many things that a normal stock recovery Can’t do. Such as installing custom Operating System and install files into the system. Most popular custom recovery is “Team Win Recovery Project” also known as TWRP. We recommend using this as your recovery rather than using an unpopular buggy one.
进入Recovery模式:关机后,同时按住开机键和音量上键
Rec
一般指代第三方Recovery,用来替换原来自带的recovery,功能更多
可以理解成一个手机上的刷机工具,把手机内部存储里的文件刷入系统底层
刷第三方Rec不需要root,只需要BL解锁
出厂时的recovery,英文术语叫:stock recovery
TWRP
TeamWin Recovery Project,使用最广的第三方Rec,一个可触摸操作的图形界面recovery,
Now, Why TWRP over default recovery of Andorid? The manufactures of the android devices do not expect from you to install new software images other than their own. So they give very limited features which are mostly used by their service centers. Recovery softwares like TWRP can be used to by any advanced android user so that he/she can do whatever his/her phone since he bought it. :D
安卓手机如何刷入TWRP_Recovery刷机工具-2021年xda精编版
双清:一般指两个Cache(Dalvik / ART Cache
和Cache
)
可以刷入zip或img文件
Android “Ramdisk”
initramfs
: a section in Android’s boot image that the Linux kernel will use asrootfs
. People also use the term ramdisk interchangeably
(?)如上所述,虽然叫做Ramdisk(一种古老的启动方式),实际指的是Linux中的rootfs
ramdisk
,initramfs
,rootfs
在Android这好像是同义词?
rootfs
在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)
根文件系统被挂载到根目录下“/”上后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录和文件。
rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。
rootfs is a special instance of ramfs
这里的ram(ramfs)可以理解成内存吧
Magisk
完整功能由两部分组成:
- Magisk:核心组件
- Magisk Manager:用于和Magisk核心交互,管理手机的Root权限
22.0版本开始合并了Magisk和Magisk Manager:
Ever since the first Magisk release, Magisk (the core components) and Magisk Manager (the companion app) are released separately and isn’t necessarily always in sync. This leads to some confusion and a lot of complexity when downloading/installing Magisk through the app. Starting from v22.0, the Magisk app (renamed from Magisk Manager) includes everything it needs within the APK itself, making installation a 100% offline process.
From Magisk v22.0
Magisk is nothing without the Magisk Manager app.
安装方式
Magisk修补Boot其实是修补Boot镜像中的Ramdisk
因此,对于有Ramdisk的设备,可以直接修补Boot;否则只能修补Recovery(也有例外,取决于OEM的实现方式),这会导致必须从Recovery启动才能使用Magisk doc
A/B设备OTA更新,如何保留Magisk(Root)
对于已有Magisk的A/B分区设备,全量OTA更新会安装完整的系统到未使用的槽位(假设Slot B),即使原来Slot B中有Magisk也会被新系统覆盖掉,丢失Magisk
Magisk APP提供了【安装到未使用的槽位】,OTA后不要直接重启,先在Magisk中【安装到未使用的槽位】,再重启,这样就能保证重启设备后(自动切换槽位),新的分区有Magisk可用
这里重启可能会花较长时间
busybox
Magisk自带功能完整的BusyBox,位于/data/adb/magisk/busybox
- vi编辑器:
busybox vi <filename>
OTA 更新
OTA(Over-the-AirTechnology)
OTA更新:手机终端通过无线网络下载远程服务器上的升级包,对系统或应用进行升级的技术。
什么情况会导致无法正常OTA更新?
- 刷入第三方TWRP后,进行OTA更新,可能会:
- OTA会下载全量更新包(完整的系统),TWRP会被替换掉
- 变砖:升级重启时,无限重启进不去
MIUI官方ROM下载:update_miui_ota
卡刷
在BL解锁的状态下,通过Recovery,把SD卡中的文件刷入系统
如果刷入不同的系统(ROM,OS),一般都需要清理很多数据(双清、四清)
如果只刷入软件包,如Magisk,就不用清数据
线刷
用数据线连接电脑,通过Fastboot进行刷机
9008/EDL 模式
可以绕过BL锁(?),最底层的刷机方式(又叫深度刷机),需要9008线(又叫高通EDL线、救砖线、工程线)
QPST
Qualcomm Product Support Tool,高通刷机工具,QPST Tool
刷机工具,可以把(原厂)固件刷入基于高通芯片组的设备里面
集成(inbuilt)了QFIL
QFIL
Qualcomm Flash Image Loader,QFIL Tool
A/B 分区
Android 8.0时,Google提供了A/B分区选项,供应商(OEM)可以选择是否启用这项功能
A/B分区就是同时在硬盘上存储了2套系统,进行OTA更新时,实际是在更新另一套系统(当前在A,就更新B,反之亦然),这样就不会影响当前系统的继续使用,在后台静默更新,也叫无缝更新(Seamless Updates)
Treble Check 这个APP可以可以查看当前设备是否支持A/B分区
fastboot getvar all
其中
-
slot-count
:有几个分区(槽) -
current-slot
:当前位于哪个分区(槽)
有2种情况会切换分区:
- 进行OTA更新,然后重启设备,就会自动切换到新更新的分区
- 使用
fastboot set_active [SLOT]
命令手动切换分区
How to Check if You’re on Partition Slot A or Slot B?
刷写镜像
- 【! 重要 !】USB接口选择非常重要!USB2.0的兼容性更好,3.0可能会出现各种奇怪的问题
-
不指定分区
fastboot flash boot xxx.img
会自动刷到当前所在槽位(slot) - A/B分区的Boot分别为
boot_a
和boot_b
V_A/B 分区
虚拟A/B分区,A/B分区的一种实现方式?
出厂Android 11和V_A/B的机型一般没有独立的Recovery分区,而是被合并进了Boot分区,也就无法使用传统的卡刷方法
解密DATA分区
Android 6.0开始对DATA
分区进行了加密,不解密就无法进行读写,也就无法刷入软件包或ROM系统
根据刷入的第三方Rec,解密方式一般有以下几种:
- 自带解密的Rec,直接能挂载访问
DATA
分区 - 打解密补丁包
- 格式化
DATA
分区
Android Debug Bridge(adb)
连接准备
有线连接
- Android设备在开发者选项中打开USB调试
- Windows电脑安装USB驱动(好像小米解锁工具里的驱动就行)
adb 命令
adb --help
查看帮助,有很多手册上没写的命令
adb devices -l
查看已连接的设备,如果找不到设备可以重启一下adb服务(adb kill-server
)
adb disconnect [HOST[:PORT]]
不指定HOST
就断开所有连接,PORT
默认5555
adb reboot [bootloader|recovery|edl]
重启到fastboot,recovery,edl模式;不指定模式就重启设备
adb -t [ID] [command]
:根据transport id
选择设备
adb root
:以root权限启动adb
adb shell
adb shell
进入交互式shell环境
ls /system/bin
查看可用命令
su
获取root权限
pm list packages
等价于pm -l
:列出安装的所有应用(包)
pm path [package]
查看给定包的.apk
所在路径;也可以在/data/app
目录下搜索包名(位于乱码目录的子目录)
fastboot 命令
注意:并不是所有机型都支持全部fastboot命令,某些机型可能不支持特定命令
fastboot
的所有命令,需要设备处于fastboot模式下,并且连接到电脑才可以使用
fastboot --help
查看帮助
查看fastboot模式下的连接设备fastboot devices
fastboot oem device-info
查看解锁状态
fastboot getvar [unlocked|product|...|all]
显示指定的bootloader变量
fastboot flashing unlock
解锁
fastboot flash PARTITION [FILENAME]
以镜像文件(.img)FILENAME
,刷写分区PARTITION
fastboot reboot [bootloader]
重启设备(到fastboot)
fastboot oem reboot-recovery
重启到Recovery
fastboot boot xxx.img
本次(临时)以xxx.img
这个boot启动系统(有些机型不支持),以Magisk修补镜像启动可以获得Root权限
手机运行ADB
- Magisk ADB模块:ADB & Fastboot for Android NDK
- 被调试的设备应打开【USB调试】,调试本机就打开本机的【USB调试】
- 任意终端模拟器,输入
su
获取root权限,即可使用adb命令
社区
实战总结
解锁
用fastboot命令解锁前记得关闭锁屏密码,解锁后密码可能失效,导致无法进入系统。要么清除密码,要么格式化/Data
(密码存里面)
刷写镜像
【玄学事件】命令就是fastboot flash boot xxx.img
没错,默认刷到当前槽位,但由于未知的神秘原因刷入失败,重启设备再尝试,成功刷入。开始以为是USB3.0的问题,后面再测试发现3.0也能正常刷入。也测试了指定槽位fastboot flash boot_b xxx.img
,一切正常