linux iio子系统

article/2025/9/25 7:11:01

//============================================================================\\
||               统: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目录结构架构:

iio
├── accel			
├── adc				
├── addac			
├── cdc				
├── dac			
├── dds
├── Documentation
│   └── dac
├── gyro
├── impedance-analyzer
├── imu
│   └── mpu
│       └── inv_test
├── light
├── magnetometer
├── meter
├── pressure
├── resolver
└── 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)覆盖消费者(例如一个用户空间应用程序)无法暂时处理的过期数据。但是通常这种缓冲会被设置为适当的大小,以使这种情况不会发生。


更多详细的说明可以参照:WIKI 中的说明





http://chatgpt.dhexx.cn/article/IQyHQKQg.shtml

相关文章

RK3399平台开发系列讲解(IIO子系统)4.38、什么是IIO(Industrial I/O)

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 一、什么是IIO?沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍什么是IIO 一、什么是IIO? 工业I/O (Industrial I/O,IIO)是专用于模数转换器 (ADC)和数模转换器(DAC)的内…

iio驱动

1.简介 由于客户提供的板子有一个ti081c的adc芯片所有在这里简单学习一下;   工业I / O(IIO)是专用于模数转换器(ADC)和数模转换器(DAC)的内核子系统。随着越来越多的具有不同代码实现的传感…

iio子系统框架分析

学习目的 iio子系统主要提供对ADC、DAC相关的设备驱动框架。面向的设备包括: 1.ADC芯片;2.DAC芯片;3.温度传感器;4.光感器;5.陀螺仪;6.加速度传感器;7.CDCs;​8.IMUs;9…

Linux设备驱动之IIO子系统——IIO框架及IIO数据结构

由于需要对ADC进行驱动设计,因此学习了一下Linux驱动的IIO子系统。本文翻译自《Linux Device Drivers Development 》--John Madieu,本人水平有限,若有错误请大家指出。 IIO Framework 工业I / O(IIO)是专用于模数转换器(ADC)和数模转换器(DAC)的内核子系统。随着越来…

Linux IIO 子系统简介

IIO 子系统系统框架 而在IIO子系统内部,则主要包括如下四部分的内容: iio buffer用于处理需要进行连续采集的数据,当一个IIO device的各通道数据支持连续采集时,则调用iio buffer模块提供的接口,创建iio buffer用于存…

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

上一章我们介绍了iio子系统中的iio event模块,本章我们将介绍iio buffer模块,iio buffer主要用于连续数据采集与缓存功能。IIO buffer模块借助IIO DEVICE字符设备文件与应用程序通信,同时借助iio trigger模块与iio device进行交互&#xff0c…

kudu教程(一)——简介

##kudu教程(一)——简介 学习kudu先从kudu官网开始,进入主页https://kudu.apache.org/ 我们看到的第一句话就是 A new addition to the open source Apache Hadoop ecosystem, Apache Kudu completes Hadoop’s storage layer to enable fas…

kudu介绍:为什么要使用?

前言 近两年,KUDU 在大数据平台的应用越来越广泛。在阿里、小米、网易等公司的大数据架构中,KUDU 都有着不可替代的地位。本文通过分析 KUDU 的设计, 试图解释为什么 KUDU 会被广泛应用于大数据领域,因为还没有研究过 KUDU 的代码…

Kudu 的架构概述

Kudu 的架构概述 目录 Kudu 的架构概述 体系结构概述 Kudu 的特点 Kudu 的概念和术语 体系结构概述 下图显示了一个Kudu集群,其中有三个主机和多个 tablet servers,每个tablet server 都服务于多个tablet Kudu 的特点 特点一:主从架构…

Outline Of Sodoku

第一步:确定所需要实现的目标 1.数独程序的界面: 1.1初始界面边框 1.1.1边框上的Sodoku标题 1.2初始界面背景图片 1.3初始界面开始键 1.4初始界面难度设置 \\数独界面始终为99的矩阵,可以通过改变初始给定格数来改变难度 1.5响应键盘和鼠标指…

Apache Kudu架构

目录 1. Kudu架构 1. Kudu架构 下图显示了一个具有三个master和多个tablet server的Kudu集群 Kudu采用Raft一致性算法,当写入一条数据,被至少一半replica保存,就可以让客户端访问该条数据。但所有的replica的数据会最终一致 Table&#xff…

kudu的相关介绍

目录 前言 背景 概览 数据模型 核心 API 一致性模型 架构 整体架构 数据分区策略 存储 存储设计目标 存储方式 存储实现 读写过程 应用案例 前言 近两年,KUDU 在大数据平台的应用越来越广泛。在阿里、小米、网易等公司的大数据架构中,KUD…

大数据入门-什么是Kudu

目录 一、概念 二、架构 1.Master Server 2.Tablet Server 3.Table 4.Tablet 三、特性 1.重要性 2.易用性 3.优势 4.与传统关系型数据库比较 5.与其他大数据组件比较 四、常用语句 1.建表 1.建普通表 2.建分区表 2.删除表 3.查询数据 4.添加数据 5.更新数据…

Kudu初入门

目录 介绍: 基础架构: 关于Tablet: Kudu与Impala集成 安装Kudu 配置Impala支持Kudu: 使用案例: 创建表: 查询Impala中现有的Kudu表 使用CREATE TABLE AS SELECT语句查询Impala中的任何其他表或来…

kudu-- 分布式数据库

一、前言 近两年,KUDU 在大数据平台的应用越来越广泛。在阿里、小米、网易等公司的大数据架构中,KUDU 都有着不可替代的地位。本文通过分析 KUDU 的设计, 试图解释为什么 KUDU 会被广泛应用于大数据领域,因为还没有研究过 KUDU 的…

Apache Kudu的介绍

一、Apache Kudu的介绍 1.1、背景介绍 在kudu之前,大数据主要以两种方式存储; (1)静态数据 : 以HDFS引擎作为存储,适用于高吞吐量的离线大数据分析场景。 这类存储的局限性是数据无法进行随机读写。 &…

kudu compaction操作

与hbase相同,kudu也需要定期进行compaction操作。kudu中的compaction操作有两种,一是合并delta文件。二是将一个tablet中的多个diskRowset进行重排。下面分别对这两者进行介绍。 之前在kudu的update操作中讲到,update操作的数据会先写入delt…

Apache Kudo: 1.0版和未来 [session]

Strata Data Conference北京站大会还有一个月即将召开, 有需求的同学还请抓紧时间, 点击二维码即可登录会议官网报名。 Apache Kudo: 1.0版和未来 讲师:Hao Hao (Cloudera) 14:50–15:30 Friday, 2017-07-14 数据工程和架构 (Data engin…

kudu架构

课程链接: http://edu.51cto.com/course/15174.html 特点: High availability(高可用性)。Tablet server 和 Master 使用 Raft Consensus Algorithm 来保证节点的高可用,确保只要有一半以上的副本可用,该 …

Apache Kudu

前言    在Kudu出现前,由于传统存储系统的局限性,对于数据的快速输入和分析还没有一个完美的解决方案,要么以缓慢的数据输入为代价实现快速分析,要么以缓慢的分析为代价实现数据快速输入。随着快速输入和分析场景越来越多&…