【问题标题】:Reading IIO device data from User Space从用户空间读取 IIO 设备数据
【发布时间】:2016-04-22 10:52:40
【问题描述】:

我正在使用 MPU-9250 Invensense 传感器,并从 android 内核获取其驱动程序并与 linux 内核集成。驱动程序工作正常,对内核和节点进行了一些修改,/dev/iio:\device0,并且还生成了 sys 文件系统下的文件。所以我假设驱动程序工作正常。

现在我想通过使用 /dev/iio:\device0 节点的应用程序从用户空间读取传感器数据。为此,我需要在 MPU-9250 驱动程序中打开读取关闭功能。但是驱动中没有文件操作可用。

我尝试从 sys 文件系统读取数据,即,

# echo 1 > /sys/bus/iio/devices/iio:device0/power_state
# echo 1 > /sys/bus/iio/devices/iio:device0/accel_enable
# echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length
# echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable

之后,它应该填充从传感器读取的数据。但是什么都没有显示。所以在此之后我尝试从开发文件系统中读取数据

# cat /dev/iio:\device0

即便如此,也没有显示任何内容。

请有人告诉我如何读取数据。

问候

【问题讨论】:

  • 嗨@Vamsee,你解决了吗?
  • 是的@Tom。我已经解决了这个
  • 那么,你是怎么解决的?
  • 而不是 '# cat /dev/iio:\device0' 使用 'cat /dev/iio\:device0 | xxd' (stackoverflow.com/a/43369725/5350353)

标签: linux iio


【解决方案1】:

我认为您的问题与您没有启用任何扫描元素这一事实有关。

扫描位于: /sys/bus/iio/devices/iio:device[x]/scan_elements.

您应该在此处启用要捕获的扫描元素。 yo 应该有 3 个后缀为 _en 、 _index 和 _type 的文件。

_type 是指扫描的类型,index 是在设备读取中为扫描分配的通道,_en 是“启用”状态。只需将“1”写入您希望启用的扫描_en文件,写入/buffer/length 100和/buffer/enable“1”即可开始获取数据。

我认为这不是您的问题,因为您可能根本无法启用缓冲区,但是您可能需要启用也应该位于 /sys/bus/iio/devices 中的触发器。您应该在此处有 trigger1/2/3 目录,具体取决于您拥有的 IIO 设备的数量。您可能需要将触发器名称写入 /sys/bus/iio/devices/iio:device[x]/trigger/current_trigger。

所以你应该这样做:

echo /sys/bus/iio/devices/trigger[x]/name > 
/sys/bus/iio/devices/iio:device[x]/trigger/current_trigger

希望对你有帮助。

【讨论】:

  • 写入缓冲区/长度不起作用。这个 'echo 1 > enable' 产生 '-sh: echo: write error: Invalid argument'。
  • @BЈовић,检查是否设置了触发器名称:'cat path/trigger/current_trigger'。
  • 正确的命令是:'cat /sys/bus/iio/devices/trigger[x]/name > /sys/bus/iio/devices/iio:device[x]/trigger/current_trigger '。
猜你喜欢
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2013-08-21
  • 2016-12-07
相关资源
最近更新 更多