【问题标题】:user-space application for tmp102 sensor drivertmp102 传感器驱动程序的用户空间应用程序
【发布时间】:2016-05-29 08:06:23
【问题描述】:

我有一个thermo3 click,其中有tmp102 sensor

为了从中读取数据,我使用 I2C 编写了一个用户空间应用程序,如下所示:

fd = open("/dev/i2c-0", O_RDWR))
ioctl(fd, I2C_SLAVE, 0x48)
read(fd, &buf, 2)

但后来我在linux source code找到了它的驱动程序。

所以我想知道:

1) 我可以编写一个使用此驱动程序 API 的用户空间应用程序(即使用驱动程序的设备文件)吗?

2) I2C 用户空间应用程序如何在不使用此驱动程序的情况下工作(因为当我使用 i2c 用户空间应用程序时,我的内核中未启用此驱动程序)或者这就是 I2C 的工作方式?

【问题讨论】:

    标签: linux linux-device-driver i2c


    【解决方案1】:

    1) 这是一个 hwmon 设备,您没有要使用的设备文件。相反,api 位于/sys/class/hwmon。特别是,您想阅读/sys/class/hwmon/hwmonX/tempX_input 文件

    2) 通过使用/dev/i2c-0,您可以直接在 i2c 总线上进行通信,从而有效地绕过任何内核驱动程序。然后,您必须知道您使用的任何设备的详细信息(要读取的寄存器及其含义...),而不是使用通用的 Linux 内核抽象。

    【讨论】:

    • 表示从 /sys/class/hwmon/hwmonX/tempX_input 读取数据比通过 i2c 总线读取数据更理想
    • 我在内核中启用了设备驱动程序 -> 硬件监控支持 -> tmp102,但我看不到在 /sys/class/hwmon 下创建的任何文件。但是这里创建了一些文件 /sys/bus/i2c/drivers/tmp102
    • 也许你没有启用你需要的一切。不要忘记 udev 它提供了一种基于事件加载驱动程序的机制,尽管我认为并非总是如此(一些旧的,即非 ACPI、非 DT 平台可以从内置代码加载它,或手动)。
    • i2c 总线是不可发现的,您需要明确地将 tmp102 添加到您的平台。这取决于架构,您没有提供该信息。
    【解决方案2】:

    用户级应用程序不能与硬件交互。它们可以通过系统调用(ioctl、open、读写等)和Sysfs(sysfs是一个虚拟文件系统)进行通信。

    1 :- 您的设备是 hwmom 设备。您的驱动程序是“tmp102”。驱动程序为用户级应用程序公开这三个 temp1_inputtemp1_max_hysttemp1_max sysfs 条目。

     SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tmp102_show_temp, NULL , 0);
     SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IWUSR | S_IRUGO, tmp102_show_temp,  tmp102_set_temp, 1);
     SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, tmp102_show_temp,
              tmp102_set_temp, 2);
    

    您可以读取 /sys/class/hwmom/tmp102/temp1_input sysfs 文件。 你可以读写这两个sysfs文件/sys/class/hwmom/tmp102/temp1_max_hyst和sys/class/hwmom/tmp102/temp1_max。

    2 :- /dev 中的文件是 UDEV 在运行时创建的实际设备文件。设备文件是出现在文件系统中的设备驱动程序的接口,就好像它是一个普通文件一样。您的驱动程序公开了一些其他设备文件。 thermo_zone_of_sensor_register(hwmon_dev, 0,hwmon_dev, &tmp102_of_thermal_ops)。你有 /dev/hwmom_dev 节点。

    用户级应用程序不能直接与任何 i2c 设备或硬件通信。 Linux内核有限制。应用程序需要驱动程序作为接口来控制任何设备。

    【讨论】:

      猜你喜欢
      • 2018-04-18
      • 2013-02-23
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多