【发布时间】:2013-05-22 19:28:35
【问题描述】:
我已经成功地将设备属性添加到我的设备驱动程序中,但在我发现的所有示例中,该属性都用于向内核注入数据,而我的目标是从内核中导出一些数据以使其可见在用户空间。从内核空间写入该文件的正确方法是什么?这样就可以从用户空间检索数据?
【问题讨论】:
标签: linux-kernel linux-device-driver kernel
我已经成功地将设备属性添加到我的设备驱动程序中,但在我发现的所有示例中,该属性都用于向内核注入数据,而我的目标是从内核中导出一些数据以使其可见在用户空间。从内核空间写入该文件的正确方法是什么?这样就可以从用户空间检索数据?
【问题讨论】:
标签: linux-kernel linux-device-driver kernel
要从内核读取数据,只需在show 处理程序中返回即可:
static ssize_t show_myvalue(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct my_device *mydev = ...dev...;
return sprintf(buf, "%d\n", mydev->myvalue);
}
static DEVICE_ATTR(myvalue, S_IRUGO, show_myvalue, NULL);
如果您必须通知用户空间更改,请使用sysfs_notify。
【讨论】:
read()时都会调用它。如何让用户空间等待变化,请看答案最后一句。
sysfs_notify 允许poll/select。另一种机制是kobject_uevent 等。即,使用 netlink 和可能的 udev/mdev 脚本。