我有一个使用 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 上编译。操作如下:
- 安装依赖项:
sudo apt-get install qt-sdk
hg clone https://code.google.com/p/yaffey/
在文件中
yaffey/yaffs2/yaffs_guts.h
,更改行typedef unsigned loff_t;
到
#include <stdlib.h>
- 编译:
cd yaffey && qmake && make
- 跑步
./yaffey
。 - 打开您的图像,进行所需的更改,然后保存(它拒绝覆盖;您必须选择其他文件名)。
当我尝试的时候,生成的图像在 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 来更新它。我必须做一些改变才能让它编译,我希望这会对其他人有所帮助。
编辑 yaffey.pro 及以下
QT += core gui
添加
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
编辑 MainWindow.cpp 并搜索/替换:
setResizeMode
和setSectionResizeMode
编辑 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/