Android M1 Initial Preview系统镜像格式解析与处理

4次阅读
没有评论

问题描述

从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

注意事项

  • 在修改或重新打包镜像文件之前,请确保备份原始镜像文件。
  • 修改系统分区可能会影响设备的正常运行,特别是涉及avbdm-verity等安全机制时,请谨慎操作。
  • 在重新打包镜像文件后,确保更新设备的引导分区以确保新镜像能够正确加载。

以上步骤详细说明了如何处理Android M1 Initial Preview系统镜像文件,并提供了多种方法来访问和修改其内容。

正文完