问题标签 [fat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
732 浏览

c - 在嵌入式 C 中使用 RTOS 处理多任务文件系统的最佳方法?

我正在使用 CMX-RTX RTOS 和 Elm Chan FatFS。在任务排成一行到达文件系统之前,一切都很好。

对于熟悉 Chan FatFS 的人,我修改了 ENTER_FS 和 LEAVE_FS 宏来获取和释放资源。如果一个任务试图进入 FS 并且资源是自己的,它将被置于等待直到资源被释放。

我开始怀疑这是处理从多个任务访问 FS 的最佳方式。我有多个实例,其中 FS 产生故障,甚至对 SD 的简单命令也得到不正确的响应。如果我仅将 1 个任务限制为访问 FS,则不会发生这些故障。

要解决主要问题,大家对多任务 FS 访问有何想法/建议?例如我最初使用的更精细的方法?或者可能是一个单一的任务,它会被不同的任务标记以访问 FS?

0 投票
1 回答
212 浏览

c - 为什么 linux 中的 stat64() 会随着目录中文件数量的增加而变慢?

stat64()在一个文件夹中运行了 1000 个文件,耗时不到 1 秒,但是当同一目录中有 5000 个文件时,时间增加到15s.

为什么stat64 ()非线性变慢?我期待的时间是5s

编辑 我正在使用 FAT 文件系统从 USB 读取数据。

0 投票
1 回答
435 浏览

data-structures - 检测 FAT 目录条目

在尝试对闪存驱动器进行数据恢复时,我正在尝试编写一个可以搜索 FAT 目录条目的工具。由于我不能依靠 FAT 告诉我去哪里看,我正在对驱动器扇区进行简单的扫描(实际上是驱动器的图像转储)。

问题是我找不到有关如何检测扇区/群集是否包含 FAT 目录条目的任何信息。我知道目录条目的结构,但不知道如何检测一堆给定字节是否实际上包含一个。

查找子目录的开头.很简单,因为您可以只搜索字节 0x00 和..字节 0x20,但这仅有助于子目录的第一个扇区,而不是后续扇区,也不是根目录或子目录其他位置的目录碎片。

我尝试使用日期范围、文件大小、群集范围、无效文件名字符作为粗略的指导,但当然,这不太可靠。

如果我在磁盘编辑器中打开图像并按住PgDn键,我的大脑可以检测到包含有效目录条目的扇区何时通过我的视野,但是如何在程序中实现呢?有什么方法可以检测 FAT 目录条目吗?

0 投票
1 回答
540 浏览

xcode - Git diff 存在于 Windows 上的符号链接上,但不存在于 FAT 文件系统上的 Mac 上

我有一个 FAT 外部磁盘,用于存储我的 GIT 存储库并在 Mac 和 Windows 上使用该存储库。由于 FAT 没有权限,当我将文件从本地磁盘复制到外部 FAT 磁盘时,由于文件模式更改,我有 git diffs。我已经使用 git 选项解决了这个问题

现在在 Mac 上我没有 git diff,即 git diff 是干净的。但是当我在 Windows 上执行 git diff 时,我看到了这个:

在此处输入图像描述

我记得我在更新 Xcode 后使用 Xcode 6 链接我的项目时遇到了问题。我的框架,与您在上图中看到的框架相同,在 Xcode 中但未被识别和链接。所以我删除了它们,重新添加并解决了问题。我想这就是我有差异的原因。这是一个差异示例:

曾是: 在此处输入图像描述

变得: 在此处输入图像描述

为什么我在 Mac 上看不到这个差异?为什么我在 iOS 框架文件中有差异以及差异的含义(XSym、数字 [0022]、哈希码)?

编辑:似乎它以某种方式与 FAT 上的符号链接相关联:http ://www.tucuxi.org/os-x-vfat/ 但我不确定如何解决我在 Windows 和 Mac 上同时使用相同存储库的问题。

0 投票
0 回答
540 浏览

c++ - C ++中的文件分配表(FAT8)实现错误?

我正在尝试模拟 FAT8 File_Allocation_Table。FAT 条目从 -1 到 255 不等。目录条目包含特定目录的 FAT 表的起始地址。

每当起始地址大于 127 时,它就会给出一个负数。负数可以通过 offset 转换为 +ve 数。但是当条目包含 -1 和 255 时,这个问题对我来说变得很困难,因为它们都给出了相同的值。

如何处理这种情况?

0 投票
1 回答
356 浏览

filesystems - FAT16 文件系统

我正在构建一个类似于 FAT 的文件系统。它具有以下设置:

| MBR | 脂肪区 | 资料区 |

所以如果给定sector_size(以字节为单位的扇区大小),cluster_size(以扇区为单位的簇大小)和disk_size(以簇为单位的磁盘大小),我如何计算FAT区域的长度?

我知道 MBR 从簇 0 开始,FAT Area 从簇 1 开始。但是我不知道我可以使用什么信息来计算 FAT 区域的长度。

另外,根目录从数据区的第一个簇开始,那么如何计算根目录的长度呢?

0 投票
2 回答
405 浏览

c - FAT BPB 和小端反转

我的 CPU 是小端,文档告诉我符合 FAT 规范的字节顺序。那么,为什么我获得了 BS_jmpBoot 的有效地址,第一个扇区的字节 0-3,但没有获得 BPB_BytesPerSec 的有效数字,第一个扇区的字节 11-12。

产量

我想弄清楚为什么 BS_jmpBoot 和 OEMName 打印有效但 BPB_BytesPerSec 没有。如果有人能启发我,我将不胜感激。

谢谢

编辑:感谢大家的帮助,是我的类型让一切都出错了。正如 uesp 所建议的(有点),我通过将字节写入无符号短字节来使其工作,但我仍然想知道为什么这不起作用:

产生 BPB_BytesPerSec = 0x0000

我想使用 char 数组来分配空间,因为我想确定我在任何机器上写入的空间;还是我不应该?

再次感谢!

0 投票
0 回答
283 浏览

file-io - 如何检测分区是 FAT 还是 NTFS 或其他?

我正在开发一个读取分区的低级程序,我需要知道文件是否在 FAT 或 NTFS 或其他类型的文件系统类型下,以便我可以加载适当的库来处理文件。

这是一个嵌入式软件设计,所以不会有操作系统来帮助我访问分区,所以我需要弄清楚如何自己处理文件,我承认我有点迷失从哪里开始。

0 投票
0 回答
496 浏览

u-boot - U-boot:SPL - 未定义的参考 'file_fat_write'

我正在尝试将文件写入 spl_mmc.c 中的 SD 卡。在编译 gcc 期间抱怨:未定义的参考 'file_fat_write'。我不明白为什么。直接在 mmc_load_image_fat() 中的(原始)代码之后:

err = file_fat_read(payloadname, (u8 *)spl_image.load_addr, 0);

我插入以下代码:

file_fat_write("foo", "foo", 3);

为什么 gcc 不知道这个函数,因为它也在 include/fat.h 中声明,就像 file_fat_read() 一样?

有人设法从 SPL 中写到胖子吗?

最好的,安德烈

0 投票
2 回答
2881 浏览

stm32 - 使用 MCU 的内部闪存作为 FatFs 驱动器

我正在尝试在 STM32F051xx 上制作内部闪存,以将其视为驱动器。

这是顶层的代码:

f_mount() 返回 FR_OK,但是当涉及到通过 f_open() 创建新文件时,它调用 find_volume(),它调用 check_fs() 返回 FR_NO_FILESYSTEM。我认为这是因为没有创建引导扇区,但我不知道该怎么做。

我已经编写了 USER_read()、USER_write() 和 USER_ioctl() 函数,但我不知道在 USER_initialize() 函数中要写什么。现在我把它留在原来的状态,它返回 RES_OK 而不做任何事情。我觉得这可能是问题的根源。

有什么建议么?