4

我正在开发一个低级应用程序,它在资源受限的微控制器上使用 FAT16 文件系统结构,这需要我编写自己的自定义访问代码。我已经研究过使用 Petit FAT 和 FatFS 等库,但不幸的是,我认为这两种库都不适合我的需求。不过,它们已成为 FAT 工作原理的有用参考。

我仍然遇到问题的一个领域是子目录条目。

据此目录条目能够指向 1 个启动集群。对于数据文件,这只是第一个数据簇。对于目录,这是子目录的起始簇(可能是另一个目录条目)。

如果从根目录到基本文件只有 1 个目录路径,这可以正常工作,但我不明白这如何允许您分支到任何给定目录下的多个文件/目录。

前任。目录结构:

- root dir 1
    - sub dir 1
        - file 1
    - sub dir 2
        - file 2
- root dir 2
    - sub dir 3

根据我对FAT16结构的理解,

紧随 FAT 的将是第一个根目录条目的簇,其中包含root dir 1. 然后,第一个集群字段将包含 的集群地址sub dir 1,谁的第一个集群字段将包含 的集群地址file 1,谁的第一个集群指向数据集群。

然后,第二个根目录条目将在包含root dir 2. 它的第一个簇将指向 的簇sub dir 3,谁的第一个簇将指向一个空簇(如 FAT 中标记的那样)。

我在这里想念什么?我想不出一种从根目录条目向下导航到sub dir 2.

4

1 回答 1

3

首先,为了消除混淆,一个目录条目不占用单个簇。正如您从源代码中看到的那样,单个目录条目只有 32 个字节,其中簇的大小可能在 4KB 到 64KB 之间,具体取决于您使用的磁盘大小/FAT 版本。因此,FAT 之后的内容实际上是一个目录条目

对于子目录,您可以在父目录条目中找到其目录条目表的起始簇。它们不一定被打包到磁盘的开头。

为了进一步解释,让我们看一下原始示例的略微修改版本:

\ (root)
    - dir 1
        - sub dir 1
            - file 1
        - sub dir 2
            - file 2
    - dir 2
        - sub dir 3

遍历sub dir 2

  1. 找到根目录条目表,该表包含在 FAT 之后的簇中;
  2. dir 1从根目录条目表中查找条目,并得到它的起始簇;
  3. dir 1从上面获得的集群中加载目录条目表;
  4. 查找条目sub dir 2并获取其起始簇;
  5. 加载上面得到的集群;

然后你现在应该有sub dir 2.

于 2012-09-21T07:35:48.507 回答