我创建了一个使用squashfs的buildroot的根文件系统。它工作正常,现在我想创建一个overlayfs,它将保存/ home和/ etc目录。
为此,我想创建一个包含几个文件的简单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,因此我从该文件夹创建一个文件系统映像:
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,则得到的二进制图像根本不会改变???)。 不过,继续前进,我已将包含home的mtdblock对齐到64KB,我的flash布局如下所示:
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
我想现在我的文件系统已经损坏了......我真的不明白它的原因.. 我有什么想法吗?感谢所有建议..
答案 0 :(得分:0)
这就是我为解决这个问题所做的工作。
(可能是可选的)更准确地指定jffs2文件系统的创建:
mkfs.jffs2 -e 64 -l -p -s 4096 -r jffs2_home/ -o home.jffs2
通过这些更改,文件系统现在可以按预期进行读写。