首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在FAT32中读取目录内容

在FAT32中读取目录内容
EN

Stack Overflow用户
提问于 2019-05-05 13:48:00
回答 2查看 1.1K关注 0票数 0

我试图在RPI3B上编写裸金属FAT32文件系统驱动程序。我能够使用emmc驱动程序读取FAT扇区和根目录扇区。

当下一个条目指针(下一个集群号)不适合当前FAT扇区时,我怀疑如何跟踪FAT条目链接列表?每次到达新的群集号时,我是否应该阅读胖扇区?

我目前的理解如下:获取目录/文件的第一个集群号(cluster_number),读取包含first_cluster_number条目的FAT扇区。比方说我把脂肪部门

代码语言:javascript
复制
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。如果有人能说清楚的话,那会有帮助的。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-14 09:55:55

实现FAT的缓存(在RAM中)。假设缓存有足够的RAM用于20个扇区,并且开始为空。

接下来,编写一个"getFATentry“函数,检查扇区是否在缓存中,并在缓存中找到正确的条目(如果是);或者(如果必要的话)从缓存中取出一些东西以腾出空间,将正确的扇区从磁盘取到缓存中,然后在缓存中找到正确的条目。

一旦完成,您就可以在不担心缓存或任何磁盘IO的情况下next_cluster = getFATentry(previous_cluster); (但是当FAT被修改时,您会想要做一些事情--例如,采用“写-通”或“写-回”策略)。

注意:通过调整"FAT缓存“的大小,可以提高性能或减少RAM消耗。最好允许缓存动态地增长/收缩(例如,如果不需要RAM,则增长到与整个FAT一样大,但是如果其他东西需要所有RAM,则缩小到最小)。

票数 2
EN

Stack Overflow用户

发布于 2019-05-14 08:06:50

我找到了解决办法。

首先阅读给定簇号的初始fat扇区。

找出thisFatEntryOffset并阅读下一个fat条目。

新的fat条目将是新的群集号。查找新群集号的thisFatNumber和thisFatEntryOffset。

如果是新的fat扇区!=旧的fat扇区,那么使用thisFatEntryOffset读取新的fat扇区并读取条目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55992620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档