三好先森|LINUX IIO子系统分析之六 IIO设备驱动开发流程说明
前面五章我们基本上把IIO 子系统的内部设计实现均作了说明 , 本章我们将说明iio device的驱动开发流程 , 本章的主要内容大致安排如下:
一、IIO子系统的关键技术点总结
二、IIO DEVICE的注册与注销接口说明
三、IIO DEVICE的驱动开发流程
一、IIO子系统的关键技术点总结以上几篇文章已经对IIO子系统的设计实现做了大致说明 , IIO子系统主要使用如下几个关键技术点实
现其主要功能:
- 借助sysfs、kobject机制 , 实现IIO DEVICE各类的设备属性 , 并借助于sysfs暴露给应用程序 。
- 实现iio event相关的设备属性 , 并将属性参数以sysfs文件的形式显示在IIO DEVICE的events子目录(/sys/bus/iio/devices/iio:deviceX/events) , 包括event的使能、event参数设置与读取文件等;
- 实现iio trigger设备及其属性 , 并将属性参数以sysfs文件的显示在trigger子目录(/sys/bus/iio/devices/triggerX) , 可查看trigger的名称;而iio device则可以通过文件/sys/bus/iio/devices/iio:deviceX/trigger查看或修改当前iio device绑定的trigger;
- 实现iio buffer相关的设备属性 , 用于进行iio buffer的使能与否、各channel 相关的数据采集缓存使能等 , 主要在目录/sys/bus/iio/devices/iio:deviceX/scan_elements、/sys/bus/iio/devices/iio:deviceX/buffer下;
- 实现iio device相关的raw 数据读取等设备属性(在目录/sys/bus/iio/devices/iio:deviceX/下) , 实现读取各channel的raw数据信息(可理解单次数据采集 , 其与iio buffer采集是互斥的 , 即一个channel若开启了iio buffer进行数据采集及缓存 , 则无法通过dir_type_raw文件获取该通道的raw data);
- 借助于字符设备文件机制 , 应用程序可获取到iio buffer缓存的采集数据以及iio device触发的iio event信息 , 这两个信息目前仅能通过字符设备文件进行获取;
- iio trigger内部通过实现虚拟的irq chip , 实现iio trigger与iio trigger consumer的1:N绑定 , 而不需要关注iio trigger consumer具体的数据类型等信息;
二、IIO DEVICE的注册与注销接口说明iio device注册接口为devm_iio_device_register、iio_device_register , 而devm_iio_device_register接口则实现了iio device的自动注销功能 , 因此iio device driver尽量使用该接口进行iio device的注册
iio_device_register实现的主要功能iio device register主要实现如下几个功能:
- 完成该iio device对应的字符设备文件的创建 , 字符设备文件的操作接口为iio_buffer_fileops;
- 完成iio buffer对象指针的创建及iio buffer相关的设备属性的创建(主要通过函数iio_buffer_alloc_sysfs_and_mask实现);
- 完成iio event interface的内存申请及初始化 , 并完成iio event相关的设备属性的创建(iio_device_register_eventset);
- 完成iio device相关的设备属性的创建(即是上面所说的raw data获取相关的属性文件 , 通过iio_device_add_channel_sysfs、iio_device_register_sysfs接口调用实现);
- 若iio device支持trigger-buffer、trigger-event , 则通过iio_device_register_trigger_consumer完成current_trigger属性的创建 , 以便进行iio device与trigger的绑定与解绑操作;
- 调用device_add完成iio device对应struct device类型变量的注册 , 因为上面所需创建的设备属性均是指struct device类型变量;
- 三好先森|技术与人类的关系到底是什么?
- 精英联盟总队|最详细的Linux简史——Linux大神带你领略它的前世今生
- 三好先森|「精选」20个黑科技软件下载网站,让你再无找不到的软件
- 阿狸先森|被联想198亿元收购的巨头摩托罗拉,现今如何了?
- 三好先森|基于JeecgBoot快速开发简历库系统,开源项目,实操分享
- 轻拔琴弦|给你一个反悔的机会
- 三好先森|「智能家居」小米碰碰贴2使用体验,米家有了新的玩法
- 三好先森|腾讯也扶不起的“阿斗”,十年败光1亿用户,刚刚正式叫停了
- 阿狸先森|小尾巴音质终结者:BEAM 2S解码耳放体验
- 三好先森|苹果公司投资建设两台世界上最大的风电机组,可为2万个家庭供电