跳转至

Linux 挂载 JFFS2 文件系统

1. 引言

假如手中已经有一个外部 Flash 设备,如何让它在 Linux 中像普通文件系统一样使用?本文将详细介绍如何在 Linux 上挂载 JFFS2 文件系统,包括必要的工具、操作步骤以及内核配置要求。


2. 所需工具

挂载 JFFS2 文件系统涉及以下工具: - flash_erase:擦除 MTD 设备 - mkfs.jffs2:创建 JFFS2 文件系统镜像 - nandwrite:将 JFFS2 镜像写入 MTD 设备 - mount:挂载 JFFS2 文件系统 - adb push(可选):通过 ADB 传输文件到设备

以上工具如果系统不存在可以考虑进行移植源码:

http://git.infradead.org/mtd-utils.git

移植源码过程中可能存在一些依赖库比如:zlib, lzo

编译步骤省略,最终可以得到:


3. 操作步骤

3.1 确保 MTD 设备可用

首先,确认 MTD 设备是否正确识别:

cat /proc/mtd

如果输出类似如下:

dev:    size   erasesize  name
mtd0: 02000000 00020000 "mtd_partition"

说明 MTD 设备已识别。

3.2 擦除 MTD 设备

flash_erase /dev/mtd0 0 0

注意:擦除操作会清空所有数据,需谨慎执行。


3.3 生成 JFFS2 镜像(可选)

如果已有 JFFS2 镜像,可跳过此步骤,否则可以创建:

mkfs.jffs2 -d /data/rootfs -o jffs2.img -n -e 8192 -s 256 -c 1024

参数说明:

  • -d:指定要打包的根文件系统目录
  • -o:输出 JFFS2 镜像文件
  • -e:擦除块大小(需与 Flash 设备匹配)
  • -s:扇区大小
  • -c:块数

3.4 写入 JFFS2 镜像

nandwrite -p /dev/mtd0 jffs2.img

3.5 挂载 JFFS2

  1. 创建挂载点:
mkdir -p /mnt/qspi
  1. 确保 MTD 设备节点存在:
mknod /dev/mtdblock0 b 31 0
  1. 挂载:
mount -t jffs2 /dev/mtdblock0 /mnt/qspi
  1. 验证挂载:
mount | grep jffs2

4. 可能遇到的问题及解决方法

4.1 mount: wrong fs type

  • 检查内核是否启用了 JFFS2:
zcat /proc/config.gz | grep CONFIG_JFFS2_FS

如果未启用,可在内核配置中打开:

CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_WRITEBUFFER=y

举例子没有开启CONFIG_JFFS2_FS 是不行的!

4.2 No such device

  • 确保 MTD 设备正确识别:
cat /proc/mtd

4.3 MTD partition not found

  • 可能 MTD 分区未正确配置,检查
dmesg

输出:

dmesg | grep mtd

5. 总结

整个过程如下:

  1. 确认 MTD 设备 (cat /proc/mtd)
  2. 擦除 Flash (flash_erase /dev/mtd0 0 0)
  3. 创建 JFFS2 镜像 (mkfs.jffs2)
  4. 写入 Flash (nandwrite -p /dev/mtd0 jffs2.img)
  5. 挂载 JFFS2 (mount -t jffs2 /dev/mtdblock0 /mnt/qspi)

在这些过程中需要注意的是,对于一个新的Fash 设备是需要格式化,另外也需要创建镜像写入Falsh,当然可以是空的镜像。