android remount 在调试android 系统的时候是个非常有用的调试手段, 有remount 的帮助, 可以轻松的修改系统分区的某些文件,或者在系统分区添加删除文件。但有时候remount 也会因为一些verity, checkpoint ,和remount 自身的一些原因不能正常工作。最近因为工作原因,对remount 的机制进行了一个大概的了解。

remount的工作原理:

        android 系统native 层通过overlayfs 将只读的系统分区改变成了 “可读可写” 的分区。拿vendor 分区作为例子:

                                                        图1 vendor by overlayfs

reomunt 后, 系统工作的概图如下:

                                                        图2 runtime

        remount 的时候, 在data 分区或者 super 分区通过dm linear 创建了scratch 分区。 系统中的各个分区以erofs 的文件类型mount 到各个mount point 。 而upper 中的文件目录以在/mnt/scratch/overlayfs 目录中。 通过overlayfs 文件系统, 将lower_dir 和 upper_dir 建立起来。 修改或增减的文件,会在upper_dir 中。 这样, 可读可写的各个系统分区就准备好了。

remount 的流程:

  1. 建立scratch 分区
  2. make f2fs on scratch
  3. 建立overlayfs 文件系统 , 如lower_dir = /system , upper_dir=/mnt/scratch/overlayfs/system/upper
  4. 重启的时候, 流程如下图

                                                                图3 开机时的调用流程图 

  1. 重启后, 如果执行 adb remount ,那么 fs_mgr_overlayfs_mount 会被重新调用, 将readonly 的属性去掉。就可以读写系统分区了。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐