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_TESTstatus =  fx_media_open(&sdio_disk, "STM32_SDIO_DISK", fx_stm32_sd_driver, 0, media_memory, sizeof(media_memory));
#elsestatus =  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.rhkb.cn/news/374483.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪个牌子开放式耳机质量好?五款全网爆火款式盘点!

开放式耳机是目前最流行的一种无线蓝牙耳机,与TWS耳机一样,拥有小巧轻盈的耳机主体,也有便携的补能收纳充电仓,但不同的是,开放式耳机有更加舒适的佩戴体验。作为资深数码产品测评师,我最近测评了多款产品&…

基于前馈神经网络 FNN 实现股票单变量时间序列预测(PyTorch版)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对…

原生小程序生成二维码并保存到本地

需求:我要在一个页面中生成一个二维码,并且这个二维码可以长按保存到本地或者发送给好友; 我这里是将生成的canvas二维码转换成图片,利用长按图片进行保存或转发 效果图: 第一步先下载对应的包: npm instal…

Docker部署gitlab私有仓库后查看root默认密码以及修改external_url路径和端口的方法

文章目录 1、docker部署最新版gitlab2、进入gitlab容器3、修改路径地址ip和端口4、检验效果 1、docker部署最新版gitlab #docker安装命令 docker run --detach \--name gitlab \--restart always \-p 1080:80 \-p 10443:443 \-p 1022:22 \-v /gitlab/config:/etc/gitlab \-v …

Apache中使用CGI

Apache24 使用Visual Studio 2022 // CGI2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdio.h> #include <stdlib.h>#include <stdio.h>void main() {//设置HTML语言printf("Content-type:text/html\n\n&q…

Redis基本命令源码解析-字符串命令

1. set 用于将kv设置到数据库中 2. mset 批量设置kv mset (msetnx) key1 value1 key2 value2 ... mset:msetCommand msetnx:msetnxCommand msetCommand和msetnxCommand都调用msetGenericCommand 2.1 msetGenericCommand 如果参数个数为偶数,则响应参数错误并返回 如果…

【游戏客户端】大话slg玩法架构(二)背景地图

【游戏客户端】大话slg玩法架构&#xff08;二&#xff09;背景地图 大家好&#xff0c;我是Lampard家杰~~ 今天我们继续给大家分享SLG玩法的实现架构&#xff0c;关于SLG玩法的介绍可以参考这篇上一篇文章&#xff1a;【游戏客户端】制作率土之滨Like玩法 PS&#xff1a;和之前…

hudi数据湖万字全方位教程+应用示例

1、时间轴&#xff08;TimeLine&#xff09; Hudi的核心是维护表上在不同的即时时间&#xff08;instants&#xff09;执行的所有操作的时间轴&#xff08;timeline&#xff09;&#xff0c;这有助于提供表的即时视图 一个instant由以下三个部分组成&#xff1a; 1&#xff09;…

视频号矩阵系统源码,实现AI自动生成文案和自动回复私信评论,支持多个短视频平台

在当今短视频蓬勃发展的时代&#xff0c;视频号矩阵系统源码成为了自媒体人争相探索的宝藏。这一强大的技术工具不仅能帮助我们高效管理多个短视频平台&#xff0c;更能通过AI智能生成文案和自动回复私信评论&#xff0c;为自媒体运营带来前所未有的便利与效率。 一、视频号矩…

layui-表单(输入框)

1.基本使用方法 先写一个表单元素块 form 加上layui-form 里面写行区块结构&#xff0c;如下&#xff1a; 2.输入框样式选项 input框 placeholder默认文本 autocomplete自动填充 lay-verify required必填 3.下拉菜单样式选项 默认选择第一项 select框 disable禁…

导员:你这么牛,那你来讲讲你项目的核心流程-判题模块吧

耗时一个月开发的OJ在线判题系统&#xff0c;文末有项目地址&#xff0c;目前还在更新代码~ 今天我们来开发OJ系统后端核心流程之一的判题模块 文章目录 判题机模块与代码沙箱的关系代码沙箱架构开发判题服务开发判题服务业务流程判断逻辑策略模式优化 小知识-Lombox Builder …

新品牌快速成长指南:揭秘品牌成功的黄金法则

打造一个新品牌是一个系统性工程&#xff0c;不是一两句话就能说清楚的。 作为一个13年的营销人&#xff0c;今天试图给大家以最简练和通俗的文字&#xff0c;详细讲讲打造一个全新的品牌都需要做些啥&#xff1f;码字不易&#xff0c;请多给点支持哦。 一、市场调研与定位&a…

Elasticsearch 开放推理 API 增加了对 Amazon Bedrock 的支持

作者&#xff1a;来自 Elastic Mark Hoy, Hemant Malik Elasticsearch 开放推理 API 增加了对托管在 Amazon Bedrock 上的模型生成嵌入的支持。 Elasticsearch 开放 infereence API 使开发人员能够创建推理端点并使用来自领先提供商的机器学习模型。从今天开始&#xff0c;托管…

超简单的通配证书签发工具,免费,无需安装任何插件到本地

常见的acme.sh 或者 lego等工具需要配置&#xff0c;安装不灵活&#xff0c;续签需要配置计划任务&#xff0c;签发单域名证书或者通配证书需要不同的指令和配置&#xff0c;繁琐&#xff0c;如果自己程序想要对接签发证书的api有的不支持&#xff0c;有的用起来繁琐。 最近发…

确保智慧校园安全,充分利用操作日志功能

智慧校园基础平台系统的操作日志功能是确保整个平台运行透明、安全及可追溯的核心组件。它自动且详尽地记录下系统内的每一次关键操作细节&#xff0c;涵盖操作的具体时间、执行操作的用户账号、涉及的数据对象&#xff08;例如学生信息更新、课程调度变动等&#xff09;、操作…

华为HCIP Datacom H12-821 卷34

1.单选题 防火墙默认已经创建了一些安全区域,以下哪一个安全区域不是防火墙上默认存在的? A、Trust B、DMZ C、Internet D、Local 正确答案&#xff1a; C 解析&#xff1a; 防火墙默认情况下为我们提供了三个安全区域&#xff0c;分别是 Trust、DMZ和Untrust 2.判断题 …

(图文详解)小程序AppID申请以及在Hbuilderx中运行

今天小编给大家带来了如何去申请APPID&#xff0c;如果你是小程序的开发者&#xff0c;就必须要这个id。 申请步骤 到小程序注册页面&#xff0c;注册一个小程序账号 微信公众平台 填完信息后提交注册 会在邮箱收到 链接激活账号 确认。邮箱打开链接后&#xff0c;会输入实…

设备管理中的数据结构

一、有哪些数据结构属于设备管理数据结构 1. 设备控制表&#xff08;DCT&#xff09; “Device Control Table”的首字母缩写 2. 控制器控制表&#xff08;COCT&#xff09; “Controller Of Control Table”的首字母缩写。 3. 通道控制表&#xff08;CHCT&#xff09; “…

guided-diffusion 相比于improved-diffusion的sample增加的cond_fn()

目录 1、cond_fn()函数代码2、softmax与log_softmax函数 1、cond_fn()函数代码 def cond_fn(x, t, yNone):assert y is not Nonewith th.enable_grad():x_in x.detach().requires_grad_(True)logits classifier(x_in, t)log_probs F.log_softmax(logits, dim-1)selected l…

Transformer特辑

https://github.com/LongxingTan/Machine-learning-interview 模型结构 基本单元&#xff1a;token_embedding positional encoding, encoder, token_embedding positional encoding, decoderencoder: (self-attention, skip-connect, ln), (ffn, skip-connect, ln)decoder:…