LINUX.ORG.RU

Отформатировать в FAT по-особому

 ds203,


0

2

Имеется осциллограф DS203. У него есть встроенная флешка на 8 МБ. Флешка отформатирована в FAT. Он на неё пишет настройки, данные и скриншоты. Всё было хорошо, но однажды из-за какого-то глюка прошивки он попортил себе файловую систему и она стала read only (появился файл с именем из непечатаемых символов, а один нормальный файл стал мусором. Вероятно, повредилась таблица FAT). Не особо думая, я отформатировал диск с помощью mkfs -t vfat. Вроде осциллограф начал снова нормально работать. Настройки, например, сохраняет нормально. А вот файлы больше одного кластера пишутся криво, порой содержат в себе куски соседних файлов и вообще всё плохо и непредсказуемо (1 файл из десятка может записаться полностью корректно). Тут я подумал, что авторы прошивки могли прибить гвоздями какие-то параметры ФС, а Linux отформатировал по-другому. Я даже полез в исходники прошивки, но из них смог понять лишь, что используется FAT12. Окей, отформатировал с помощью mkfs -t vfat -F 12. Но лучше не стало. Значит дело не только в этом параметре... Помимо исходников прошивки ( https://github.com/neilstockbridge/dsoquad-BIOS - код чтения FAT сидит тут ) есть ещё дефолтный образ ФС с официального сайта ( http://www.seeedstudio.com/wiki/images/3/31/Dso.img.zip - у меня почему-то распаковался только 7z, libarchive, который использует KDE не осилил ). Казалось бы можно сделать dd и нет проблем (как и советуют там), однако он для старой версии - для флешки на 2 МБ. А мне нужно для 8 МБ.

Что приходит в голову? Каким-то образом узнать все параметры (размер кластера, разрядность, не знаю какие ещё есть параметры у FAT, но может оказаться важен любой), а потом передать их mkfs, чтобы она создала такую же точно ФС но на 8 мегабайт.

Как это можно сделать средствами Linux? Или быть может здесь есть владельцы DS203 и они знают как заставить его нормально работать с ФС? Хотя если таковые есть и владеют 8-мегабайтной версией, то можно просто скинуть мне образ диска.

UPD: Вот этот фрагмент исходников может быть интересен:

#define FAT_LEN      0x1800 
#define FAT1_BASE    0x00001000   // FAT1区开始地址
#define FAT2_BASE    0x00002800   // FAT2区开始地址
#define ROOT_BASE    0x00004000   // 根目录开始地址
#define FILE_BASE    0x00008000   // 文件区开始地址
#define SEC_LEN      0x200        // 扇区长度
#define FAT1_SEC     0x0C         // FAT1扇区数
#define FAT2_SEC     0x0C         // FAT2扇区数

Я оказался прав, прибиты гвоздями ВСЕ параметры FAT. Заголовок никто даже не смотрит. Вероятно, размер кластера - 4 КБ (это объясняет почему первая таблица FAT идёт по смещению 0x1000 - первый кластер занимает MBR с заголовком FAT). Первая таблица FAT идёт по смещению 0x1000, вторая - 0x2800, их длина - 0x1800 байт, корневой каталог начинается с 0x4000 и заканчивается 0x8000 (дальше идут данные файлов). Размер сектора 0x200 (512 байт, что логично). Теперь нужно как-то мне создать ФС, которая бы удовлетворяла этим условиям...

UPD2: Итак, получается FAT12, 8 зарезервированных секторов, 2 таблицы, кластер размером в 1 сектор, сектор 512 байт, 512 файлов в корневом каталоге. И теперь мне совершенно не понятно как это будет работать на диске размером 8 МБ, потому что при размере таблицы в 0x1800 байт, 12-битном адресе и 1 секторе на кластер она будет покрывать лишь 2 МБ.

UPD3: После такого форматирования осциллограф начал писать ошибку при попытке записи файлов, похоже такой формат ФС ему совсем не по нраву. Зато если тупо отформатировать со стандартными параметрами, но указать только размер кластера 1 сектор (по умолчанию 8), то начало внезапно работать (большие файлы читает ПК, а осциллограф не выдаёт ошибок записи). Посмотрим что будет дальше... проблема вроде решена. Всем спасибо, можете расходиться.

★★★★★

Последнее исправление: KivApple (всего исправлений: 4)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.