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中开机运行

手把手教你用组态王KingSCADA 3.53读取S7-1200 PLC数据(保姆级图文教程)

本文提供了一份详细的组态王KingSCADA 3.53读取S7-1200 PLC数据的实战教程,涵盖从硬件连接到软件配置、变量映射到故障排查的全流程。特别针对初学者常见问题提供解决方案,帮助工程师快速实现稳定通信,提升工业自动化系统效率。

weixin_26876073的博客 673

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

深入理解「二进制掩码」:从原理到实践

二进制掩码本质上是一个二进制数,用于通过位操作(如与、或、非、异或等)选择性地操作目标数据的某些位。掩码的每一位(bit)可以看作一个“开关”,决定是否对目标数据的对应位进行操作。二进制掩码是位操作的灵魂,掌握它不仅能提升代码效率,还能解锁许多高级编程技巧。从基础的位提取到复杂的子集枚举,掩码的应用无处不在。希望本文的讲解和代码示例能帮助你快速上手,并在实际项目中灵活运用。如果你有更多关于掩码的疑问或应用场景,欢迎在评论区留言交流!

m0_73494933的博客 2432

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

从零搭建SPI通信系统:AXI Quad SPI IP核在Xilinx平台上的完整配置流程

本文详细介绍了在Xilinx平台上使用AXI Quad SPI IP核从零搭建SPI通信系统的完整配置流程。涵盖IP核架构解析、Vivado环境配置、寄存器编程实战及性能优化策略,帮助开发者快速实现高速稳定的SPI通信,特别适用于嵌入式系统开发中的外围设备连接需求。

hh234的博客 1053

Rocky Linux 9.2:利用LVM动态调整/home与/根分区空间分配

本文详细介绍了在Rocky Linux 9.2系统中,如何利用LVM(逻辑卷管理器)动态调整/home与根分区(/)的空间分配。针对根分区空间不足而/home分区闲置的常见问题,文章提供了从检查磁盘布局、备份数据、卸载分区、调整逻辑卷大小到重建文件系统的完整操作步骤,并重点说明了XFS与EXT4文件系统在缩容时的不同处理方法,帮助系统管理员安全、在线地实现存储空间的灵活调配。

weixin_29271263的博客 177

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

基于UCD3138的数字控制硬开关全桥DC-DC电源设计实战解析

在开关电源设计中,数字控制技术正逐步取代传统模拟方案,以其卓越的灵活性、可编程性和强大的数据处理能力,成为应对复杂动态响应与智能化需求的关键。其核心原理在于通过高精度模数转换器(ADC)实时采样电压、电流信号,经由数字信号处理器(如ARM内核)运行PID等控制算法,动态调整数字脉宽调制(DPWM)输出,从而实现对功率级的精确控制。这种技术价值体现在能够轻松实现高级算法(如输入电压前馈、非线性补偿)、灵活配置保护参数,并通过PMBus等接口实现智能化监控与管理。其典型应用场景包括通信基站、服务器电源以及工业设

1312

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

Cadence——原理图相关教程

包含创建文件,原理图,元器件,规则检查,PDF与BOM清单输出,各类PCB网表

haonanyayaya的博客 1万+

matlab 质心重合法实现点云配准【2026最新版】

质心重合法是将源点云和目标点云的质心重合,以此缩小两点云集之间的平移误差,从而为下一步粗配准提供更好的初始位置姿态。

点云侠的博客 509

构建beagleboneblack的rtems5开发环境

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

bh_binghu的专栏 1995

微信小程序云开发 - 实现商家转账到零钱(微信企业付款到零钱) V3功能流程及完整实例代码,过微信云开发的云函数实现企业付款到零钱(提供详细示例源码纯云函数实现,证书、密钥、签名等各种常见问题解决方案

企业付款到零钱(微信小程序提现功能,提现到零钱)微信小程序-云函数实现微信企业付款到零钱功能,实现微信商户号中的企业付款到零钱的功能,微信小程序+云开发+商家转账至零钱+微信小程序用户提现,使用云开发环境的云函数实现微信小程序的支付功能,微信小程序实现微信企业付款到零钱功能的流程,V3 V2基于微信云开发的商家转账至零钱,小程序云函数企业付款到零钱功能实现,云开发实现微信商户支付企业付款到零钱功能,不用服务器纯云函数实现,详细示例代码demo教程,API证书错误,转账不到账怎么办,密钥生成有误,转账失败,有

🏆 前端领域优质创作者 1万+

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

rtems 文件系统(3)

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

wangbinyantai的专栏 452

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: 基于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、付费专栏及课程。

余额充值