gsi*_*011 8 filesystem mount android
我有一个 .img 文件,它使用我想要挂载的 yaffs2 文件系统(Android 分区映像)。我似乎无法使用 mount 命令来做到这一点。我怎样才能做到这一点?我正在使用 Ubuntu 12.04。
另外,我不想提取它(我知道如何使用unyaffs)。我想安装它。
Mec*_*ail 15
Ubuntu 目前不支持 YAFFS2。有一个打包 YAFFS2 内核模块的功能请求,它将为文件系统提供挂载支持:[needs-packaging] yaffs2。
因此,目前,如果您需要挂载支持,则必须自己编译。YAFFS 网站提供了编译支持 YAFFS 的 Linux 内核的说明(使用 Precise 32 位):
Ubuntu wiki 也有关于编译你自己的内核的一般信息。
或者,尝试使用yaffs2utils提取和重建映像。
请注意,由于存在错误,您必须指定该--yaffs-ecclayout选项,否则它将静默失败。所以要提取,请尝试类似
git clone https://code.google.com/p/yaffs2utils/
cd yaffs2utils && make && cd ..
./yaffs2utils/unyaffs2 --yaffs-ecclayout system.img tempdir
Run Code Online (Sandbox Code Playgroud)
从理论上讲,您也可以使用 重建映像mkyaffs2,但我无法使其正常工作(结果无法启动)。
我找到了一个Yaffey程序,它可以让您使用 GUI 编辑 YAFFS2 图像:

虽然主页说它仅适用于Windows,但它在 Ubuntu Precise 上进行了微不足道的更改。这样做:
sudo apt-get install qt-sdkhg clone https://code.google.com/p/yaffey/在文件中yaffey/yaffs2/yaffs_guts.h,更改行
typedef unsigned loff_t;
Run Code Online (Sandbox Code Playgroud)
到
#include <stdlib.h>
Run Code Online (Sandbox Code Playgroud)cd yaffey && qmake && make./yaffey。当我尝试它时,生成的图像在 Android 模拟器中成功启动。
Android最初用作
YAFFS2文件系统。Android 2.3之后,文件系统变成了ext4.
file system.img
system.img: VMS Alpha Exectutable
Run Code Online (Sandbox Code Playgroud)
// 这是 yaffs2 图像
file system.img
system.img: data
Run Code Online (Sandbox Code Playgroud)
//这可能是 ext4 稀疏图像
blkid -pO 40 system.img
system.img: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" VERSION="1.0" TYPE="ext4" USAGE="filesystem"
Run Code Online (Sandbox Code Playgroud)
//是的,这是ext4稀疏图像
//40 = sizeof(struct稀疏头) + sizeof(结构chunk_header)
参考:simg2img源代码
这是一个稀疏文件系统,我认为您需要首先使用simg2img对其进行非稀疏化。您可以将其作为 ext4_utils 的一部分下载,当我在 Nexus7 映像上使用它时,我已将其发布在此处。解压镜像并挂载如下:
拆包:
./simg2img rootfs.img rootfs.ext4
Run Code Online (Sandbox Code Playgroud)
山:
sudo mount -o loop rootfs.ext4 tmpmnt/
Run Code Online (Sandbox Code Playgroud)
一旦你解压并破解它,你就可以使用 make_ext4fs 重建它。您可能应该阅读我撰写的有关破解 Nexus7 映像的博客文章,因为它涵盖了大部分内容,并且它引用的脚本可能很有用。