【发布时间】:2019-09-23 08:19:30
【问题描述】:
我正在尝试在 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。 如果有人能给出一些明确的说明,那将很有帮助。提前致谢。
【问题讨论】: