Возможно ли, что маленькие SD-карты форматируются без MBR?

Я пытаюсь реализовать библиотеку файловой системы FAT16/32 только для чтения для встроенных систем, чтобы читать SD-карты (изобретать колесо в образовательных целях).

Вроде есть карты, форматированные без MBR; просто FAT без таблицы разделов.

Я прочитал документы FAT и документы MBR и научился читать SD-карту, на которой есть MBR и FAT.

Мне нужна моя библиотека C++ для поддержки чтения SD-карт без MBR.

Мой текущий подход заключается в следующем:

  1. Попробуйте прочитать первый сектор, предполагая, что он содержит FAT BPB (блок параметров загрузки).
  2. Проверьте, верна ли информация.
  3. Если да, продолжайте читать корневой каталог.
  4. В противном случае предположим, что у него есть MBR.
  5. Прочитайте таблицу разделов, начиная с 0x1BE.
  6. Если доступен поддерживаемый тип раздела, попробуйте прочитать его первый сектор как FAT.
  7. Если прочитанная информация верна, продолжайте чтение корневого каталога.
  8. В противном случае вернуть ERROR_CODE

Есть ли лучший подход? Например, есть ли какое-то магическое число или конкретный шаблон, который можно идентифицировать?


person Farseen    schedule 24.06.2016    source источник
comment
вы просто читаете и видите, есть ли он там?   -  person old_timer    schedule 24.06.2016
comment
есть ли какое-то магическое число или конкретный шаблон для идентификации?   -  person Farseen    schedule 24.06.2016
comment
или есть способ отличить первый сектор FAT от MBR?   -  person Farseen    schedule 24.06.2016
comment
Я думал, что это было по местоположению, страница википедии для главной загрузочной записи здесь не помогает?   -  person old_timer    schedule 24.06.2016
comment
Я просмотрел много вводных документов. Но я просто не мог найти ключевую разницу.   -  person Farseen    schedule 24.06.2016
comment
конечно, вы не можете предполагать, что КАЖДАЯ карта будет иметь X больше, чем каждый жесткий диск будет иметь X. Некоторые из них могут быть стерты или разделены по-другому или использоваться без файловой системы. Все, что для этого требуется, — это чтобы на планете не было такого, и ответ на ваш вопрос — нет, вы не можете рассчитывать на этот факт.   -  person old_timer    schedule 24.06.2016
comment
Так что просто попробуйте прочитать первый сектор. Проверьте, является ли это действительным загрузочным сектором FAT. Если нет, попробуйте прочитать таблицу разделов и просмотреть каждый раздел, пытаясь найти допустимый загрузочный сектор FAT. Вот и все?   -  person Farseen    schedule 24.06.2016
comment
Тот факт, что дискета FAT FS не является загрузочной, не означает, что на ней нет MBR, а только то, что MBR не загружает загрузочный сектор.   -  person Clifford    schedule 24.06.2016
comment
@Клиффорд, да. Я имел в виду, что существуют дискеты без MBR.   -  person Farseen    schedule 24.06.2016
comment
@happycoder: Правда? Они были толстыми? В чем я сомневаюсь, так это в том, что такие вещи существовали.   -  person Clifford    schedule 24.06.2016


Ответы (1)


  1. Проверьте наличие текста FAT32 по смещению 0x52.
  2. Если это не помогло, проверьте FAT12 или FAT16 по адресу 0x36.
  3. Если это тоже не удается, предположим, что первый сектор — MBR.

Благодаря @Клиффорд

person Farseen    schedule 25.06.2016