我,
我以前发布过查询,现在我重复同样的操作,我想修改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。