filex用户手册中文版解读

filex用户手册

filex的用户手册,看着好头疼呢,主要是没有🖊记录,感觉就是浮在空中,飘在天上,好像懂了,又好像啥也没了解到,哈哈,有点意思。为了解决这个bug,因此,记录于此,come on!

1.介绍filex

先看看概述吧,filex是threadx的工业级文件系统解决方案,格式为microsoft FAT格式,专为深度嵌入式实时IoT应用程序而设计。容错和磨损均衡技术则是借助levelx。filex过了很多安全认证,主打一个安全。

filex数据类型:这些数据类型都放在tx_port.h或者fx_port.h。目的是,确保不同编译器之间的可移植性。

容错支持:其实也就是掉电安全,文件一致性。filex的容错模块记录更新文件或目录所需的所有步骤,此日志条目存储在filex可以查找和访问的专用扇区上,即使没有文件系统,也可以访问日志数据的位置。怎么启动容错模块呢?首先要定义宏:FX_ENABLE_FAULT_TOLERANT 和 FX_FAULT_TOLERANT,其次要调用接口fx_fault_tolerant_enable 启动容错服务。

2.安装和使用filex

filex源码中,重要的文件:

  • fx_api.h:此C头文件包含所有的宏,数据结构,函数声明。
  • fx_port.h:此C头文件包含所有特定于开发工具的数据定义和结构。
  • demo_file.c:基于ram的演示程序。
  • fx.a:filex的C源码实现,也就是目录:filex/common/src

如何使用filex:

  • 应用代码必须包含fx_api.h
  • 编译时必须包含filex源码
  • 如果用的是threadx作为rtos,通过从 tx_application_define 函数或应用程序线程调用 fx_system_initialize 来初始化 FileX 系统
  • 如果是独立模式,应直接从应用代码调用fx_system_initialize。
  • 添加对 fx_media_open 的一个或多个调用可设置 FileX 媒体(也就是硬件设备啦)。 必须从应用程序线程的上下文发出此调用。注意:fx_media_open 调用需要足够的 RAM 来存储一个扇区的数据。

疑难问题解答:

  • 增加堆栈大小?(如果是独立模式呢?)
  • 如果是ram的演示程序,确保为它提供32KB大小的ram作为ram磁盘。

配置选项:有点多,不作为本次记录,有空专门研究吧。

filex版本在哪里看呢?fx_port.h里面有噢。

3.filex基本功能

介质说明
filex将物理介质视为逻辑扇区数组,如何将这些扇区与底层物理介质相映射,取决于fx_media_open调用期间连接到filex介质的IO驱动程序。比如下面的fx_stm32_sd_driver或者_fx_ram_driver。

#ifdef SDIO_TEST
    status =  fx_media_open(&sdio_disk, "STM32_SDIO_DISK", fx_stm32_sd_driver, 0, media_memory, sizeof(media_memory));
#else
    status =  fx_media_open(&sdio_disk, "STM32_SDIO_DISK", _fx_ram_driver, ram_disk_memory, media_memory, sizeof(media_memory));
#endif

讲讲逻辑扇区吧,这好像很重要。介质的逻辑扇区的确切组织取决于物理介质启动记录的内容。
![[Pasted image 20240710183141.png]]

filex的逻辑扇区始于logical sector1,指向介质的第一个保留扇区,也就是reserved啦。reserved扇区是可选的,使用时一般包含启动代码等系统信息。介质“逻辑扇区”视图中其它区域的确切扇区偏移来自介质启动记录的内容。启动记录通常位于sector 0。但是,如果介质有隐藏扇区,则启动扇区的偏移也必须考虑道这些位于启动扇区之前的隐藏扇区。

  • reserved扇区:使用时一般包含启动代码等系统信息
  • sector 0扇区:介质启动记录,也就是占了512字节。

什么实时介质启动记录?其中之一就是MBR!它的主要内容和含义?

  • 引导程序boot loader:这是MBR的第一部分,里面放的grub或uboot。
    • 负责启动操作系统的加载过程。
    • 当计算机启动时BIOS会加载并执行MBR中的bootloader。
    • 引导程序会根据分区表中的信息找到活动分区,并加载该分区中的操作系统固件。
  • 分区表:这是MBR的第二部分,里面描述了存储设备上分区的位置和大小。
    • 分区表包含最多四个主分区记录PTE,每个记录占16字节;
    • 再包含一个扩展分区记录;
    • 每个分区记录包含分区的起始和结束扇区号,分区类型(fat32、ext4?)等。
  • 结束标志:MBR最后一个字节通常以0xAA55作为结束标志,BIOS就是用它来验证MBR的有效性。
    介质启动记录(MBR)对于启动过程至关重要,因为它告诉计算机如何找到并加载操作系统。如果MBR损坏或被错误地修改,可能会导致计算机无法启动。此外,MBR只存在于使用MBR分区方案的磁盘上。

sector 0这512字节分别表示啥呢?这个就不细说了。。。主要有点多。

  • 保留扇区数:介质启动记录中的“保留扇区数”字段定义在启动记录和 FAT 区域第一个扇区之间保留的扇区数。 在大多数情况下,此条目为零。
  • FAT-12 和 FAT-16扇区数: 介质启动记录中的“扇区数”字段包含介质中的扇区总数。 如果此字段为零,则扇区总数将放在位于启动记录之后的“FAT-32 扇区数”字段中。

文件分配表FAT
文件分配表FAT放在reserved扇区之后,FAT Area本质上是由12-bit, 16-bit或32-bit的条目组成的数组。

FAT12、FAT16、FAT32 和 exFAT,分别有啥不同?
它们是文件分配表(File Allocation Table)文件系统的不同版本,它们在磁盘分区和数据存储方面有着不同的特点和限制。这些文件系统由微软开发,广泛用于不同类型的存储设备上。下面是它们之间的主要区别:

  • FAT12:使用12位的文件分配表,因此称为FAT12,支持的最大分区大小为16MB。
  • FAT16:使用16位的文件分配表,因此称为FAT16,支持的最大分区大小为2GB。 它的簇大小相对较小,但随着磁盘大小的增加,簇浪费的问题也变得明显。
  • FAT32:使用32位的文件分配表,因此称为FAT32,支持的最大分区大小为16TB(理论上)。尽管系统可能能够识别更大的 FAT32 分区,但是windows官方支持的最大格式化分区大小仍为 32 GB。FAT32支持更大的簇大小,可以更有效地使用磁盘空间,尤其是在使用大容量硬盘时。它是目前最常见的FAT版本,被许多USB闪存驱动器和存储卡使用。

怎么计算出最大分区大小的?以fat16举例:

  • FAT16 使用 16 位来表示文件分配表中的每个条目(簇),这限制了它能够管理的簇数量最大为 65536(2^16)。
  • 假设每个簇的最大大小为 32KB,则最大的分区容量计算如下:
    • 最大分区容量=簇的数量×每个簇的大小
    • 最大分区容量=65536×32768 bytes
    • 最大分区容量=2147483648 bytes=2GB

还是得支持exFAT啊!!
exFAT 使用位图来管理卷中的可用空间,使得其在向文件中写入数据时能够更有效地查找可用空间。 对于存储在连续群集中的文件,exFAT 无需遍历 FAT 链以查找所有群集,从而在访问大型文件时更有效。 闪存存储和SD 卡大于 32GB 时,需要使用exFAT。

4.filex对外接口

说白了,就是对filex得对外接口简单说明下其功能是什么,输入参数的含义,返回值的含义。太多了,自己看吧:rtos-docs/rtos-docs/filex

5. filex适配底层IO驱动

这个主要是为了让filex里面的文件操作能够真正的执行到底层设备,因此需要这个适配层。

FileX 支持多个媒体设备。 FX_MEDIA 结构定义管理媒体设备所需的一切。 此结构包含所有媒体信息,其中包括用于在驱动程序与 FileX 之间传递信息和状态的媒体特定 I/O 驱动程序及关联参数。 在大多数系统中,每个 FileX设备实例都有唯一的 I/O 驱动程序。

每个filex i/o驱动程序都有一个入口函数,这个函数最终会作为fx_media_open的一个入参,来被调用!!
VOID _fx_ram_driver(FX_MEDIA *media_ptr)
这个驱动程序入口函数会请求外设访问权限,包括初始化和启动扇区读取权限。向驱动程序发出的请求是按顺序进行的;即,filex会先等待当前请求完成,然后再发送另一个请求。

IO驱动程序请求
由于每个IO驱动程序都具有单个入口函数,比如_fx_ram_driver,因此filex会通过media control block发出特定的请求,其实也就是FX_MEDIA *media_ptr啦,哈哈。

  • FX_MEDIA 的 fx_media_driver_request 成员用于指定确切的驱动程序请求 。
  • FX_MEDIA 的fx_media_driver_status 成员来传达请求的成功或失败结果。
  • 如果驱动程序请求成功,则在驱动程序返回之前,会将 FX_SUCCESS 放入此字段。 否则,如果检测到错误,则将 FX_IO_ERROR 放入此字段。
  1. 驱动程序初始化:FX_DRIVER_INIT
  2. 启动扇区读取:FX_DRIVER_BOOT_READ,读取media的boot sector。
  3. 启动扇区写入:FX_DRIVER_BOOT_WRITE,写入media的boot sector。
  4. 扇区读取:FX_DRIVER_READ,将一个或多个逻辑扇区读入内存。
  5. 扇区写入:FX_DRIVER_WRITE,将一个或多个扇区写入物理设备。
  6. 驱动程序刷新:FX_DRIVER_FLUSH,将当前位于驱动程序扇区缓存中的所有扇区刷新到物理设备。
  7. 驱动程序中止:FX_DRIVER_ABORT,通知驱动程序中止物理设备中所有进一步的物理IO活动。

ram驱动程序示例代码:
FileX 演示系统随附了一个小型 RAM 磁盘驱动程序,该驱动程序在文件fx_ram_driver.c 中定义。 该驱动程序假设有 32K 内存空间,并且会为 256 个 128 字节的扇区创建启动记录。 此文件提供了一个很好的示例用于演示如何实现应用程序特定的 FileX I/O 驱动程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/793654.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣-回溯法

何为回溯法? 在搜索到某一节点的时候,如果我们发现目前的节点(及其子节点)并不是需求目标时,我们回退到原来的节点继续搜索,并且把在目前节点修改的状态还原。 记住两个小诀窍,一是按引用传状态…

阿里云Linux中安装MySQL,并使用navicat连接以及报错解决

首先查询是否安装MySQL // linux 使用yum安装或者rpm安装。(就是一个安装工具类似于applStore,brew不必在意) // 区别:yum会自动安装你要安装的东西的其他依赖,rpm不会但会提示你需要安装的东西,比较麻烦,所以采用yum安…

日常的学习

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Android ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 7.11 resAndroidManifest 笔记 <> <> selector shape resources main下的AndroidMainifest.xml文件 application …

Windows系统MySQL的安装,客户端工具Navicat的安装

下载mysql安装包&#xff0c;可以去官网下载&#xff1a;www.mysql.com。点击downloads 什么&#xff1f;后面还有福利&#xff1f; 下载MySQL 下载企业版&#xff1a; 下载Windows版 5点多的版本有点低&#xff0c;下载8.0.38版本的。Window系统。下载下面的企业版。不下载…

C++笔试真题

可变分区管理方案 最佳适应&#xff1a;空闲区按容量递增最坏适应&#xff1a;空闲区按容量递减首先适应&#xff1a;空闲区按地址递增 C的结构体中有构造函数。 Linux新建用户或组 useradd&#xff1a;命令用于建立用户账号usermod&#xff1a;修改用户账号groupadd&#…

JAVA中的回溯算法解空间树,八皇后问题以及骑士游历问题超详解

1.回溯算法的概念 回溯算法顾名思义就是有回溯的算法 回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff0c;尝试别的路径。回溯法是一种选优搜索法&#xff…

kibana连接elasticsearch(版本8.11.3)

前言 elasticsearch在8版本之后就出现了很大变化&#xff0c;由于kibana版本需要需elasticsearch进行版本对象&#xff0c;kibana连接方式也出现了很大变化。我在这里记录下自己的踩坑记录。 服务部署 本文中的服务都是在docker环境中部署的。其中elasticsearch版本和kibana版…

攻防世界(PHP过滤器过滤)file_include

转换过滤器官方文档&#xff1a;https://www.php.net/manual/zh/filters.convert.php#filters.convert.iconv 这道题因为convert.base64-encode被过滤掉了&#xff0c;所以使用convert.iconv.*过滤器 在激活 iconv 的前提下可以使用 convert.iconv.* 压缩过滤器&#xff0c; 等…

【Python实战因果推断】31_双重差分2

目录 Canonical Difference-in-Differences Diff-in-Diff with Outcome Growth Canonical Difference-in-Differences 差分法的基本思想是&#xff0c;通过使用受治疗单位的基线&#xff0c;但应用对照单位的结果&#xff08;增长&#xff09;演变&#xff0c;来估算缺失的潜…

加减计数器

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 请编写一个十进制计数器模块&#xff0c;当mode信号为1&#xff0c;计数器输出信号递增&#xff0c;当mode信号为0&#xff0c;计数器输出信号递减。每次到达0&#xff0c;给出指示信号zero。 模块的接…

昇思25天学习打卡营第18天|MindNLP ChatGLM-6B StreamChat

MindNLP ChatGLM-6B StreamChat MindNLP ChatGLM-6B StreamChat是基于MindNLP框架和ChatGLM-6B模型实现的聊天应用&#xff0c;利用自然语言处理技术&#xff0c;实现与用户的自然语言交流。这样的应用可以广泛应用于智能客服、在线助理和社交聊天等场景。 在当前技术环境下&a…

鸿蒙语言基础类库:【@ohos.application.testRunner (TestRunner)】 测试

TestRunner TestRunner模块提供了框架测试的能力。包括准备单元测试环境、运行测试用例。 如果您想实现自己的单元测试框架&#xff0c;您必须继承这个类并覆盖它的所有方法。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-…

法律咨询援助网站

1 项目介绍 1.1 摘要 随着互联网技术的飞速发展&#xff0c;公众对于便捷、高效的法律咨询服务需求日益增长。传统的法律咨询方式已难以满足人们即时性、多样化的咨询需求&#xff0c;促使法律咨询援助网站应运而生。这些平台旨在通过数字化手段&#xff0c;为用户提供法律知…

教务管理系统

教务管理系统 For Free 本项目免费获取&#xff0c;获取方式在后台发送教务管理系统。系统的实现比较简单&#xff0c;主要是对数据库的读取和前端数据调用的表格展示&#xff0c;并没有太多的交互&#xff0c;比较适合初学者学习Flask和数据库的使用&#xff0c;所以免费获取…

8626 原子量计数

分析&#xff1a; 1. **读取输入**&#xff1a;首先&#xff0c;我们需要读取输入中的第一行&#xff0c;了解有多少个化学式需要处理。之后&#xff0c;对于每个化学式&#xff0c;我们逐行读取并进行处理。 2. **解析化学式**&#xff1a;对于每个化学式&#xff0c;我们需要…

如何在Ubuntu环境下使用加速器配置Docker环境

一、安装并打开加速器 这个要根据每个加速器的情况来安装并打开&#xff0c;一般是会开放一个代理端口&#xff0c;比如1087 二、安装Docker https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script 三、配置Docker使用加速器 3.1 修改配置…

如何处理 PostgreSQL 中由于表锁定导致的并发访问问题?

文章目录 一、表锁定的类型二、表锁定导致的并发访问问题三、解决方案&#xff08;一&#xff09;使用合适的锁定模式&#xff08;二&#xff09;优化事务处理&#xff08;三&#xff09;避免不必要的锁定&#xff08;四&#xff09;使用索引&#xff08;五&#xff09;监控和分…

Protobuf: 大数据开发中的高效数据传输利器

作为一名大数据开发者&#xff0c;我经常需要处理海量的数据传输和存储。在这个过程中&#xff0c;选择一个高效、可靠的数据序列化工具至关重要。今天&#xff0c;我想和大家分享一下我在项目中使用 Protobuf 的经历。 目录 故事背景Protobuf 简介优点&#xff1a; 实战案例示…

在【Open3D】点云世界中精准定位,绘制立方体标记特定点位

Open3D精准定位点云特定点&#xff0c;绘制醒目立方体标记&#xff0c;提升数据解读效率与直观性。 Open3D是一个开源的跨平台计算机视觉库&#xff0c;它为开发人员提供了一个易于使用且高性能的3D数据处理平台。 # pcd&#xff1a;传入原始点云图 # point1&#xff1a;要进…

【HarmonyOS】获取通讯录信息

【HarmonyOS】获取通讯录信息 一、问题背景&#xff1a; 在Android和IOS中&#xff0c;获取手机通讯录信息的方式&#xff0c;一般是申请通讯录权限后&#xff0c;获得手机所有的通讯录列表信息。 在鸿蒙中&#xff0c;因为权限方式安全性提高的变更&#xff1a;将用户权限限…