我正在尝试在 RPI 3B 上编写裸机 FAT32 文件系统驱动程序。我能够使用 emmc 驱动程序读取 FAT 扇区和根目录扇区。
当下一个条目指针(下一个簇号)不适合当前的 FAT 扇区时,我对如何遵循 FAT 条目链表有疑问?每次获得新的簇号时是否应该读取 FAT 扇区?
我目前的理解如下: 获取目录/文件的第一个簇号(cluster_number) 读取包含 first_cluster_number 条目的 FAT 扇区。假设我将 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 中下一个条目的索引,鉴于 fat 32 条目跨越 4 个字节,我是否需要将其乘以 4。如果有人能给出一些明确的说明,那将很有帮助。提前致谢。