前言:
今天尝试将证书写入到system目录中,发现目录无法挂载,就很奇怪,研究了下发现是erofs系统,EROFS(Enhanced Read - Only File System)即增强型只读文件系统。高版本都不再使用ext4,为了更好的系统流畅都已经换成了erofs,那么我们常用的mount无法修改erofs格式的目录为可写权限,
mount | grep ' / '
可以看到为erofs格式
mount -o rw,remount -t auto /
使用mount虽然没有报错但是可以看到并没有成功,还是没有写权限
因此如果想要修改系统内容,需要使用如下方法
关闭avb:
如果要刷入自己修改的system目录,首先必须关闭AVD,另外Android存在A/B分区系统,主要是用于OTA场景,一套系统分区,另一套备份分区,当运行系统出现bug可以还原到备份系统,或者当OTA升级时可以AB系统交替进行,进而实现无缝更新,详细的OTA升级的这里就不展开,我们首先可以使用如下命令确定当前使用的是哪个系统:
getprop ro.boot.slot_suffix
可以看到我们当前使用的是B系统
ls -l /dev/block/by-name
获取到boot_b的目录后使用如下命令将目录内存抠出生成img文件
dd if=/dev/block/sde35 of=/sdcard/boot_b.img
adb pull /sdcard/boot_b.img
同样的方法抠出vbmeta.img
dd if=/dev/block/sde40 of=/sdcard/vbmeta_b.img
adb pull /sdcard/vbmeta_b.img
下面就要刷入vbmeta同时关闭AVB,
fastboot --disable-verity --disable-verification flash vbmeta_b vbmeta_b.img
--disable-verity:禁用 dm-verity(设备映射验证)
dm-verity 是一种用于保护设备分区的完整性和真实性的安全特性。它通过验证分区的数据是否被篡改来防止未经授权的修改
--disable-verification:禁用 验证 步骤。
在刷写镜像时,通常会进行验证以确保刷写的镜像正确无误。禁用验证可以加快刷写过程,但同时增加了刷写错误镜像的风险,因为系统不会自动检查镜像的完整性。
使用伤处命令可以关闭avb校验,一定要关,不然刷机变砖
getprop | grep avb
这里只显示版本号没有其他内容则表示关闭成功
制作system镜像
制作system精选需要使用 DNA-Android和MT管理器两个软件生成system_b的镜像
具体的流程如下:
1.打开DNA-Android->新建工程
2.其他-提取镜像文件->搜索system->选择system_b
3.保存导出路径后打开MT管理器
4.选择内部存储->DNA,一个是image一个打开NA_项目
5.将提取的system_b.img复制到NA_项目
6.打开DNA->工程菜单->分解img->选择文件分解
7.打开MT管理器->根目录->data->找到DNA->打开项目->进入解压后的system_b文件
8.进入到需要修改的文件路径,长按点击属性,修改权限,然后按照需求修改内容,这里我放入了https证书文件
9.打开DNA->选择合成img-dat-br->选择项目->生成
10.进入MT管理器找到NA项目的out目录导出生成的img文件
完成后刷入system_b
fastboot flash system_b system_b.img
fastboot reboot fastboot
可以看到新刷入的系统中包含了我自己的证书文件,解决了erofs只读问题
总结:
归纳下流程
1.备份boot_b.img,防止后续变砖后可以从新刷入
2.备份 vbmeta_b.img,为了重新刷入的同时关闭AVB的安装校验
3.使用DNA-Android和MT管理器制作system_b镜像,并修改制作的镜像文件内容,重打包
4.刷入我们自己制作的system_b镜像,完成狸猫换太子。
一定要备份数据,不然可能变砖;