FAT16 каталоги
Я работаю над приложением низкого уровня, которое использует структуру файловой системы FAT16 на микроконтроллере с ограниченными ресурсами, что требует написания собственного кода доступа. Я уже изучал использование таких библиотек, как Petit FAT и FatFS, но, к сожалению, я не думаю, что что-то из этого подойдет моим потребностям. Тем не менее, они послужили полезными ссылками на то, как работает FAT.
Единственная область, с которой у меня все еще проблемы, это записи в подкаталогах.
В соответствии с этим запись каталога может указывать на 1 стартовый кластер. Для файла данных это просто первый кластер данных. Для каталога это начальный кластер подкаталога (предположительно, другая запись каталога).
Это прекрасно работает, если есть только 1 путь к каталогу от корневого каталога до базового файла, но я не понимаю, как это позволяет вам разветвляться на несколько файлов / каталогов под любым данным каталогом.
ех. структура каталогов:
- root dir 1
- sub dir 1
- file 1
- sub dir 2
- file 2
- root dir 2
- sub dir 3
Основываясь на моем понимании структуры FAT16,
Сразу после FAT будет кластер для первой записи корневого каталога, содержащий информацию для root dir 1
, Первое поле кластера будет содержать адрес кластера для sub dir 1
, кто первое поле кластера будет содержать адрес кластера для file 1
Кто первый кластер указывает на кластер данных.
Вторая запись корневого каталога будет начинаться со второго кластера, после чего будут заканчиваться FAT, содержащие информацию для root dir 2
, Его первый кластер будет указывать на кластер для sub dir 3
Кто первый кластер будет указывать на пустой кластер (как отмечено в FAT).
Что мне здесь не хватает? Я не могу найти способ перехода от записи корневого каталога к sub dir 2
,
1 ответ
Во-первых, чтобы избежать путаницы, одна запись каталога не занимает один кластер. Как видно из вашего источника, одна запись каталога составляет всего 32 байта, где размер кластера может быть примерно от 4 КБ до 64 КБ, в зависимости от размера / версии диска FAT, который вы используете. Итак, после FAT на самом деле таблица записей в каталоге.
Для подкаталога вы можете найти начальный кластер его таблицы записей каталога в записи родительского каталога. Они не обязательно должны быть упакованы в начало диска.
Чтобы объяснить далее, давайте посмотрим на слегка измененную версию вашего исходного примера:
\ (root)
- dir 1
- sub dir 1
- file 1
- sub dir 2
- file 2
- dir 2
- sub dir 3
Чтобы пройти к sub dir 2
:
- Найдите таблицу записей корневого каталога, которая содержится в кластере сразу после FAT;
- Ищите запись
dir 1
из таблицы записей корневого каталога и получить его начальный кластер; - Загрузите таблицу записей каталога для
dir 1
из кластера, который вы получили выше; - Ищите запись
sub dir 2
и получить его стартовый кластер; - Загрузите кластер, полученный выше;
Тогда вы должны теперь иметь таблицу записей каталога для sub dir 2
,