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:

  1. Найдите таблицу записей корневого каталога, которая содержится в кластере сразу после FAT;
  2. Ищите запись dir 1 из таблицы записей корневого каталога и получить его начальный кластер;
  3. Загрузите таблицу записей каталога для dir 1 из кластера, который вы получили выше;
  4. Ищите запись sub dir 2 и получить его стартовый кластер;
  5. Загрузите кластер, полученный выше;

Тогда вы должны теперь иметь таблицу записей каталога для sub dir 2,

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