KMnO4y_Fish's Blog

返回

[基础预科] Android 分区、启动模式、FastbootBlur image

Android 分区 与电脑硬盘相同,Android 上的存储器同样有多个分区(但是,建议不要在 Android 上尝试“手动切盘”)。

启动模式 在 Windows 电脑上,我们知道,启动时按 Enter/F2/F12 会打断正常启动,且可以进入另一个世界。在 Android 设备上,同样有非正常启动的模式。Recovery 模式可以刷入官方刷机包修复受损的系统,还可以清除数据;Fastboot 模式在解锁后将允许用户刷入自定义的镜像,实现系统的定制和 Root 权限的获取。

Fastboot Fastboot 模式是 Bootloader 的一个启动方式。Bootloader 解锁后,可以使用 Fastboot 模式自定义刷机。

Android 文件系统分区#

引入#

打开系统自带的文件管理器,我们可以看到许多文件。

文件管理器(就假装是系统自带的那个)

其中有应用的数据,有磁盘缓存,有照片录音,有接收的文件,甚至有一些被称为“系统文件”,千万不能删除的东西……

Android 很好,“毫无保留”地展示了用户的数据,不像苹果,导出照片都要使用专门的工具。这,应该就是系统中的全部文件了吧。

坐井观天!

你可曾想过,你安装的应用去了哪里?那些你痛恨而又“不能删除”的预装软件在哪?那些“不能修改”的游戏进度数据在哪?有那么多人想要获取 Root 权限,他们究竟想要修改什么?

你又可曾注意过,百度手机助手提醒你文件已下载到 /storage/emulated/0/Downloads/,而不是 Downloads/

其实,打开文件管理器后看到的,根本就不是系统内所有文件,而只是“用户数据”部分,只是“用户数据”部分的冰山一角!

不妨安装 Root Explorer 文件管理器,一探究竟。【Root Explorer 下载】

原来,之前的文件管理器中所看到的目录,只是 /storage/emulated/0。真正的最高层目录,是系统根目录。还有许多 . 开头的文件,系统自带的文件管理器是不显示的。

存储与根目录

当然,你更有可能看到这个:

Android 7 以上版本,根目录部分内容出现拒绝访问导致打开失败

进一步观察不难发现,不同的目录可能有不同的文件系统类型:/system /vendor 目录有独立的存储空间;/data 的存储空间与 /storage/emulated/0 共享;/sys 本身就是可读写区域,且没有存储空间限制信息;根目录下大多数地方创建的文件重启后会消失……这意味着,根目录下不仅仅是简单的文件夹和文件,而是有不同的分区。

分区与挂载#

在 Windows 上,我们可以将硬盘分为多个分区。

硬盘分区

要访问分区中的文件,有两种方式。一种是指派盘符(新分区产生后,系统会自动完成这一步,除非所有大写字母已经分配完),然后通过盘符访问(如 G:\xxx),这种方式下,可移动外接设备中文件的路径可能会改变。

另一种不太常用,是将磁盘分区装入空白 NTFS 文件夹中(如 E:\mnt\可回收垃圾\xxx)。也就是说,在另一个已分配盘符的分区中新建文件夹,将该文件夹作为访问该磁盘分区的路径。若对可移动设备采取这种分配方式,则其中文件的路径将固定下来。

固定分配的文件夹路径

Android 基于 Linux 内核。在 Linux 内,没有盘符这一概念,只有唯一的根目录 /。一切分区(包括外接存储设备)均以装入空文件夹的方式装载到某一目录。这一操作称为挂载(mounting)。

同时,挂载也可以被看成是打开分区的操作,因而有不同的打开方式,常见的有只读(r/o,不能写入)、读写(r/w)和装入内存盘(可以写入,断电或重启时丢弃更改)。

值得一提的是,由于 Linux 中每个设备都有对应的文件路径,被挂载的分区也有自己的路径(如 /dev/block/sda1 /dev/block/mmcblk0p6 /emmc@android)。这些路径在文件管理器中表现为一个文件。挂载前,无法直接修改其中的数据。

常见的分区#

不同的 Android 设备具有不同的分区表,其具体分区也不太一样。此处列举一些常见的分区。

分区名Scatter 名称镜像文件名挂载模式挂载路径用途
bootBOOTIMGboot.img--启动镜像[注1]
kenrel-kenrel.img--系统内核
rootfs-rootfs.imgr/o/根目录自有的文件
ramdisk-ramdisk.imgr/o/init启动时最先挂载的一批程序文件[注2]
systemANDROIDsystem.imgr/o/system系统分区
recoveryRECOVERYrecovery.img--恢复模式启动镜像[注3]
hbootUBOOTlk.bin--启动引导程序
splash1LOGOlogo.bin--开机第一屏幕
nvramNVRAMnvram.binRAM-MAC 地址等硬件信息[注4]
cacheCACHEcache.imgr/w/cache缓存
userdataUSERDATAdata.imgr/w/data用户数据
--sdcard.imgr/w/sdcard内置存储空间[注5]
  1. boot.imgkenrel.img ramdisk.img rootfs.img 打包在一起的产物。较老的机型中,这几个分区是分开的。
  2. 不是每个机型都存在 ramdisk。存在该分区的设备才能正常使用 Magisk。
  3. recovery 分区和 boot 分区结构相同。
  4. nvram 分区不一定存在,但开机后 NVRAM 一定存在。
  5. sdcard 应当是 userdata 的一部分,路径为 /data/media/0/sdcard/Android/obb 例外,对应 /data/media/obb)。只有极少数模拟器中,内置 sdcard 有独立分区。挂载路径 /sdcard 为快捷方式,实际路径应该是 /storage/emulated/0
  6. / /sys 下的自有内容从 rootfs 分区内读出。对其进行的修改会存储于内存(运行内存)中,故重启后会还原。

启动模式#

引入#

电脑系统炸了,我们会插入启动盘,进入 Windows PE 或便携版 Linux 系统,执行修复。

要为电脑安装新的系统,我们会插入安装介质,从启动菜单中选择启动选项,安装新的系统。

在 Android 设备中,同样存在几种非正常启动的启动模式。

安全模式#

若系统仍能进入,但由于装错程序或设置失误导致无法正常使用,则可以使用安全模式恢复。下面是常见情形:

  • 使用第三方锁屏软件出现事故。
  • 设备安装恶意程序后被锁住。
  • 正常安装软件或更改系统设置后出现无限重启的故障。

安全模式的常见启动方法有两个:

  • 若系统界面仍能使用,则在开机状态下长按电源键,然后长按弹出菜单中的“关机”(8.0 以上系统也可以长按“重新启动”)。系统将弹出安全模式提示。点击“确定”即可重启进入。
  • 关机状态下长按电源键,待屏幕亮起后,放开电源键,立即按住音量下,直到系统开始初始化(开机动画开始出现)。系统将继续启动进入安全模式。

根据机型不同,安全模式有以下两种不同的效果:

  • 所有第三方应用被暂时停用。系统设置暂时恢复默认值,壁纸变为黑色,左下角出现“安全模式”字样。
  • 系统初始化时所有第三方应用停用,应用优化阶段重新启用。第三方应用不能开机自启。壁纸不变,且左下角无“安全模式”字样。

有的设备可能不具备这一功能。

值得注意的是,若设备上安装了 Magisk,则以安全模式启动时,Magisk 会禁用所有模块(包括 MagiskHide)。若安全模式期间打开过 Magisk 应用,则再次重启后,Magisk 将不会恢复被禁用的模块。

Recovery 恢复模式#

恢复模式,顾名思义,是系统的一个备用启动模式,用于恢复系统。在系统无 A/B 分区(无缝系统更新)的情况下,系统更新也在这一模式下进行。

常见的原厂恢复模式

通常,原厂的恢复模式具有以下功能:

  • 从外置 SD 卡或 ADB 传入系统更新包,完成系统更新(系统损坏或 OTA 更新事故时,可以传入全量更新包恢复系统)。 为了确保设备安全,更新包必须是原厂的,经过原厂签名,否则更新无法成功。
  • 清除缓存。
  • 清除数据(双清),以恢复出厂设置。如果安全模式无法修复系统问题,则这是保全手机的一个备用方案。

常见进入恢复模式的方法如下:

  • 在开机状态下,使用 ADB 发送命令 adb reboot recovery
  • 关机状态下,同时按住电源键和音量增大(有的机型还需要按实体 Home 键),直到屏幕亮起。
  • [MediaTek 设备] 关机状态下,同时按住电源键和音量增大,屏幕亮起后,按音量增大键选择 Recovery Mode,然后按音量减小键确认。

可以通过刷机等手段为设备刷入第三方恢复模式系统,如 TWRP。这些系统功能非常强大,允许自定义刷机、文件修改、完全备份等操作,同时支持触屏控制,更加人性化。

Fastboot 快速启动#

快速启动,是 Bootloader 即启动引导程序的一个启动方式,故没有对应的启动分区。进入该模式后,移动设备无法继续操作,需要连接电脑,通过电脑命令行完成进一步操作。

为了保证安全性,Bootloader 默认为锁定状态,不能进行刷机。有的设备制造商为了阻止或减少刷机,会另外增加解锁码限制,用户需要提供申请得到的解锁码才能解锁。

如果打算进行刷机(而不是仅仅看看 Fastboot 长啥样),在进入 Fastboot 模式前,请先进入系统设置的开发者选项,检查是否有“允许 OEM 解锁”选项(该选项通常在第一组内较靠前的位置)。如果有,这表明你的设备不需要解锁码就可以解锁,那么开启该选项,然后按提示输入设备的锁屏密码,随后进入 Fastboot 模式就可以直接解锁;如果没有,表明设备可能需要解锁码。

进入 Fastboot 的常见方式如下:

  • 在开机状态下,使用 ADB 发送命令 adb reboot bootloader
  • 关机状态下,同时按住电源键和音量减小(有的机型还需要按实体 Home 键),直到屏幕亮起。
  • [MediaTek 设备] 关机状态下,同时按住电源键和音量增大,屏幕亮起后,按音量增大键选择 Fastboot Mode,然后按音量减小键确认。

设备成功进入 Fastboot 模式后,将显示 Fastboot 字样。

常见的 Fastboot 界面

确保已安装 Android Platform Tools。随后执行 fastboot devices 命令。

C:\Users\[redacted]>fastboot devices
0123456789ABCDEF        fastboot
plain

随后可以进行刷机操作。

Bootloader 解锁#

输入命令 fastboot oem unlock[5.1 及以下]fastboot flashing unlock[6.0 及以上] 执行解锁。此时,设备上会出现确认界面。请认真阅读所有文字,然后按音量增大键确认,或按音量减小键取消。

确认后观察电脑上的输出。OKAY 则为解锁成功。

完成后,输入命令 fastboot oem lks 再次确认。若输出状态 lks=0,则解锁成功。(注意较老设备可能没有 oem lks 命令,此时请自行跳过这一步)

若解锁不成功,则设备可能是需要解锁码,请查看制造商官网的指引进行申请,或直接使用官方提供的工具解锁。若官方明确不提供解锁服务,请知难而退

一旦解锁成功,再次重启后,将出现数据清空页面。数据清空完成后,设备再次重启,进入系统。

由于解锁后,未经授权的用户可以随意进行自定义刷机,设备是不安全的。

MTK 设备解锁后开机弹出的警告

刷入镜像#

执行命令 fastboot flash <分区名> <镜像文件> 刷入。常见分区名见上文。

执行命令 fastboot boot <镜像文件>,可以将镜像暂时作为 boot 分区启动,这常用来测试 boot.img 镜像能否正常引导。重启后将会还原原来的 boot 分区。(注意较老设备可能没有这一命令)

Fastboot 模式不能回读系统中当前的镜像。

重新启动#

执行 fastboot reboot,设备将立即重新启动。

锁定 Bootloader#

如果只是刷入第三方系统,后续无再次刷机与深度玩机的需求,在测试新系统无问题后,可以锁定 Bootloader,使设备重新变得安全。

如果新的系统中有 Magisk 等 Root 权限装置,则在锁定前,运行 fastboot oem disable-verity,关闭启动与系统分区的验证,以免对其修改后,验证失败导致设备无法启动。

然后运行 fastboot oem lock。设备将出现确认界面,按音量增大确认。这同样会清空数据

完成后,执行 fastboot reboot,设备将立即重新启动。

EDL 紧急下载#

此模式为高通芯片的设备所独有。

设备成为黑砖后,此模式仍然可以使用。

通过插入特殊的“工程线”,设备将进入 EDL 紧急下载模式(也称高通 9008 模式)。此时,可以用 fastboot 或专门的工具进行刷机,以修复系统。此处不过多介绍相关内容。

刷机过程中,屏幕全程无显示。

MediaTek Preloader#

此模式为 MTK 设备所独有。

将设备在关机状态下插入电脑,从提示音可以发现系统短暂地识别了一个 USB 设备。这就是 Preloader 模式。设备成为黑砖后,此模式仍然可以使用。

Preloader 是闪存中的一个程序。若这个程序也被破坏,则连接数据线时,设备将改用无法被破坏的 Bootrom 模式启动,两者区别不大。

SP Flash Tool 可以在设备进入 Preloader 模式后与其交互,进行刷机。此时 Preloader 模式将保持到刷机操作结束。

该模式下,也可以回读闪存中已存在的镜像。这是最直接的系统镜像备份方法。

[基础预科] Android 分区、启动模式、Fastboot
https://ak-ioi.com/blog/play-android/preintro-bootmode
作者 KMnO4y_Fish
发布于 2022年1月08日
评论似乎无法加载。试试刷新?✨