空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现( 二 )


空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现该虚拟温度传感器的iio device相关的参数设置如下所示
空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现另外针对虚拟中断控制器、虚拟iic device已经在其他专栏中说明 , 此处直接调用不再细说 。
四、虚拟IIO DEVICE DRIVER的测试验证本驱动已经在ubuntu16.04上测试验证 , 由于ubuntu16.04内核默认没有将iio 子系统 编译进内核 , 但是已编译成驱动模块 , 可以在路径/lib/modules/4.4.0-66-generic/kernel/drivers/iio下找到对应的驱动模块 , 我们需要这些驱动模块: industrialio.ko、industrialio-triggered-event.ko、kfifo_buf.ko、industrialio-triggered-buffer.ko即可 , 先将这些驱动insmod 系统中;
然后按照本次虚拟驱动主要涉及如下内容:
insmod virt_i2c_controller.ko
insmod virt0808_dev.ko
insmod virt0808_irq.ko
insmod virt0824_temp_driver.ko
测试温度告警阈值主要测试iio event功能 , 我们的虚拟程序中已经实现了iio event的应用测试程序 。

  • 首先运行该测试程序;
  • 修改虚拟温度传感器的两个通道的当前温度、通道0的温度过高告警阈值、并设置温度0过高温度告警fault bit为1 , 执行的命令如下:

空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现
  • 寄存器值修改好后 , 我们手动触发一个温度过高告警中断 , 执行命令如下

空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现
  • 查看测试程序已经收到iio event事件 , 如下图所示

空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现测试连续数据采集(iio buffer功能)
  • 首先使能通道0的温度采集功能 , 设置iio buffer的缓存为16 , watermark为1

空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现
  • 开始监控/dev/iio:device,进行数据采集 , 命令如下
cat /dev/iio:device0 |xxd -c 2
  • 触发数据可读中断 , 如下图所示

空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现
  • 查看读取的数据 , 如下图所示 , 可正常进行数据采集

空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现测试单次数据采集执行如下命令即可对两个通道当前的数据进行温度采集工作 。
空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现【空枝|LINUX IIO子系统分析之七 虚拟iio设备驱动实现】 至此完成了IIO子系统专栏的分析 , 即完成了IIO子系统内部的设计说明 , 也完成了一个虚拟的IIO DEVICE DIRVER , 希望对大家有所帮助 。