linux IO子系统和文件系统读写流程

我们含有分析的,是基于2.6.32及其后的内核.

我们在linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据提交给我们,而我们则无需和块设备打交道。

从下图,我们可以清除的看到:

I/O子系统是个层次很深的系统,数据请求从用户空间最终到达磁盘,经过了复杂的数据流动。

对设驱开发人员或与此相关的设计人员,特别是IO很密集,我们就需要搞清楚IO具体是如何动作的,免得滥用IO和导致设计问题。(http://blog.yufeng.info/archives/751)


IBM developworks中,〈read系统调用剖析〉阐述就很清楚。

read系统调用的处理分为用户空间和内核空间处理两部分。其中,用户空间处理只是通过0x80中断陷入内核,接着调用其中断服务例程,即sys_read以进入内核处理流程。

对于read系统调用在内核的处理,如上图所述,经过了VFS、具体文件系统,如ext2、页高速缓冲存层、通用块层、IO调度层、设备驱动层、和设备层。其中,VFS主要是用来屏蔽下层具体文件系统操作的差异,对上提供一个统一接口,正是因为有了这个层次,所以可以把设备抽象成文件。具体文件系统,则定义了自己的块大小、操作集合等。引入cache层的目的,是为了提高IO效率。它缓存了磁盘上的部分数据,当请求到达时,如果在

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Linux下,可以使用sysfs文件系统来进行GPIO的测试。sysfs是Linux内核提供的一种虚拟文件系统,可以用来访问内核和硬件设备的一些属性和状态信息。GPIO子系统会在sysfs文件系统中创建相应的目录和文件,从而让用户可以通过文件操作来进行GPIO的测试。 以下是在Linux下使用sysfs文件系统进行GPIO测试的简单步骤: 1. 确认GPIO的编号 在进行GPIO测试之前,需要先确认GPIO的编号。可以通过查阅开发板或芯片的文档来获取GPIO的编号。在树莓派上,可以使用`gpio readall`命令来查看GPIO引脚的编号和状态。 2. 导出GPIO 在使用GPIO之前,需要先将其导出到sysfs文件系统中。可以通过以下命令将GPIO导出: ``` echo [gpio编号] > /sys/class/gpio/export ``` 例如,将GPIO17导出到sysfs文件系统中可以使用以下命令: ``` echo 17 > /sys/class/gpio/export ``` 3. 配置GPIO的方向 在使用GPIO之前,需要先将其配置为输入或输出模式。可以通过以下命令来配置GPIO的方向: ``` echo [in/out] > /sys/class/gpio/gpio[编号]/direction ``` 例如,将GPIO17配置为输出模式可以使用以下命令: ``` echo out > /sys/class/gpio/gpio17/direction ``` 4. 控制GPIO的电平 在GPIO配置完成之后,就可以通过sysfs文件系统来进行GPIO读写操作了。可以通过以下命令来控制GPIO的电平: ``` echo [0/1] > /sys/class/gpio/gpio[编号]/value ``` 例如,将GPIO17设置为高电平可以使用以下命令: ``` echo 1 > /sys/class/gpio/gpio17/value ``` 将GPIO17设置为低电平可以使用以下命令: ``` echo 0 > /sys/class/gpio/gpio17/value ``` 5. 取消导出GPIO 在GPIO测试完成之后,需要将其从sysfs文件系统中取消导出。可以通过以下命令来取消GPIO的导出: ``` echo [gpio编号] > /sys/class/gpio/unexport ``` 例如,取消GPIO17的导出可以使用以下命令: ``` echo 17 > /sys/class/gpio/unexport ``` 通过sysfs文件系统进行GPIO测试是一种简单的方法,但也存在一些限制,例如无法实现高速IO操作和复杂的IO控制。对于一些需要高速IO操作和复杂IO控制的应用场景,可能需要使用专门的GPIO库或驱动程序来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值