2013-05-27 68 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 *腳本。 –