2013-05-27 34 views
3

我已经成功地将设备属性添加到我的设备驱动程序,但在所有示例中,我发现该属性用于将数据注入到内核,而我的目标是从导出某些数据内核使其在用户空间中可见。从内核空间写入该文件的正确方法是什么?这样可以从用户空间检索数据?Sysfs导出设备属性

回答

2

从内核中读取数据,只返回在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

+0

谢谢!这绝对有效。如果我可以问你,假设用户空间中的进程需要连续“轮询”这些值,这是将数据发送到用户空间的最有效方式吗? – Vektor88

+0

每当用户空间调用read()时,都会调用它。有关如何允许用户空间等待更改,请参阅答案的最后一句。 –

+1

我认为'sysfs_notify'允许'poll/select'。另一种机制是“kobject_uevent”等。即,使用* netlink *和可能的* udev/mdev *脚本。 –