我,
我以前发布过查询,现在我重复同样的操作,我想修改igmpv3(Linux)
它内置在kernel2.6中。--这样它从文件中读取一个值并适当地决定由主机发送的igmpv3 paket中的保留(res 1)值。
我想在上面的问题上再加上一点,我想说的是,这是一个更通用的改变变量的问题
来自用户空间的内核空间。
提前谢谢你的帮助。
当做,
巴文

最佳答案

从用户登录程序的角度来看,您应该将驱动程序视为具有定义良好的接口的“黑盒”,而不是包含要更改的变量的代码。使用这个心理模型,有四种方法(即接口)可以将控制信息传达给驱动程序,您应该考虑:
命令行选项。您可以将参数传递给在初始化期间可用的内核模块。
IOCTLs公司。这是将控制信息传递给驱动程序的传统方式,但使用此机制比sysfs要麻烦一些。
proc进程信息伪文件系统。proc/proc目录中创建文件,用户登录程序可以读取文件,有时也可以写入文件。在过去,这个接口也被用来与驱动程序通信。虽然proc看起来类似于sysfs,但是较新的驱动程序(Linux 2.6)应该使用sysfs,因为proc的目的是报告进程的状态。
sysfs是一个伪文件系统,用于导出有关驱动程序和设备的信息。有关更多详细信息和代码示例,请参阅内核(Documentation/filesystems/sysfs.txt)中的文档。对于您的特殊情况,请注意“存储”方法。
根据需要与驱动程序通信的时间(即初始化、运行时),应添加新的命令行选项或新的sysfs条目,以更改驱动程序如何处理数据包中保留字段的值。
对于filp_open,函数的注释是

/**
 * This is the helper to open a file from kernelspace if you really
 * have to.  But in generally you should not do this, so please move
 * along, nothing to see here..
 */

意思是有比这更好的方法来做你想做的事。有关驱动程序通常不应打开文件的原因的更多信息,请参见this SO question

10-06 14:27