linux内核驱动:IIO子系统总结

前言

本笔记基于linux5.10.xx内核,dht11温湿度传感器总结对IIO驱动子系统的使用,基于运行linux内核的arm系列处理器soc;

一、概念

IIO为industrial I/O的简称,为一些传感器的数据采集提供了一套方便的软件框架,作为内核驱动子系统可以和温度、湿度、压力、加速度等传感器的驱动相结合,为相应数据获取提供方便的访问方式;

二、系统拓扑结构

在这里插入图片描述

通过将传感器抽象为iio设备后,最终会将其注册为一个字符设备;
芯片和传感器之间的接口可以是多种形式,如i2c、spi、adc、本例中的dht11单总线等;
通过iio可以将传感器的物理数据建立一个数据模型,iio将其定义通道,如dht11可以采集温度和湿度则定义了温度和湿度通道,其它传感器同理;

三、IIO子系统文件

industrialio-core.c

iio子系统的核心层;
iio总线的注册接口;
提供iio_dev结构的分配、、成员初始化、注册接口;
提供iio对应的字符设备的file_operation接口;
提供iio设备属性操作接口;

industrialio-event.c

提供iio设备event事件方式获取数据的接口;
主要操作的是struct iio_dev_opaque结构的event_interface成员和其子成员;

industrialio-buffer.c

提供iio设备数据buffer的功能接口;
对struct iio_buffer结构的操作封装;
iio设备可以选择不使用buffer功能,具体考虑应用场景;

buffer/kfifo_buf.c

提供struct iio_buffer结构的分配结构;
提供struct iio_buffer结构的access成员操作函数集;
将struct iio_buffer作为struct iio_kfifo结构的成员进行操作;

buffer/industrialio-buffer-cb.c

对struct iio_cb_buffer结构的操作封装;

inkern.c

对struct iio_channel结构的操作封装;

industrialio-sw-trigger.c
industrialio-triggered-event.c
buffer/industrialio-triggered-buffer.c

trigger相关模式需要的驱动iio子系统的文件,具体的驱动也要实现相关机制;

四、主要数据结构

struct iio_dev_opaque

定义于include/linux/iio/iio-opaque.h
通过此结构的定义来定义iio_dev;
成员iio_event_interface封装用户层阻塞访问设备时的等待队列头;
buffer_list定义数据buffer的列表;

struct iio_dev_opaque {
   
	struct iio_dev			indio_dev;
	struct iio_event_interface	*event_interface;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值