【问题标题】:Sysfs to export device attributessysfs 导出设备属性
【发布时间】:2013-05-22 19:28:35
【问题描述】:

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

【问题讨论】:

    标签: linux-kernel linux-device-driver kernel


    【解决方案1】:

    要从内核读取数据,只需在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

    【讨论】:

    • 谢谢!这绝对有效。如果我可以问你,假设用户空间中的进程需要对这些值进行连续“轮询”,这是向用户空间发送数据的最有效方式吗?
    • 每当用户空间调用read()时都会调用它。如何让用户空间等待变化,请看答案最后一句。
    • 我认为sysfs_notify 允许poll/select。另一种机制是kobject_uevent 等。即,使用 netlink 和可能的 udev/mdev 脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    相关资源
    最近更新 更多