问题描述
从GitHub下载了Android M1 Initial Preview的Emulator安装包,并尝试解压其中的system.img
文件。然而,发现该文件并不是yaffs2或sparse格式,导致直接解压失败。进一步分析发现该文件是一个fdisk分区表的镜像文件,包含多个分区。但由于分区表的特殊格式,直接挂载分区失败。
解决方案
方案1:使用kpartx
工具处理镜像文件
kpartx
工具可以帮助我们更好地处理包含多个分区的镜像文件。首先,我们需要使用kpartx
加载镜像文件,然后通过分区映射来访问每个分区的内容。
步骤1:加载镜像文件
sudo kpartx -av system.img
步骤2:查看分区映射
ls /dev/mapper/
步骤3:挂载分区
sudo mount -t ext4 -o loop,ro,noexec,noload,noatime /dev/mapper/loop0p2 /mnt/android-1/system_root
步骤4:查看并操作文件系统
thunar /mnt/android-1/system_root
方案2:使用Dynamic Partition Tools
处理动态分区
对于动态分区,可以使用Google提供的Dynamic Partition Tools
进行处理。这些工具可以帮助我们提取和重新打包动态分区镜像。
步骤1:克隆并进入Firmware_extractor
仓库
git clone https://github.com/AndroidDumps/Firmware_extractor.git
PATH=$PATH:$(realpath Firmware_extractor/tools/Linux/bin)
步骤2:解压分区
mkdir -p /mnt/android-1 ../extracted
kpartx -av system.img
lpunpack -p system /dev/mapper/loop2p2 ../extracted
步骤3:挂载分区
mount -t ext4 -o loop,ro,noexec,noload,noatime ../extracted/system.img /mnt/android-1/system_root
thunar /mnt/android-1/system_root
方案3:修改分区内容
若需要修改分区内容,首先需要确保分区可以写入。可以通过增加分区大小并复制共享块来实现。
步骤1:增加分区大小
cd ../extracted
dd if=/dev/zero bs=1G seek=1 count=0 of=system.img
resize2fs system.img 1G
e2fsck -E unshare_blocks system.img
步骤2:挂载分区并修改内容
mount -t ext4 -o loop,ro,noexec,noload,noatime ../extracted/system.img /mnt/android-1/system_root
thunar /mnt/android-1/system_root
方案4:重新打包镜像文件
若需要重新打包镜像文件,可以使用lpmake
工具进行操作。
步骤1:重新打包
lpmake --metadata-size 65536 --super-name super --metadata-slots 1 --device super:3229614080 --group main:2366435328 --partition system:readonly:784314368:main --image... --sparse --output super.simg
步骤2:替换原始镜像
cat super.simg > /dev/mapper/loop2p2
注意事项
- 在修改或重新打包镜像文件之前,请确保备份原始镜像文件。
- 修改系统分区可能会影响设备的正常运行,特别是涉及
avb
或dm-verity
等安全机制时,请谨慎操作。 - 在重新打包镜像文件后,确保更新设备的引导分区以确保新镜像能够正确加载。
以上步骤详细说明了如何处理Android M1 Initial Preview系统镜像文件,并提供了多种方法来访问和修改其内容。
正文完