内核支持

内核支持

我有一个使用 yaffs2 文件系统(Android 分区映像)的 .img 文件,我想将其挂载。我似乎无法使用 mount 命令执行此操作。我该怎么做?我使用的是 Ubuntu 12.04。

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

答案1

Ubuntu 目前不支持 YAFFS2。有一个功能请求用于打包 YAFFS2 内核模块,该模块将为文件系统提供挂载支持:[需要包装] 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

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

雅菲

我发现了一个程序,雅菲,它允许您使用 GUI 编辑 YAFFS2 映像:

雅菲

虽然主页上说它只适用于 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 <stdlib.h>
    
  4. 编译:cd yaffey && qmake && make
  5. 跑步./yaffey
  6. 打开您的图像,进行所需的更改,然后保存(它拒绝覆盖;您必须选择其他文件名)。

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

答案2

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 = 大小(结构 sparse_header)+大小(结构 chunk_header)

參考文獻:simg2img 源代码

2. simg2img 用于 ext4 稀疏图像

这是一个稀疏文件系统,我认为你需要先使用simg转img。你可以将其作为 ext4_utils 的一部分下载,我已将其发布在这里当我在 Nexus7 图像上使用它时。解压图像并按如下方式挂载:

解压:

./simg2img rootfs.img rootfs.ext4

山:

sudo mount -o loop rootfs.ext4 tmpmnt/

一旦你解压并破解了它,你就可以使用 make_ext4fs 重建它。你应该阅读我关于破解 Nexus7 图像的博客文章因为它涵盖了大部分内容并且它引用的脚本可能会有用。

答案3

我想用 Ubuntu 13 来更新它。我必须做一些改变才能让它编译,我希望这会对其他人有所帮助。

  1. 编辑 yaffey.pro 及以下

    QT += core gui

    添加

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

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

    setResizeModesetSectionResizeMode

  3. 编辑 YaffTreeView.cpp 并

    #include <QDebug>

    添加

    #include <QMimeData>

然后您就能够进行编译了。

答案4

仅供用户处理ext4 稀疏图像(安卓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 = 大小(结构 sparse_header)+大小(结构 chunk_header)

參考文獻:simg2img 源代码

2. simg2img 用于 ext4 稀疏图像

正如mfisch的回答。

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

./simg2img system.img system_raw.img

山:

sudo mount -t ext4 system_raw.img tmpmnt/

相关内容