如何挂载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图像:
虽然主页说它只是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
- 编译:
cd yaffey && qmake && make
- 跑
./yaffey
。 - 打开图像,进行所需的更改并保存(它拒绝覆盖;您必须选择不同的文件名)。
当我尝试它时,生成的图像在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来更新它。我必须做一些修改才能编译,我希望能帮助别人。
-
编辑yaffey.pro及其下
QT += core gui
加
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
编辑MainWindow.cpp并搜索/替换:
setResizeMode
withsetSectionResizeMode
-
编辑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/