内核模块参数的变化(使用/ sys / module)

我有一些关于/ sys / module / in linux的问题

1)/ sys /模块是否包含内核的所有模块

2)/ sys / module / xxx /参数是否包含内核模块xxxx的所有参数

3)/ sys / module / xxx / parameters / yyyy是否包含内核模块xxxx的参数yyyy的实时值

4)如果在给定的内核模块中改变参数,如何在RealTime中检测到这个改变? 我想开发一个C应用程序(用户空间)或一个shell脚本来实时检测给定的内核模块参数的变化。

1)是的,/ sys / module确实拥有所有的模块。

2)不,/ sys / module / xxx /参数只有模块想要导出的参数,也就是说,如果你想从你的模块导出一些内核模块参数,你应该使用:

module_param(test, bool, 0600); 

最后一个参数是非零的,这意味着文件“/ sys / module / xxx / parameters / test”的权限。

3)不,内核模块参数的值几乎是静态的,很少被其他地方改变。

4)您的内核模块应通知用户空间应用程序。

参数是输入值而不是状态值。 参数收件人启动后,您无法更改参数。

如果要在运行时更改内核的行为,则必须使用/ proc / sys。 看到这里: http : //tournasdimitrios1.wordpress.com/2011/02/07/passing-parameters-to-the-kernel-at-run-time-time-on-linux/

“最后(这是一种很重要的),如果你选择定义可写入的参数,并且在你的模块被加载的时候确实写入了它们,你的模块就不会被通知这个值已经改变了,也就是说,没有回调或者通知修改参数的机制;当你的代码保持运行时,这个值将在你的模块中悄悄地改变,忽略了这个变量中有一个新的值。

如果你确实需要写入你的模块和某种通知机制,你可能不想使用参数。 有更好的方法来获得这个功能。“[1]

基本上,你需要一个机制来不断地调查变化,或者你应该只是开发一个IOCtl方法,并把你的设备注册为一个字符设备,同时注册它(Linux在这方面是精神病)。

Bryan Wilcutt“如果你不重视自己的时间,Linux是免费的。” – 未知

[1] https://www.linux.com/learn/linux-training/28065-the-kernel-newbie-corner-everything-you-wanted-to-know-about-module-parameters