Файловая система 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 ответ
Это то, что я сделал, чтобы решить проблему.
- Обновлены новые драйверы MTD с http://www.linux-mtd.infradead.org/
- появился новый код для чипа SST25V064C - Убедитесь, что область, зарезервированная для JFFS2, была инициализирована в 0xFF
(возможно, необязательный) Более точно указано создание файловой системы jffs2:
mkfs.jffs2 -e 64 -l -p -s 4096 -r jffs2_home/ -o home.jffs2
С этими изменениями файловая система теперь читает и записывает как ожидалось.