最近发现手头的设备,super 下的分区镜像全换成 erofs 了,erofs 是完全只读的文件系统,可以将其理解为一个经过优化的压缩包。
想着修改一下系统文件,然后找了好多工具来转换它。突然灵光一现,Linux 不就是最好的解包工具么!还用找什么工具!直接走起~
挂载镜像
super.img 直接用 7z 解包即可。
解包出来会有例如 system_a system_ext_a product_a vendor_a 等镜像。
erofs 格式 7z 目前不能被正常识别并支持。
找到需要修改的镜像,例如 system_a.img。
执行如下命令:
mkdir tmp sudo mount system_a.img tmp
拷贝文件
全拷贝镜像中的所有文件,包括权限、用户组、selinux contents 等:
cp -rf --preserve=all tmp system umount tmp
修改文件
注意:如果是同名文件,直接使用 cp 命令覆盖,不会让权限、selinux contents 等发生改变。
如果需要新建文件,则需要设置权限,所有者,并手动 chcon 变更 selinux contents 内容。
重新打包 erofs
简单的很,就一条命令:
mkfs.erofs -zlz4hc system_new.img system/
生成的新的镜像为 system_new.img。
进 fastbootd 模式,刷进去试试看吧。
哦,对了,记得去除 dm-verity 才能使用修改的镜像哦。
方法也很简单,fastboot 刷入当前版本系统固件的 vbmeta。
fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img
参考
erofs 参考:
https://source.android.com/docs/core/architecture/kernel/erofs?hl=zh-cn
https://github.com/erofs/erofs-utils/blob/dev/README
评论前必须登录!
立即登录 注册