【问题标题】:userspace to kernel space and sysfs and how to use sysfs to change one reserved value in igmpv3 pkt用户空间到内核空间和 sysfs 以及如何使用 sysfs 更改 igmpv3 pkt 中的一个保留值
【发布时间】:2011-02-06 03:40:06
【问题描述】:

我之前已经发布过查询,我正在重复同样的问题主机发送的igmpv3包。

我想通过说这是一个从用户空间更改内核空间变量的更一般的问题来补充上述问题。

对于那只 ctuffli 的回复:

从用户态程序的角度来看,您应该将驱动程序视为具有定义明确的接口的“黑匣子”,而不是带有您想要更改的变量的代码。使用这种心智模型,您应该考虑通过四种方式(即接口)将控制信息传达给驱动程序:

  • 命令行选项。您可以将参数传递给在初始化期间可用的内核模块。
  • IOCTL。这是将控制信息传递给驱动程序的传统方式,但这种机制使用起来比 sysfs 稍微麻烦一些。
  • proc 进程信息伪文件系统。 proc 在 /proc 目录中创建用户登陆程序可以读取和有时写入的文件。过去,此接口也被用于与驱动程序进行通信。尽管 proc 看起来与 sysfs 相似,但较新的驱动程序 (Linux 2.6) 应该使用 sysfs 代替,因为 proc 的目的是报告进程的状态。
  • sysfs 是一个伪文件系统,用于导出有关驱动程序和设备的信息

根据您需要与驱动程序通信的时间(即初始化、运行时),您应该添加一个新的命令行选项或一个新的 sysfs 条目来更改驱动程序如何处理数据包中保留字段的值。

感谢 Ctuffli 的回答。我对 sysfs 没有任何了解。你能提供更多细节吗?我想将 igmpv3 pkt 的保留值之一更改为 0 或 1 或 2。这是我唯一需要更改的内容。能否请您提供有关此特定问题的更多详细信息?

【问题讨论】:

  • 您需要将此作为评论添加到该答案。顺便说一句,你为什么要使用多个登录 ID?
  • 抱歉,之前它使用的是我的 cookie,现在我是注册用户。这就是为什么有多个 id。
  • 你可以为这个设备创建char dev和file_ops,但是会有/proc fs,而不是sysfs。

标签: c linux operating-system linux-kernel linux-device-driver


【解决方案1】:

在这个SO answer中有sysfs(即/sys/...)接口的描述:

它具体描述了要添加到驱动程序中的内容,即:

static ssize_t mydrvr_version_show(struct device *dev,
        struct device_attribute *attr, char *buf)
{
    return sprintf(buf, "%s\n", DRIVER_RELEASE);
}

static DEVICE_ATTR(version, S_IRUGO, mydrvr_version_show, NULL);

在驱动程序设置期间:

device_create_file(dev, &dev_attr_version);

【讨论】:

    猜你喜欢
    • 2014-06-02
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多