如何挂载yaffs2文件系统

我有一个.img文件,它使用我要挂载的yaffs2文件系统(Android分区映像)。 我似乎无法使用mount命令执行此操作。 我怎样才能做到这一点? 我正在使用Ubuntu 12.04。

另外,我不想提取它(我知道如何使用unyaffs )。 我想挂载它。

Ubuntu目前不支持YAFFS2。 有一个function请求来打包YAFFS2内核模块,它将为文件系统提供安装支持: [needs-packaging] yaffs2 。

内核支持

因此,目前,如果您需要mount支持,则必须自己编译。 YAFFS网站提供了使用YAFFS支持编译Linux内核的说明(使用精确的32位):

  • 准备使用Yaffs构建Linux
  • 将Yaffs构建到Linux中

Ubuntu wiki还提供了有关编译自己内核的一般信息。

提取并重建

或者,尝试使用yaffs2utils来提取和重建图像。

请注意, 由于存在错误 ,您必须指定--yaffs-ecclayout选项,否则它将无声地失败。 所以提取,尝试类似的东西

 git clone https://code.google.com/p/yaffs2utils/ cd yaffs2utils && make && cd .. ./yaffs2utils/unyaffs2 --yaffs-ecclayout system.img tempdir 

从理论上讲,你也可以使用mkyaffs2重建图像,但我无法使它工作(结果不可启动)。

Yaffey

我找到了一个程序, Yaffey ,它允许你使用GUI编辑YAFFS2图像:

Yaffey

虽然主页说它只是Windows,但是在Ubuntu Precise上进行了一些微不足道的改动 。 为此:

  1. 安装依赖项: sudo apt-get install qt-sdk
  2. hg clone https://code.google.com/p/yaffey/
  3. 在文件yaffey/yaffs2/yaffs_guts.h ,更改该行

     typedef unsigned loff_t; 

     #include  
  4. 编译: cd yaffey && qmake && make
  5. ./yaffey
  6. 打开图像,进行所需的更改并保存(它拒绝覆盖;您必须选择不同的文件名)。

当我尝试它时,生成的图像在Android模拟器中成功启动。

0. yaffs2或ext4

Android最初使用YAFFS2作为文件系统。 在Android 2.3之后,文件系统变为ext4

来自https://stackoverflow.com/questions/23946910/

1.检测图像类型

 file system.img system.img: VMS Alpha Exectutable 

//这是yaffs2图片

 file system.img system.img: data 

//这可能是ext4稀疏图像

 blkid -pO 40 system.img system.img: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" VERSION="1.0" TYPE="ext4" USAGE="filesystem" 

//是的,它是ext4稀疏图像

// 40 = sizeof(struct sparse_header)+ sizeof(struct chunk_header)

ref: simg2img源代码

2.用于ext4稀疏图像的simg2img

这是一个稀疏的文件系统,我认为你需要首先使用simg2img解析它。 你可以下载它作为我在这里发布的ext4_utils的一部分,当我在Nexus7图像上使用它时。 解压缩映像并按如下方式安装:

解压:

 ./simg2img rootfs.img rootfs.ext4 

安装:

 sudo mount -o loop rootfs.ext4 tmpmnt/ 

一旦你解压缩它并将其攻击,你就可以使用make_ext4fs重建它。 您应该阅读我关于黑客攻击Nexus7图像的博客条目,因为它涵盖了大部分内容,并且它引用的脚本可能很有用。

我想我会用Ubuntu 13来更新它。我必须做一些修改才能编译,我希望能帮助别人。

  1. 编辑yaffey.pro及其下

    QT += core gui

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

  2. 编辑MainWindow.cpp并搜索/替换:

    setResizeMode with setSectionResizeMode

  3. 编辑YaffTreeView.cpp并在其下

    #include

    #include

然后你应该能够编译。

在遵循nospam和Mechanical Snail的步骤之后,我还必须在main.cpp中进行此更改

更改:

 #include  

至:

 #include  

然后它最终编译

只为用户处理ext4稀疏图像 (android system.img


0. yaffs2或ext4

Android最初使用YAFFS2作为文件系统。 在Android 2.3之后,文件系统变为ext4

来自https://stackoverflow.com/questions/23946910/

1.检测图像类型

 file system.img system.img: VMS Alpha Exectutable 

//这是yaffs2图片

 file system.img system.img: data 

//这可能是ext4稀疏图像

 blkid -pO 40 system.img system.img: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" VERSION="1.0" TYPE="ext4" USAGE="filesystem" 

//是的,它是ext4稀疏图像

// 40 = sizeof(struct sparse_header)+ sizeof(struct chunk_header)

ref: simg2img源代码

2.用于ext4稀疏图像的simg2img

作为mfisch的回答。

将稀疏图像转换为原始图像:

 ./simg2img system.img system_raw.img 

安装:

 sudo mount -t ext4 system_raw.img tmpmnt/