简介
在 Android 10 及更高版本上支持了"动态分区",所以 ROM 包中看不到了传统的 system.img 等镜像。支持的动态分区包括:
- System
- Vendor
- Product
- System Ext
- ODM
所以在 super.img 都可能包括以上分区的镜像文件。
具体信息可以查看官方文档 动态分区
具体解包步骤
super.img 的解包必须两个工具 simg2img 和 lpunpack。其中 simg2img 可以在线安装,执行命令后可以按照提示自行安装即可。lpunpack 需要自己下载源码进行编译。lpunpack 生成后是通用的,所以下载别人编译好的 lpunpack 也是可以的,但是需要添加依赖的相关 so 库。注意工具和 so 库是配套的,请一起使用。不要自己混搭工具和 so 库。
下载好的 so 库文件放入 usr/lib/ 目录下即可也可以编辑 .bashrc 文件将 so 库所在目录路径加入到 LD_LIBRARY_PATH 中,命令如下
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库所在目录路径
关于库路径的添加有多种方式,不止上面两种,大家可以搜索相关资料,按照自己的喜好来。
1. 编译 lpunpack 工具
按照以下命令编译即可
source build/envsetup.sh
make lpunpack
生成文件所在目录:out/host/linux-x86/bin
2. 将 super.img 从 Android sparse image 转换为 raw image
命令:simg2img SUPER_IMAGE OUTPPUT_FILE
simg2img super.img super.img_raw
3. 从 raw image 解包出分区镜像文件
命令:lpunpack [-p partition_name] SUPER_IMAGE [OUTPPUT_DIR]
下面以 sysetm 分区镜像文件为例
./lpunpack -p system super.img_raw system (这里 sytem 是目标目录,可以自己创建)
system.img 镜像解出后,就可以采用以下命令进行挂
sudo mount -o ro system.img system(system 是目标目录,可以自己创建)
如果你不知分区名称或者就是想把所有镜像给解包出来可以不指定分区名直接解包
./lpunpack super.img_raw Temp (这里 Temp 是目标目录,可以自己创建)
如果命令执行失败,可以执行 chmod a+x 给 lpunpack 赋予执行权限
其实可以用 lpdump 查看镜像的一些信息,信息里就包括了分区名称
./lpdump super.img_raw(这里是用 simg2img 转换后的文件)
命令执行后的结果如下
关于挂载失败
对于镜像挂载失败,如果出现了类似下面的错误。大概率是你当前的 Linux 内核并没有支持 F2FS 和 EROFS 文件系统。
wrong fs type, bad option, bad superblock on /dev/loop19, missing codepage or helper program, or other error.
F2FS 和 EROFS 简介请查看下面的链接。
F2FS
EROFS
F2FS 和 EROFS 在内核 5.4 版本上编译和安装
- 下载最新内核版本 https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.139.tar.xz
- 解压后进入目录
- make oldconfig
- make prepare && make modules_prepare
- make modules M=./fs/f2fs
- make modules_install M=./fs/f2fs
- make modules M=./fs/erofs
- make modules_install M=./fs/erofs
如果执行执行以下命令不出错就表示编译和安装成功了
modprobe f2fs
modprobe erofs
懒人模式
如果你什么都不想编译和配置环境,可以使用下面的压缩包,解压后可以直接使用相关工具(F2FS 和 EROFS )仍需要自己编译安装),但是注意不要拷贝和移动文件位置。
Tools
提取码:bbbk