LINUX IIO子系统分析之一 IIO子系统概述

本文深入剖析了IIO子系统,介绍了其为ADC、DAC等设备提供的驱动框架,以及包括iiobuffer、iiotrigger和iioevent在内的关键组件。探讨了IIO子系统如何通过字符设备和sysfs与应用层交互,以及支持连续数据采集的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从本章开始,我们进行IIO子系统专栏的分析文档,本次IIO子系统专栏分析文档大概包含如下几章:

一、 IIO子系统概述

二、IIO子系统相关数据结构分析

三、iio trigger 介绍

四、iio event介绍

五、iio buffer介绍

六、iio device的注册与注销介绍

七、iio trigger驱动实现

八、虚拟iio device驱动实现

 

 

一、IIO子系统介绍

     本章我们对IIO子系统做一个简单的概述,IIO子系统主要提供对ADC、DAC相关的设备驱动框架,该子系统的设计目的主要是驱动那些分类时处于hwmon和input子系统之间的设备。同时查看linux内核的驱动代码,其实iio、hwmon之间的界限并不是那么明显。而iio子系统所面向的设备包含:

  1. ADC芯片;
  2. DAC芯片;
  3. 温度传感器;
  4. 光感器;
  5. 陀螺仪;
  6. 加速度计;
  7. CDCs;
  8. IMUs
  9. 压力传感器等等

 

 

二、IIO子系统架构

 

如下即为IIO子系统框架,针对IIO子系统而言,其主要提供两种方式与应用层交互:

  1. 通过字符设备文件,应用程序可读取IIO device 各通道的信息;
  2. 通过sysfs下的属性文件,应用程序也可以读取IIO device各通道的信息;

 

而在IIO子系统内部,则主要包括如下四部分的内容:

  1. iio buffer用于处理需要进行连续采集的数据,当一个IIO device的各通道数据支持连续采集时,则调用iio buffer模块提供的接口,创建iio buffer用于存储连续存储的数据,同时该模块提供字符设备文件的注册,因此应用程序通过字符设备文件即可读取该IIO device各通道连续采集的数据;
  2. 当IIO DEVICE支持连续采集时,一般需要绑定一种触发方法,作为数据到达的信号,而IIO子系统提个iio trigger实现该功能,当iio trigger信号到后,则将数据push到iio buffer中(目前IIO子系统提供了iio trigger的注册、注销与查找接口,且系统中已提供了iio-trig-sysfs、iio-trig-gpio、iio-trig-irq等通用的触发方法。这种方式是不是很眼熟,在led子系统中,也包含为led-trigger,一个led-class可以和一个led-trigger绑定,从而实现对led亮度的控制策略);
  3. 针对温度传感器等器件,也会进行事件触发(如温度传感器设置温度上限阈值,当温度高于该阈值后,则触发中断信号),因此IIO子系统提供了iio event模块,iio event模块提供了字符设备操作接口用于对event的监控(该字符设备操作接口并没有创建字符设备文件,而是在iio buffer的ioctl中开启event monitor,然后调用anon_inode_getfd创建了一个匿名inode节点,并设置inode的ops接口等)。
  4. 以上3个都是iio 子系统各子功能,而iio core则主要实现iio device的创建,并根据传递的参数决定是否需要创建iio buffer等,提供了iio device的内存申、请注册与注销接口。

 

 

 

二、IIO DEVICE相关通道数据访问方式

IIO子系统针对IIO DEVICE中各通道的访问方式主要提供两种,即sysfs方式访问、字符设备方式访问.

  1. sysfs方式数据访问
    1. 针对IIO DEVICE的通道数据,仅需要通过ONE-SHOT方式访问时,则只需要通过sysfs方式访问即可,即在sysfs目录下通过IIO DEVICE提供的属性文件进行访问(如cat  in_voltage0_raw)
  2. 字符设备方式数据访问
    1. 针对IIO DEVICE的通道数据,需要支持连续采集功能时,则借助iio-trigger、iio-buffer实现数据的触发与存储功能,同时应用程序可通过对应的iio buffer提供的字符设备文件,访问存储的连续采集的数据。

 

 

     本篇文章主要是对IIO子系统进行简要说明,介绍IIO子系统的框架及主要子模块功能进行简要说明。下一章我们将通过IIO子系统的数据结构入手,分析IIO子系统的设计框架。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值