//============================================================================\\
|| 系            统:WindowsXP & Ubuntu14.04      
|| 工            具:Source Insight 3.5     
|| 作            者:疯狂的三极管      
\\===========================================================================//

最近由于工作的需要,接触了Linux iio子系统,对于这个目录其实以前是很少接触,接下了对 Linux iio 子系统进行分析。

1、首先 iio子系统在内核树中位置:drivers/staging/iio

详细的iio子系统说明文档位置:drivers/staging/iio/Documentation(文档是个好东西,详细阅读文档,有利于更深层次的理解iio子系统)

2、简介:
iiO子系统全称是 Industrial I/O subsystem(工业 I/O 子系统),此子系统的目的在于填补那些分类时处在hwmon(硬件监视器)和输入子系统之间的设备类型。在某些情况下,iio和hwmon、Input之间的相当大的重叠。

3、iio目录结构架构:

[plain] view plaincopy
  1. iio
  2. ├── accel
  3. ├── adc
  4. ├── addac
  5. ├── cdc
  6. ├── dac
  7. ├── dds
  8. ├── Documentation
  9. │   └── dac
  10. ├── gyro
  11. ├── impedance-analyzer
  12. ├── imu
  13. │   └── mpu
  14. │       └── inv_test
  15. ├── light
  16. ├── magnetometer
  17. ├── meter
  18. ├── pressure
  19. ├── resolver
  20. └── trigger

4、iio 目录结构说明:

进入相应目录,里面都有相关IC的驱动,网上查阅资料,对iio子系统做如下简要的说明:

accel :
该文件夹下是一些加速度传感器,例如:adis16201、kxsd9、lis3l02dq、sca3000等

adc :
该文件夹下是一些模数转换器,将模拟信号转换成数字信号,例如:ad7192、adt7310(数字温度传感器)等

addac :
Temperature Sensor 温度传感器,例如:adt7316

cdc :
电容数字转换,例如:ad7150

dac :

一些数模转换器,将数字信号转换成模拟信号,例如:ad5064、ad5791(单通道、20位、无缓冲电压输出DAC)等

dds :
频率扫描仪,频率合成器,例如:ad5930、ad9951等

Documentation :
iio子系统相关文档说明,相关说明比较详细,说明文档是个好东西……

gyro:
陀螺仪,例如:adis16060(角速度陀螺仪)、adis16260(数字陀螺仪)、adxrs450(角速率陀螺仪)等

impedance-analyzer :
阻抗测量芯片,只有一个芯片ad5933

imu:
惯性陀螺仪、磁力计、加速度计,例如:adis16400,其中的mpu子目录有些重要的传感器(目前工作中正在使用)
imu
    └── mpu:有MPU3050(三轴)、MPU6050(六轴)、MPU9150(整合了MPU6050及AK8975电子罗盘)、MPU6515等

light :
光学传感器,例如:isl29018、tsl2563等

magnetometer :
地磁传感器、磁力计传感器,例如:hmc5843、ak8975

meter : 
有功功率和电能计量,例如:ade7759(电能计量数据转换器)、ade7753等

pressure :
压力传感器,例如:bmp182

resolver :
旋转变压器/数字转换器,例如:ad2s1200(旋转变压器输出的模拟信号转化为数字信号)等

trigger:

触发器

5、iio子系统架构图:

6、iio子系统功能:

(1)、设备注册和处理

(2)、通过虚拟文件系统(VFS)轮训访问设备

(3)、chrdevs事件

chrdevs事件包括阈值检测器,自由下落检测器和更复杂的动作检测。chrdevs事件的输入,iio为底层硬件触发与用户空间通行提供了通道,chrdevs事件本身已经不仅仅是一个事件的代码和一个时间戳,与chrdevs事件相关联的任何数据必须通过轮询访问。

(4)、硬件环缓冲支持

现在很多传感器芯片上本身就包括 fifo / ring 缓冲,通过sensor自带 fifo / ring 缓冲,可以大大的减少主芯片处理器的负担。

(6)、触发和软件缓冲区(kfifo)支持

在许多数据分析中,触发和软件缓冲区(kfifo)支持就显得非常有用,能够更加高效的捕捉到外部信号数据。这些触发包括(数据准备信号、GPIO线连接到外部系统、处理器周期中断、用户空间访问sysfs中的特定文件等),都会产生触发。

7、iio子系统的内核接口

为各种sensor提供了内核接口

8、iio子系统环形缓冲区(如下图)

iio子系统采用环形缓冲区,环形缓冲区本质是一个数据结构(单一,固定大小,可调并首尾相连),这种结构非常适合缓冲数据流。这些缓冲区通常用来解决生产者消费者问题,在一些应用中,它被设计成生产者会(例如一个ADC)覆盖消费者(例如一个用户空间应用程序)无法暂时处理的过期数据。但是通常这种缓冲会被设置为适当的大小,以使这种情况不会发生。

linux iio子系统相关推荐

  1. 【转】 linux iio子系统

    原文网址:http://blog.csdn.net/tsy20100200/article/details/47101661 最近由于工作的需要,接触了Linux iio子系统,对于这个目录其实以前是 ...

  2. Linux的iio数据流程,linux iio子系统

    转自http://blog.csdn.net/tsy20100200/article/details/47101661 最近由于工作的需要,接触了Linux iio子系统,对于这个目录其实以前是很少接 ...

  3. LINUX IIO子系统分析之五IIO BUFFER子模块实现分析

    上一章我们介绍了iio子系统中的iio event模块,本章我们将介绍iio buffer模块,iio buffer主要用于连续数据采集与缓存功能.IIO buffer模块借助IIO DEVICE字符 ...

  4. 一文带你深入了解Linux IIO 子系统

    [推荐阅读] 一文剖析Linux内核中内存管理 分析linux启动内核源码 关于如何快速学好,学懂Linux内核.内含学习路线 工业场合里面也有大量的模拟量和数字量之间的转换,也就是我们常说的 ADC ...

  5. LINUX IIO子系统分析之二 IIO子系统相关数据结构分析

    上一章我们简要说明了IIO子系统的架构,本章我们通过数据结构的定义,分析IIO子系统的设计实现,本章的主要内容如下: 一.IIO子系统各数据结构说明 二.数据结构间的关联说明 一.IIO子系统各数据结 ...

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

    从本章开始,我们进行IIO子系统专栏的分析文档,本次IIO子系统专栏分析文档大概包含如下几章: 一. IIO子系统概述 二.IIO子系统相关数据结构分析 三.iio trigger 介绍 四.iio ...

  7. LINUX IIO子系统分析之七 虚拟iio device驱动实现

    前面几章我们基本完成了IIO子系统的所有内容,而该章即为本专栏的结束篇,主要用来实现一个虚拟的IIO DEVICE DRIVER,本章的内容主要包括如下几部分: 一. 虚拟IIO DEVICE的说明 ...

  8. LINUX IIO子系统分析之四 IIO EVENT介绍

    上一章我们介绍了iio子系统中的iio trigger模块,本章我们将介绍iio event模块,iio event主要用于阈值监测.自由落体监测等监测功能.因为IIO EVENT涉及IIO DEVI ...

  9. LINUX IIO子系统分析之六 iio device的驱动开发流程说明

    前面五章我们基本上把IIO 子系统的内部设计实现均作了说明,本章我们将说明iio device的驱动开发流程,本章的主要内容大致安排如下: 一.IIO子系统的关键技术点总结 二.IIO DEVICE的 ...

  10. linux IIO子系统使用说明

    新的内核将ADC/DAC/G_sensor这样的设备统一成IIO子系统,用户层通过访问IIO的接口来实现如ADC的触发.采样等操作. 下面给出IIO接口用户层的接口使用实例(以ADC的采样为例) 1. ...

最新文章

  1. 2.6内核中被废弃的pci_present()
  2. 如何面试java后端_近期面试Java后端的一些感悟
  3. 报错: eclipse加载maven工程提示pom.xml无法解析org.apache.maven.plugins:maven-resources-plugin:2.3.2...
  4. 区块链技术沙龙最全回顾:我们需要做怎样的区块链?
  5. ReactiveCocoa 更优雅的编程(信号探秘)
  6. 使用grep4j轻松测试分布式组件上的SLA
  7. ADB 基础命令使用
  8. java 设置不可点击_Java Selenium webdriverwait 解决元素不可点击问题
  9. android线程卡死,Android主线程为什么不因为Loop死循环卡死
  10. 飞书上点链接怎么指定跳转浏览器_东半球最接地气的短链接系统设计
  11. linux 内核块设备驱动,你了解Linux 块设备驱动?
  12. Agile Framework的专区上线
  13. Problems with Ribbon/Feign/Zuul retry
  14. java将date类型转成yyyymmdd_java中的Date怎么转换成YYYYMMDD形式的
  15. 如何批量将 Json 转为 Excel 格式
  16. 暴力推导 Beta 函数与 Gamma 函数关系式
  17. SVN迁移IP变更地址修改relocate
  18. 有一种神奇的性格叫——INTJ
  19. Unregistering application *** with eureka with status DOWN
  20. 企业微信社群运营必建的4个内容体系

热门文章

  1. 百度网盘限速解决方案
  2. 东莞:“风暴眼”中的世界工厂
  3. 人类记忆系统之谜,或许是这样一回事
  4. imu使用与卡尔曼融合定位
  5. 笔记本(无线网卡)配置虚拟机上网
  6. 虚拟机和主机快捷键切换
  7. 百度关键词地区排名查询php源码,百度关键词地区排名查询
  8. 爬取天眼查数据 附代码
  9. CATIA二次开发:工程图中文本的遍历和修改
  10. 大数据的七大核心具体价值