创建一个任意的 FAT 文件系统,到文件或直接在程序内存中

Create an arbitrary FAT filesystem, to file or directly in program memory

我正在编写一个嵌入式系统,我正在创建一个 USB 大容量存储设备驱动程序,该驱动程序使用 8MB RAM 块作为 FAT 文件系统。

虽然当时允许 OS 将我清零​​的 RAM 区域取出并格式化 FAT 分区本身是有意义的,但我 运行 遇到了我在 1 月诊断的问题Axelson 的(USB 书籍的热门作者)PORTS forum。该问题与擦除驱动器中的块有关,可以通过在 USB 枚举之前将内存区域预格式化为 FAT 文件系统来规避。然后,我可以查看驱动器是否会正常运行。理想情况下,预先格式化的分区会包含一个文件来测试读取操作。

如果我能以某种方式在我的 OS (OSX) 上创建并安装一个模拟的 8MB FAT 文件系统,将文件写入其中,然后将其导出到图像文件,那就太好了包含在我的项目中。有人知道怎么做吗?我可以处理剩下的事情。我不太担心目前是否会 FAT12/16/32,可选的 MBR 包含会很好..

如果该选项不存在,我希望使用预先编写的实用程序来创建 FAT img 文件,我可以将其包含到我的项目中并直接上传到 RAM。这个实用程序允许我指定一个 8MB 的文件系统和 512 字节的扇区,例如,可能还有 FAT12/FAT16/FAT32。

有人知道这样的实用程序吗?我找不到一个。

如果没有,有人可以推荐在 C 中实现这个的第一步吗?我希望图书馆存在。从头开始实施大容量存储驱动程序后,我感到非常疲惫,但我知道我可能必须 'get crinkled' 并手动创建 FAT 分区。这不是太难。我想象一些打包的结构和一些选项。我会到那里。我已经有了 FAT 文件系统本身的资源。

有几个,它们通常隐藏在 OS 来源中。

在 BSD 上(即 OS-X),你应该有一个 "mkdosfs" 工具,如果没有,源代码将随处可用...这是一个随机示例

http://www.blancco.com/downloads/source/utils/mkdosfs/mkdosfs.c

还有 'mtools' 软件包,它通常用于软盘,但我认为它也用于磁盘映像。

虽然这些都不会创建分区表;如果还需要,您还需要其他东西。

我最终发现 FatFS 具有从嵌入式设备中格式化和分区 "drive" 的功能,这让我不必手动完全格式化它或使用主机端工具。

我想更详细地介绍所采取的步骤,但我已经筋疲力尽了。我可能会在稍后编辑更多细节。