Я пытаюсь написать драйвер файловой системы FAT32 на чистом металле на RPI 3B. Я могу читать сектора FAT и сектора корневого каталога с помощью драйвера emmc.
У меня есть сомнения относительно того, как следовать связанному списку записей FAT, когда указатель следующей записи (следующий номер кластера) не помещается в текущий сектор FAT? Должен ли я читать сектор FAT каждый раз, когда я получаю новый номер кластера?
В настоящее время я понимаю следующее: Получить первый номер кластера (номер_кластера) каталога/файла. Прочитать сектор FAT, который содержит запись first_cluster_number. Скажем, я читаю сектор FAT как
uint8_t fat_sector[512] = { 0 };
uint32_t this_fat_sector_num, this_fat_entry_offset;
this_fat_sector_num = unusedSectors + reservedSectorCount + ((cluster_number * 4)/ bytesPerSector);
this_fat_entry_offset = (cluster_number * 4)/ bytesPerSector;
read_fat_sector(this_fat_sector_num, & fat_sector[0]);
// Calculate next cluster in chain
uint32_t next_cluster_number = ((uint32_t * fat_sector[this_fat_entry_offset])) & 0x0fffffff;
// Calculate next cluster in chain 1 more time, is below code correct ?
uint32_t next_next_cluster_number = ((uint32_t * fat_sector[next_cluster_number])) & 0x0fffffff;
Что происходит, когда следующий номер кластера отсутствует в уже прочитанном буфере fat_sector (512 байт)? Если номер кластера = индексу следующей записи в fat_sector, нужно ли умножать его на 4, учитывая, что толстые 32 записи охватывают 4 байта. Если кто-то может дать некоторую ясность, это будет полезно. Заранее спасибо.