3
我已经成功地将设备属性添加到我的设备驱动程序,但在所有示例中,我发现该属性用于将数据注入到内核,而我的目标是从导出某些数据内核使其在用户空间中可见。从内核空间写入该文件的正确方法是什么?这样可以从用户空间检索数据?Sysfs导出设备属性
我已经成功地将设备属性添加到我的设备驱动程序,但在所有示例中,我发现该属性用于将数据注入到内核,而我的目标是从导出某些数据内核使其在用户空间中可见。从内核空间写入该文件的正确方法是什么?这样可以从用户空间检索数据?Sysfs导出设备属性
从内核中读取数据,只返回在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
。
谢谢!这绝对有效。如果我可以问你,假设用户空间中的进程需要连续“轮询”这些值,这是将数据发送到用户空间的最有效方式吗? – Vektor88
每当用户空间调用read()时,都会调用它。有关如何允许用户空间等待更改,请参阅答案的最后一句。 –
我认为'sysfs_notify'允许'poll/select'。另一种机制是“kobject_uevent”等。即,使用* netlink *和可能的* udev/mdev *脚本。 –