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 *腳本。 –