【问题标题】:How to access an IIO device driver in linux如何在 linux 中访问 IIO 设备驱动程序
【发布时间】:2018-06-22 09:33:12
【问题描述】:

我是 Linux 设备驱动程序的菜鸟。

我有一个 IIO 驱动程序(用于 OPT3001 环境光传感器),通过 I2C 总线运行,已在内核中成功编译(版本 3.18)。修改设备树以匹配驱动程序中存在的兼容字段。

问题是如何访问此驱动程序以获取用户空间中的一些数据?

驱动程序在结构中注册了一些用于读取和写入的回调。我应该直接在我的 C 文件中调用它们吗?

【问题讨论】:

  • 有一个库libiio,其中一些工具已经在用户空间中可用。除此之外,您还可以通过 IIO 类 IIRC /sys/class/iio 设备上的 sysfs 接口进行通信。内核文档中提供了更多信息。
  • 您可能还想看看Industrial I/O Utils 项目。

标签: linux linux-device-driver


【解决方案1】:

你有不同的可能性:

  • 您的驱动程序提供了一个 /dev 节点,您可以在 C 文件中打开。
  • 您的驱动程序通过 sysfs 提供信息。

如果是 /dev 节点,您可以访问文件操作(打开、读取、写入、ioctl)。您只需打开文件 1 次,每次 read() 调用都会从传感器读取值。

如果是 sysfs,您应该在 /sys/class/...中找到要打开/读取的文件...

【讨论】:

  • 结构中注册了多种功能。我如何确定,当我尝试读取 /dev 节点时,会调用哪一个?
  • 这里是关于 file_operations 的文档。 tldp.org/LDP/lkmpg/2.4/html/c577.htm 如果你的驱动使用它,结构已经定义,函数需要有明确的名称(xxx_open,xxx_read等)你可以用'cat'做一个快速测试:cat /dev/xxx
【解决方案2】:

您可以使用以下提供的用户空间 API:

#include <linux/i2c-dev.h>

使用它,您可以打开总线 /dev/i2c-X (X=0,1,2,...),使用 ioctl 调用设置设备地址,并使用读写操作进行读写操作公共汽车。

此外,您还可以安装“i2c-tools”软件包(apt-get install i2c-tools),安装 i2cset、i2cget 和 i2cdetect 等用户空间工具,这对于测试 I2C 总线及其连接的设备非常有用。

【讨论】:

  • 访问已经有驱动的设备是错误的方式。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多