我以前发布过查询,现在我重复同样的操作,我想修改内置在kernel2.6中的igmpv3(linux)。--这样它就可以从文件中读取一个值,并适当地决定由主机发送的igmpv3包中的reserved(res 1)值。
我想通过说这是一个从用户空间改变内核空间变量的更一般的问题来补充以上问题。
对于那个CTUFLI的回答:
从用户登录程序的角度来看,您应该将驱动程序视为具有定义良好的接口的“黑盒”,而不是包含要更改的变量的代码。使用这个心理模型,有四种方法(即接口)可以将控制信息传达给驱动程序,您应该考虑:
命令行选项。您可以将参数传递给在初始化期间可用的内核模块。
IOCTLS公司。这是将控制信息传递给驱动程序的传统方式,但是这种机制比sysfs使用起来要麻烦一些。
处理进程信息伪文件系统。proc在/proc目录中创建文件,用户登陆程序可以读取,有时也可以写入。在过去,这个接口也被用来与驱动程序通信。尽管proc看起来与sysfs类似,但较新的驱动程序(linux 2.6)应该使用sysfs,因为proc的目的是报告进程的状态。
sysfs是一个伪文件系统,用于导出有关驱动程序和设备的信息
根据需要与驱动程序通信的时间(即初始化、运行时),应添加新的命令行选项或新的sysfs条目,以更改驱动程序如何处理数据包中保留字段的值。
谢谢你的回答。我对sysfs一无所知。你能提供更多细节吗?我想将igmpv3 pkt的保留值之一更改为0、1或2。这是我唯一需要改变的。你能告诉我这个具体问题的详细情况吗?

最佳答案

在这个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);

09-08 01:47