解开 JFFS2 文件系统镜像

解开 JFFS2 文件系统镜像

解开 JFFS2 文件系统镜像

(摘自 (博客大巴):http://telltruth.blogbus.com/logs/25057536.html,在此对原作者表示感谢)

在 mtd-utils 里边有 mkfs.jffs2 和 jffs2dump. 那个 mkfs.jffs2 用来把一堆输入文件打成一个 JFFS2 文件系统的镜像文件, jffs2dump 可以显示一个镜像文件里边各个文件的各个 inode 的信息. --- 但是没有一个程序可以直接把镜像文件解开, 把里边的文件提取出来.

++++++++++++++++++++++++++++++++++++++++++++++

方法1

可以先把镜像文件挂载到一个目录上, 再把里边的文件拷贝出来. 不过直接用 `mount -t jffs2 -o loop' 挂载 JFFS2 镜像是不行的, 因为 `/dev/loop#' 不是一个 MTD 设备. 这儿就要用到 block2mtd 这个内核模块了.

# make the JFFS2 image, /tmp/rootfs.jffs2, a block device
losetup /dev/loop0 /tmp/rootfs.jffs2

# convert it to a MTD device
modprobe block2mtd
echo "/dev/loop0" > /sys/module/block2mtd/parameters/block2mtd
# or
#modprobe block2mtd block2mtd=/dev/loop0
# now there should be an entry in /proc/mtd

# for /dev/mtdblock#
modprobe mtdblock
# now /dev/mtdblock0 is created automatically

# this would be done automatically when mount
#modprobe jffs2

# mount it, in read only mode so that it is not modified by accident
mount -t jffs2 -o ro /dev/mtdblock0 /mnt/jffs2
# extract files
rsync -av /mnt/jffs2/ /tmp/rootfs
# or
#tar -cf - -C /mnt/jffs2 . | tar xvf - -C /tmp/rootfs
# or whatever...

# cleanup
umount /mnt/jffs2
rmmod jffs2
rmmod mtdblock
rmmod block2mtd
losetup -d /dev/loop0
#rmmod mtd_blkdevs mtd

这些命令都得有 root 权限才行呢. 这儿假设了 /dev/loop0 没被别人占用, 而且这个 MTD 块是 /dev/mtdblock0. 用 `losetup -f' 可以看空闲的 loop 设备, 看 /proc/mtd 的内容就能知道该挂载哪个 mtdblock 了.

补充:

昨天忽略了很重要的一点. 设 block2mtd 的参数, 格式是 `block2mtd=<dev>[,<erasesize>]', 这个 <erasesize> 说是可选的, 其实还是得设的.

不设的话, block2mtd 给 erasesize 的默认值是 PAGE_SIZE, 也就是 4 kB. 这样挂载成功, 拷贝成功, 出来的文件里边却但是总是有坏的地方. 用 dmesg 看的话, 能看到好多报错.

我这里把 erasesize 设成 131072, 也就是 128 kiB 就好了. --- 这个要跟当初 mkfs.jffs2 时 -e 指定的大小一样.

modprobe block2mtd block2mtd=/dev/loop0,131072

+++++++++++++++++++++++++++++++++++++++++++++++++

方法2

另外今天我又知道了一个办法, 不用 block2mtd, 而是用 mtdram 的.

# default total_size is 4 MiB, which may be too small for use
# here I set it to 262144 kiB, ie 256 MiB
modprobe mtdram total_size=262144
# /proc/mtd should have an entry mtd0 now
modprobe mtdchar
# /dev/mtd0 created automatically

# write the image to /dev/mtd0
dd if=/tmp/rootfs.jffs2 of=/dev/mtd0
modprobe mtdblock
mkdir /mnt/jffs2
# modprobe jffs2
mount -t jffs2 -o ro /dev/mtdblock0 /mnt/jffs2
# umount jffs2
umount /mnt/jffs2
# umount mtd
rmmod jffs2 mtdblock mtdchar mtdram mtd_blkdevs mtd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值