JFFS2文件系统立即破坏(Magic bitmask 0x1985找不到错误)

我创build了一个使用squashfs的buildroot根文件系统。 它工作得很好,现在我想创build一个overlayfs,它将保存/ home和/ etc目录。

为此,我想用两个文件创build一个简单的jffs2文件系统:

jlumme@simppa:~/projects/jffs2_home$ ls -la total 20 drwxrwxr-x 4 jlumme jlumme 4096 Apr 21 16:21 . drwxrwxr-x 6 jlumme jlumme 4096 Apr 21 16:21 .. drwxrwxr-x 2 jlumme jlumme 4096 Apr 21 13:45 default drwxrwxr-x 2 jlumme jlumme 4096 Apr 21 13:45 ftp -rw-rw-r-- 1 jlumme jlumme 24 Apr 21 15:34 test.txt 

我使用的闪存芯片是SST25VF064C,所以我相信它的擦除块大小是64 KB,因此我从该文件夹创build一个文件系统映像:

 mkfs.jffs2 -r jffs2_home/ -e 64 -o home.jffs2 $ ls -la -rw-r--r-- 1 jlumme jlumme 496 Apr 21 15:42 home.jffs2 

(令人惊讶的是,如果我设置-e 32,甚至-e 4,则所得到的二进制图像根本不会改变)。 然而,继续前进,我已经把我家的mtdblockalignment到64KB,而我的闪存布局如下所示:

 uboot/<0x00000000 0x40000> kernel/<0x00040000 0x3D9000> dtb/<0x00419000 0x10000> rootfs/<0x00429000 0x1F7000> home/<0x00620000 0x1E0000> 

在我的主板上,我可以安装mtdblock4,我可以正确读取文件内容。 但是,如果我修改文件,并尝试保存, vi抱怨:

 [ 77.030000] jffs2: Node totlen on flash (0xffffffff) != totlen from node ref (0x00000044) 

现在,如果我卸载文件系统,并重新安装它,我立即开始投诉:

 # mount -t jffs2 /dev/mtdblock4 /home/ [ 99.740000] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001d4070: 0xff0a instead [ 99.760000] jffs2: Empty flash at 0x001d4074 ends at 0x001d412c [ 99.770000] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001d412c: 0xffff instead [ 99.790000] jffs2: Empty flash at 0x001d4130 ends at 0x001d4194 [ 99.790000] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001d4194: 0xff0a instead 

我想现在我的文件系统已经损坏了…我真的不明白其中的原因..任何想法,我哪里错了呢? 感谢您的所有build议..

这是我所做的解决这个问题。

  1. 更新了更新的MTD驱动程序http://www.linux-mtd.infradead.org/
    – SST25V064C芯片有新的代码
  2. 确保为JFFS2保留的区域被初始化为0xFF
  3. (可能是可选的)更准确地指定jffs2文件系统的创建:

     mkfs.jffs2 -e 64 -l -p -s 4096 -r jffs2_home/ -o home.jffs2 

通过这些更改,文件系统现在可以按照预期进行读写操作。