tmp102传感器驱动程序的用户空间应用程序

时间:2016-05-29 08:06:24

标签: linux linux-device-driver i2c

我的thermo3 clicktmp102 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的工作方式?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

用户级应用程序无法与硬件交互。他们可以通过系统调用(ioctl,open,read和write等)和Sysfs(sysfs是一个虚拟文件系统)进行通信。

1: - 您的设备是hwmom设备。你的驱动程序是“tmp102”。驱动程序为用户级应用程序公开这三个 temp1_input temp1_max_hyst temp1_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在运行时创建的实际设备文件。设备文件是设备驱动程序的接口,它出现在文件系统中,就像它是普通文件一样。您的驱动程序已公开其他一些设备文件。 thermal_zone_of_sensor_register(hwmon_dev,0,hwmon_dev,& tmp102_of_thermal_ops)。你有/ dev / hwmom_dev节点。

用户级应用程序无法直接与任何i2c设备或硬件进行通信。 Linux内核有局限性。应用程序需要驱动程序作为控制任何设备的接口。