RTEMS文件系统(4):系统调用开发信息(上)

Ubuntu下编译RTEMS 说明由于RTEMS 的最新版本4.12的使用信息并不完善,我们决定采用更加完善稳定的RTEMS 4.11版本,配套使用4.11的RTEMS Resource Builder。Linux下RTEMS工具链的安装Linux下的RTEMS工具链包括gcc, gdb, python等,首先使用命令安装这些工具* $ sudo apt-get build-dep binutils gcc g++ gdb un 阅读详情

4 system Call Development Notes
这一套例程代表应用程序中~RTEMS~文件系统为文件和目录提供的接口。
所有函数都与~POSIX~标准兼容,如果一个特定的接口已经实现。
下面的列表列出的例程是应用程序接口一部分。

  • access()
  • chdir()
  • chmod()
  • chown()
  • close()
  • closedir()
  • dup()
  • dup2()
  • fchmod()
  • fcntl()
  • fdatasync()
  • fpathconf()
  • fstat()
  • ioctl()
  • link()
  • lseek()
  • mkdir()
  • mkfifo()
  • mknod()
  • mount()
  • open()
  • opendir()
  • pathconf()
  • read()
  • readdir()
  • unmount()



下面的小将提供每一个函数与开发相关的信息。

4.1 access
FILE: access.c
文件:access.c

处理:
此函数是基于~stat()~函数的。它获取指定文件的当前状态信息,然后根据传递给这个函数的模式参数判断调用者否有能力访问该文件(读、写或执行)。

开发注释:此函数是基于~stat()~函数之上的。只要返回的结构中的~st_mode~字段遵循的标准~UNIX~惯例,这个函数不需要修改也应该支持其他文件系统。


4.2 chdir
文件:chdir.c

处理:这个函数将判断我们试图改变当前路径的路径名是否存在并且是否为一个目录。
如果这些条件满足,当前目录全局指示~(rtems_filesystem_current)~被设置为由~rtems_filesystem_evaluate_path()~函数
返回的~rtems_filesystem_location_info_t~结构定义的变量。

开发注释:此函数是基于~rtems_filesystem_evaluate_path()~函数和文件系统指定的~OP~表中的~node_type()~函数。
每个文件系统必须提供~node_type()~函数,因为它访问文件系统的节点信息,以判断该节点是以下哪种类型:

  • RTEMS_FILESYSTEM_DIRECTORY
  • RTEMS_FILESYSTEM_DEVICE
  • RTEMS_FILESYSTEM_HARD_LINK
  • RTEMS_FILESYSTEM_MEMORY_FILE



必须承认这种节点管理信息的形式可以适应各种不同的文件系统的具体实现。
RTEMS~有一个特殊结构的全局变量,维护当前的目录位置。
这个全局变量的类型是~rtems_filesystem_location_info_t,名字为~rtems_filesystem_current。
这个结构并不总是有效的。为了确定结构是有效的,你必须先测试此结构中的~node_access~字段。
如果指针为~NULL,那么这个结构并不包含有效的当前目录的指示。

4.3chmod
文件:chmod.c

处理:此函数是基于~open()、fchmod()~和~close()~函数。
只要保持~mode_t~值的标准解释不变,该函数不需要修改即可支持其他的文件系统。

开发注释:该函数首先确定可以使用读/写访问打开所选的文件。
所选相关路径允许模式的修改需要这样打开文件。
fchmod()~函数使用~open()~函数返回的整数文件指针来实际修改路径的模式。
修改模式后,会关闭被打开的文件描述符。

4.4 chown
文件:chown.c

处理:此函数是建立在~rtems_filesystem_evaluate_path()~和由文件系统的~OPS~表中指定的~chown()~函数基础上的。


开发注释:rtems_filesystem_evaluate_path()~被用于确定指定的路径是否存在。
如果从其中获取到一个~rtems_filesystem_location_info_t~结构的数据,则允许调用函数使用这个文件系统的~OPS~表。
chown()~函数在~OPS~表中有可能没有定义。
在调用~chown()~函数之前需要检查~OPS~表中的~chown()~选项是否有效(不等于~NULL)。
如果~chown()~函数在~OPS~表中定义,使用路径评估例程返回的~rtems_filesystem_location_info_t~结构类型的变量,期望的拥有者和用户组
做为参数调用该函数。

4.5close
文件:
close.c

处理:这个函数将允许将网络连接和文件系统设备关闭。
如果文件描述符与一个网络设备相关,将从先前注册的网络函数表(rtems_libio_handlers)中选出适当的网络函数进行调用。
如果文件描述符引用一个文件系统中的入口,将使用设备放置在文件控制块~(rtems_libio_t~结构)~里的信息选择合适的处理程序。

开发注释:rtems_file_descriptor_type~检查一些文件描述符索引的高位部分。
如果它发现在文件描述符索引的高比特位被设置,该设备是网络设备的引用。
网络设备的处理程序是从一个特殊的注册表~(rtems_libio_handlers)~中获取的,它是在网络初始化时设置的。
调用网络处理程序,网络处理程序的状态将被返回给调用函数。
如果在文件描述符索引的高比特位没有被设置,文件描述符引用的是一个~RTEMS~文件系统的元素。
以下执行序列将会应用于任何文件系统的文件描述:

  •  使用~rtems_libio_iop()~函数为文件描述获取~rtems_libio_t~结构;
  •  使用~rtems_libio_check_fd()~对文件描述符进行范围检查;
  •  确认是否在处理程序选择表中有一个真实的函数为文件系统和节点类型选择处理~close()~操作。
  • 这通常是为了避免执行尚未实现的函数;
  •  如果定义了该函数,调用它的时候使用文件控制块的指针作为它的参数;
  •  与打开文件描述符相关联的文件控制块被使用~rtems_libio_free()~函数标记为自由(???);
  •  关闭处理程序返回代码给调用它的程序。




4.6 closedir
文件:closedir.c

处理:这个代码从~BSD~小组获取。此例程必须清理跟踪打开目录所需要的内存资源。
该代码是基于~close()~函数和标准内存~free()~函数。
它不需要改变即支持其他文件系统。

开发注释:该例程更改文件描述符和索引成为一个目录结构,使其变为一个无效的文件描述符。
显然,即将被释放的内存在重新申请之前仍可能被引用。
dd_buf~结构的内存将在包含指向~dd_buf~区域的指针的控制结构之前被重新分配。
目录控制内存被重新分配。
close()~函数用于释放文件描述符索引。

4.7 dup() Unimplemented
File:
dup.c
Processing:
Development Comments:

4.8 dup2() Unimplemented
File:
dup2.c
Processing:
Development Comments:

4.9 fchmod
文件:fchmod.c

处理:此函数将改变一个文件系统的节点的权限。它是基于以下的函数和宏:

  •  rtems_file_descriptor_type();
  •  rtems_libio_iop();
  •  rtems_libio_check_fd();
  •  rtems_libio_check_permissions();
  •  与这个文件描述符关联的文件控制块中处理例程表所引用的~fchmod()~函数。



开发注释:
例程将尝试去检查文件描述符索引是否与网络连接相关联。
如果是,则从这个例程返回一个错误。
文件描述符索引号是用来获取相关的文件控制块。
文件描述符的值已被检查了范围。
检查文件控制块以确定是否拥有对它的写权限,让我们可改变文件的模式。
测试文件控制块所引用的处理程序表中是否包含~fchmod()~处理函数。
如果没有,将返回一个错误给调用例程。
如果~fchmod()~函数存在,程序会以文件控制块和所需的模式作为参数调用该函数。

4.10 fcntl
文件:fcntl.c

处理:
目前函数仅与文件控制块交互。如果文件控制块的结构和相关字段的含义没有改变,
在其他文件系统的实现中部分~fcntl()~的实现应保持不变。

开发注释:
已经实现的命令只有~F_SETFD~和~F_GETFD。
该命令操纵文件描述符索引相关联的文件控制块中的~flags~字段的~LIBIO_FLAGS_CLOSE_ON_EXEC~比特位。

该函数的目前实现执行的操作顺序如下:

  •  检查我们正在试图操作的文件描述符是否与网络连接相关;
  •  获取与文件描述符索引相关的文件控制块;
  •  对该文件描述符索引执行范围检查。

 

RTEMS的BSP开发流程 RTEMS BSP 的开发流程图,一共分为 8 个步骤:建立开发环境、选择 BSP 模板、新建 BSP 目录、建立 BSP 配置文件、修改 Makefile、修改启动代码、配置 RTEMS 和编译测试和运行。第一步:建立开发环境。主要是针对 Linux 上的环境配置,将 Linux 作为宿主环境,开发板作为目标环境。 第二步:选择 BSP 模板。这一步主要是针对目标开发板,寻找合适的 BSP。RT 阅读详情

相关推荐

RTEMS4.11 FEDORA20 64BIT环境搭建

之前一直在MCU上用的是UCOS系统,虽然UCOS小巧易用,但终究是收费的而且过于简单的OS。在机缘巧合之下,了解到了RTEMS、NUTTX,在RTEMS、NUTTX、ECOS中徘徊了一段时间之后,决定使用RTEMS。ECOS在STM32上有点庞大,NUTTX跟RTEMS相比,比较年轻,稳定性不如RTEMS经过验证。 1.感谢 在此首先感谢Ray大神,最早是根据Ray的www.rtems.ne

qq_30136173的博客 1165

rtems 文件系统(8)

实现文件系统的需求 rtems的文件系统框架是兼容posix files 和 directories接口标准的。以下的文件系统特性产生了一个功能转换层。 1:应用程序提供了一套标准的POSIX标准功能集,这些功能允许它们和文件,设备,目录进行接口。这些接口并不反映从属 文件系统的实现类型。 2:框架允许在base filesystem下面挂载不同类型的文件系统。 3:定位文件信息的机制在

wangbinyantai的专栏 471

飞腾CPU运行RTEMS6.0

飞腾CPU运行RTEMS

lizongjun126com的博客 1342

rtems 文件系统(15)-jffs2 研究(1)

根据之前的结果,虽然能够挂载上,但是有很多问题,参考(12)中描述。因为对jffs2完全没有什么概念可言,只知道这是一个flash的文件系统,并且挂载的时候只提供了下面的信息给到jffs2.对于内部怎么操作完全无知。并且flash每次擦除都是一个块一个块的。比如删除一个东西的时候是否会删除其他部分?怎么保留下来的。还是挺好奇的。 为了解决问题,只能硬着头皮看jffs2的源码。看一下它挂载

wangbinyantai的专栏 902

使用RTEMS Source Builder 编译RTEMS-4.11的开发工具链

最近一直在折腾学习RTEMS,想移植到:STM32F429上,终于在VM 虚拟机:CentOS 6.6上架起了基于STM32F429-Discovery 的RTEMS 4.11 的开发测试环境。 开发环境如下: PC机:windows 7 64bit VM: CentOS 6.6 RTEMS: RTEMS-4.11 RTEMS工具链:arm-rtems-4.11        其实官方

坚韧与专注 5851

在BeagleBone Black上实现RTEMS实时嵌入式系统

实时操作系统(Real-Time Operating System, RTOS)在需要快速和准确响应的环境中扮演着核心角色。RTEMS(Real-Time Executive for Multiprocessor Systems)是专为实时嵌入式系统设计的一个开源实时操作系统,它具有高度的可配置性、可伸缩性和高性能。

weixin_34535286的博客 966

rtems文件系统(1)

本文主要整理了 rtems 文件系统相关的知识。rtems 架构支持• Mountable file systems 可挂载• Hierarchical file system directory structure 分级• POSIX compliant set of routines for the manipulation of files and directories         p

wangbinyantai的专栏 817

filesystem.RTEMS文件系统设计指南.双语.V20131224.pdf

RTEMS的filesystem文档的原创翻译。

RTEMS文件系统(6):内存文件系统(上)

<br />%6 In-Memory Filesystem<br /> 本节描述了内存文件系统~(In-Memory Filesystem,IMFS)。IMFS~是一个功能齐全的在内存中保存所有信息的~POSIX~文件系统。<br /><br /> %6.1 IMFS Per Node Data Structure<br /><br /> 每一个普通文件、设备、硬链接和目录都由一个叫~jnode~的数据结构表示。<br /> jnode~由以下的结构体类型定义:<br /><br /><br />

雪松's RTEMS 3489

文件系统jffs2的镜像制作

将文件系统的源码,各文件夹统一制作成jffs2格式的文件系统镜像文件,并通过tftp下载到开发板,烧写到nand中开机运行

同一台电脑使用模拟ModbusTcp主从通讯的时候,Wireshark抓取不到包

在使用ModBus Slave和Poll模拟主从通讯的时候,发现Wireshark怎么都抓取不到包怎么排查和解决?

HUJIANGMING的博客 704

RTEMS文件系统(5):文件系统实现需求(下)

<br />5.4 Operation Tables<br /> 文件系统的具体操作是被间接调用地。这些由文件系统实现的函数被配置为两个表。<br /> 文件系统处理程序表含有的针对具体文件系统的函数,与实际文件类型无关。<br /> 文件处理程序例程表含有文件系统和文件类型两种函数。<br /><br /> 5.4.1 Filesystem Handler Table Functions<br /> OPS~表函数被定义成一个~rtems_filesystem_operations_table~

雪松's RTEMS 2012

Ubuntu 24.04 安装 ROS2 Jazzy

手把手教你在Ubuntu24.04上安装JazzyROS2操作系统。

weixin_74185504的博客 1万+

RTEMS文件系统(4):系统调用开发信息(下)

<br />4.18 mkfifo<br /> 文件:mkfifo.c<br /><br /> 处理:这个函数试图在文件系统下的创建一个先进先出节点。该函数基于~mknod()~函数。<br /><br /> 开发注释:见~mknod()~函数的开发注释。<br /><br /> 4.19 mknod<br /> 文件:mknod.c<br /><br /> 处理:<br /> 此函数允许在文件系统下创建以下类型的节点:<br /> 目录; 普通文件; 字符设备; 块设备; FIFOS。<br

雪松's RTEMS 1703

CTF实战:Wireshark数据包分析从入门到精通(附经典题型解析)

本文详细介绍了Wireshark在CTF比赛中的数据包分析技巧,从基础抓包到高级协议解析,涵盖HTTP流量分析、USB键盘数据还原等实战案例。通过经典题型解析,帮助读者掌握精准过滤、文件提取等核心技能,提升CTF竞赛中的网络流量分析能力。

pz890123的博客 586

STM32CubeMX HAL实战:JY901S串口数据解析与姿态解算

本文详细介绍了如何使用STM32CubeMX HAL库实现JY901S六轴姿态传感器的串口数据解析与姿态解算。从基础硬件连接到USART3配置,再到数据接收状态机实现和传感器校准方法,最后深入讲解互补滤波与Mahony滤波算法在姿态解算中的应用。通过实战代码演示,帮助开发者快速掌握无人机、机器人等项目中关键姿态数据处理技术。

weixin_28703489的博客 432

RTEMS文件系统(4):系统调用开发信息(中)

4.11 fdatasync 文件:fdatasync.c 处理:此函数是内存文件系统(IMFS)的模板,将指导我们到相应的处理函数进行~fdatasync()~处理。 在内存文件系统中该函数是非必要的。在一个采用内存高速缓存的磁盘文件系统上它的功能是将数据缓冲区的数据写入磁盘。 它基于以下函数和宏:  rtems_file_descriptor_type();  rtems_libio_iop();  rtems_libio_check_fd();  rtems_libio_check_p

雪松's RTEMS 1778

把 SNC 支持的通信链路一次讲透,SAP GUI、RFC、CPIC、SAProuter 到底谁在保护谁

摘要: SNC(Secure Network Communications)是SAP系统中用于保护特定通信链路的安全机制,主要应用于DIAG、RFC、CPIC等SAP协议,而非HTTP等互联网协议(后者由SSL/TLS处理)。其核心在于保护通信端点之间的逻辑链路,需在发起方和接收方同时配置SNC参数,包括SNC名称、保护等级(QoP)等。实际项目中,SNC的配置涉及多个层面,如SAP GUI到ABAP平台的登录链路、外部程序通过RFC/CPIC连接ABAP的认证、ABAP系统间的跨系统通信等。配置不当可能导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

RTEMS 文件系统设计指南

RTEMS 文件系统设计指南 filesystem.RTEMS文件系统设计指南.双语.V20131224.pdf RTEMS 的filesystem文档的原创翻译。 目录 前言 15 1 路径名评估 19 1.1 路径名评估处理程序 19 1.2 在路径评估期间穿越挂载点 19 1.3 rtems_filesystem_location_info_t结构 20 2 系统初始化 23 2.1 基础文件系统 24 2.1.1 基础文件系统的挂载 25 3 挂载和卸载文件系统 27

天又亮了 1467

【数据集】全球大气空气柱平均甲烷(XCH₄)和一氧化碳(XCO)浓度数据集 TROPOMI/WFMD

全球大气空气柱平均甲烷(XCH₄)和一氧化碳(XCO)浓度数据集 TROPOMI/WFMD

WW、forever的博客 387

PX4从放弃到精通(五):PX4中的姿态表示方法及转换关系

文章目录机体坐标系与地理坐标系一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 机体坐标系与地理坐标系 在实际应用中,加速度计的测量轴是由运动平台安装固定此器件的轴向决定的。这些坐标轴就形成了载体坐标系,定义如下: 坐标原点设在载体质心(这样可简化运动方程的推导); y轴指向载体前方,称为横滚轴,横滚角以y轴为起始旋转轴而得到,符合右手定则; x轴与y轴夹角90°,指向载体横向,称为俯仰轴,俯仰角以x轴为起始旋转轴而得到,符合右手定则; z轴与x轴、y轴构成右手笛卡儿坐标系,指向载体垂直方向

超维空间科技的博客 8113

构建beagleboneblack的rtems5开发环境

编译环境说明 安装工具链 下载RTEMS内核源码 编译bsp包 编译rtems-libbsd 常见错误 一些脚本 编译环境说明 时间:2018.04.28. rtems-source-builder版本哈希值:10d3aaf。rtems-src哈希值8b5a801,rtems-libbsd哈希值ef5d536。我只是在我当前的版本编译成功,如果遇到问题无法解决可以...

bh_binghu的专栏 1995

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RTEMS 开发环境指南

RTEMS 开发环境指南 develenv.RTEMS开发环境指南.双语.V20131224.pdf RTEMS 的develenv文档的原创翻译。 目录 1 简介 7 2 目录结构 9 2.1 c/ 目录 14 2.1.1 c/src/ 目录 15 2.1.1.1 c/src/lib/libbsp BSP目录 18 2.2 CPU工具箱目录 19 2.3 testsuites/测试套件 24 2.4 Documentation目录 26 3 示例应用程序 31

天又亮了 1958

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

rtems 文件系统(3)

通过查询源码,有一点点模糊的感觉,还是接着看文档比较靠谱。 调用rtems_filesystem_initialize()函数将会挂载‘In Memory File System’作为 the base filesystem 初始化过程在 cpukit/sapi/include/confdefs.h 中有定义 #ifdef CONFIGURE_INIT    //一般都会定义这个宏。 co

wangbinyantai的专栏 452

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 基于Qemu的RTEMS仿真平台搭建
下一篇: RTEMS文件系统(4):系统调用开发信息(中)
coolbacon
博客等级 码龄22年 1766粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值