三好先森|LINUX IIO子系统分析之六 IIO设备驱动开发流程说明( 二 )
三、IIO DEVICE的驱动开发流程【三好先森|LINUX IIO子系统分析之六 IIO设备驱动开发流程说明】 以上主要讲的是iio 子系统内部的实现 , 下面我们说下如何实现一个iio device driver , iio device driver的实现相对来说还是比较清晰明了的 。
- 针对iio device的每一个channel , 定义其支持设备属性参数( struct iio_chan_spec类型的变量) , 以便在iio_device_register时 , 完成各类设备属性的创建 , 下图是我实现的虚拟iio temp device的channel定义 , 若某一channel支持iio buffer , 则设置scan_index、scan_type信息;若支持iio event , 则需要实现event_spec变量( struct iio_event_spec类型的变量 , 定义event类型等 , 以便生成iio event设备属性)
- 定义iio device相关info的读写接口 , 主要是struct iio_info类型的变量 , 如下即为struct iio_info定义的实例 , 其中read_raw、write_raw用于raw data 的读写操作(单次数据采集);而read_event_config、write_event_config、read_event_value、write_event_value接口则主要用于event使能控制、event相关值的读写(如温度告警阈值设置等)
- 调用devm_iio_device_alloc接口 , 申请一个iio device的内存空间;
- 根据上述步骤1、2定义的变量 , 初始化该iio device;
- 若该设备支持iio trigger-buffer , 则调用iio_triggered_buffer_setup , 完成iio trigger-buffer的初始化操作;
- 若该iio device提供iio trigger , 则调用iio_trigger_register完成iio trigger的注册 , 并与iio device进行绑定;
- 若该iio device提供中断用于iio buffer的采集 , 则完成该中断的中断申请 , 并在中断处理函数中调用iio_trigger_poll , 由iio trigger模块调用iio buffer的处理接口 , 实现iio device 使能channel的采集操作 , 并存储在iio buffer中
- 调用devm_iio_device_register完成iio device的注册 。
- 三好先森|技术与人类的关系到底是什么?
- 精英联盟总队|最详细的Linux简史——Linux大神带你领略它的前世今生
- 三好先森|「精选」20个黑科技软件下载网站,让你再无找不到的软件
- 阿狸先森|被联想198亿元收购的巨头摩托罗拉,现今如何了?
- 三好先森|基于JeecgBoot快速开发简历库系统,开源项目,实操分享
- 轻拔琴弦|给你一个反悔的机会
- 三好先森|「智能家居」小米碰碰贴2使用体验,米家有了新的玩法
- 三好先森|腾讯也扶不起的“阿斗”,十年败光1亿用户,刚刚正式叫停了
- 阿狸先森|小尾巴音质终结者:BEAM 2S解码耳放体验
- 三好先森|苹果公司投资建设两台世界上最大的风电机组,可为2万个家庭供电