ext2/3/4等文件系统可以直接挂载到块设备上,但是

因为jffs2是构建于MTD设备上的文件系统,所以无法通过loop设备来挂载。

  • 可以通过mtdram设备来挂载。mtdram是在用RAM实现的MTD设备,可以通过mtdblock设备来访问。使用mtdram设备很简单,只要加载mtdram和mtdblock两个内核模块即可。这两个内核模块一般的linux内核发行版都有编译好的,直接用modprobe命令加载。
  • 可以通过mtd2block方式访问

下面是具体步骤:

  1. 创建jffs2镜像
sudo pacman -S mtd-utils

mkfs.jffs2 -s 0x1000 -e 0x20000 -p 0x500000 -d test_ext4/ -o jffs2.img
  1. 加载mtdblock内核模块
modprobe mtdblock
  1. 加载mtdram内核模块,将该设备的大小指定为jffs2根文件系统映像的大小,块擦除大小(即flash的块大小)指定为制作该jffs2根文件系统时“-e”参数指定的大小,缺省为64KB。下面两个参数的单位都是KB。
modprobe mtdram total_size=5120 erase_size=128
  1. 这时将出现MTD设备/dev/mtdblock0,使用dd命令将jffs2根文件系统拷贝到/dev/mtdblock0设备中
dd if=jffs2.img of=/dev/mtdblock0
  1. 将保存了jffs2根文件系统的MTD设备挂载到指定的目录上。
mount -t jffs2 /dev/mtdblock0 /mnt/mtd
  1. 之后就可以到/mnt/mtd目录查看、修改挂载的jffs2根文件系统了,修改后的jffs2根文件系统可以通过dd命令拷贝为一个jffs2的映像文件

https://blog.csdn.net/itismine/article/details/4775824 https://blog.csdn.net/su_linux/article/details/8568086 good: https://wiki.maemo.org/Modifying_the_root_image

清理:

umount /dev/mtdblock0
rmmod mtdblock mtdram

jffs2

在 mtd-utils 里边有 mkfs.jffs2 和 jffs2dump + mkfs.jffs2 用来把一堆输入文件打成一个 JFFS2 文件系统的镜像文件 + jffs2dump 可以显示一个镜像文件里边各个文件的各个 inode 的信息

jffs2dump -c jffs2.img

block2mtd

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

# convert it to a MTD device
# 格式是 `block2mtd=<dev>[,<erasesize>]'
modprobe block2mtd block2mtd=/dev/loop10,131072
# 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
mount -t jffs2 /dev/mtdblock0 /mnt/jffs2
# extract files
tar -cf - -C /mnt/jffs2 . | tar xvf - -C /tmp/rootfs
# or
#rsync -av /mnt/jffs2/ /tmp/rootfs
# or whatever...

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