Linux kernel 要导出设备属性的Sysfs

Linux kernel 要导出设备属性的Sysfs,linux-kernel,linux-device-driver,kernel,Linux Kernel,Linux Device Driver,Kernel,我已经成功地将一个设备属性添加到我的设备驱动程序中,但是在我发现的所有示例中,该属性用于向内核注入数据,而我的目标是从内核导出一些数据,使其在用户空间中可见。从内核空间写入该文件的正确方法是什么?这样就可以从用户空间检索数据了?要从内核读取数据,只需在show处理程序中返回数据: static ssize\u t show\u myvalue(结构设备*dev、, 结构设备(属性*attr,字符*buf) { struct my_device*mydev=…dev。。。; 返回sprintf(b

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

要从内核读取数据,只需在
show
处理程序中返回数据:

static ssize\u t show\u myvalue(结构设备*dev、,
结构设备(属性*attr,字符*buf)
{
struct my_device*mydev=…dev。。。;
返回sprintf(buf,“%d\n”,mydev->myvalue);
}
静态设备属性(myvalue,S\u IRUGO,show\u myvalue,NULL);

如果必须通知用户空间更改,请使用
sysfs\u notify

谢谢!这确实奏效了。如果我可以问你,假设userspace中的进程需要对这些值进行连续的“轮询”,那么这是向userspace发送数据的最有效的方法吗?每当userspace调用
read()
时,就会调用它。关于如何允许用户空间等待更改,请参阅答案的最后一句。我认为
sysfs\u notify
允许
poll/select
。另一种机制是
kobject\u uevent
等。也就是说,使用netlink和可能的udev/mdev脚本。