代码之家  ›  专栏  ›  技术社区  ›  helloworld922

FAT16目录

  •  4
  • helloworld922  · 技术社区  · 12 年前

    我正在开发一个底层应用程序,该应用程序在资源受限的微控制器上使用FAT16文件系统结构,这需要我编写自己的自定义访问代码。我已经考虑过使用Petit FAT和FatFS这样的库,但不幸的是,我认为这两个库都不能满足我的需求。不过,它们已经成为FAT如何工作的有用参考。

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

    根据 this ,一个目录条目可以指向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 ,谁的第一个集群指向数据集群。

    然后,第二根目录条目将在包含以下信息的FAT结束之后在第二集群开始: root dir 2 。它的第一个集群将指向 sub dir 3 ,谁的第一个集群将指向一个空集群(如FAT中所标记的)。

    我在这里错过了什么?我无法找到从根目录项向下导航到 sub dir 2

    1 回复  |  直到 12 年前
        1
  •  3
  •   TactMayers    12 年前

    首先,为了消除混淆,一个目录条目不占用单个集群。正如您从源代码中看到的,单个目录条目只有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. 加载的目录条目表 目录1 从您上面获得的集群中;
    4. 查找条目 子目录2 并得到其起始簇;
    5. 加载上面获得的集群;

    然后您现在应该有了 子目录2

    推荐文章