Файловая система JFFS2 немедленно повреждается (Волшебная битовая маска 0x1985 не обнаружила ошибок)

Я создал корневую файловую систему с buildroot, которая использует squashfs. Это работает нормально, и теперь я хотел бы создать оверлейные файлы, которые будут содержать каталоги /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 КБ, и поэтому я создаю образ файловой системы из этой папки:

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, полученное двоичное изображение не изменится вообще???). Тем не менее, двигаясь дальше, я выровнял свой mtdblock, который содержит home, по 64 КБ, и мое расположение флэш-памяти выглядит так:

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

Полагаю, теперь моя файловая система уже повреждена... и я не совсем понимаю причину этого... Есть идеи, где я ошибаюсь? Спасибо за все предложения..

1 ответ

Решение

Это то, что я сделал, чтобы решить проблему.

  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
    

С этими изменениями файловая система теперь читает и записывает как ожидалось.

Другие вопросы по тегам