内核模块参数更改(使用/ sys / module)

时间:2012-06-14 10:52:53

标签: c linux linux-kernel kernel-module

我对linux中的/sys/module/

有一些疑问
  1. /sys/module是否包含内核的所有模块

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

module_param(test, bool, 0600);

其中最后一个参数为非零,表示文件的权限" / sys / module / xxx / parameters / test"。

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

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

答案 1 :(得分:0)

"最后(和这一点很重要),如果您选择定义可写参数并且在加载模块时确实写入它们,则不会通知您的模块值已更改。也就是说,修改后的参数没有回调或通知机制;当代码保持运行时,值将在模块中悄然发生变化,忽略了该变量中有新值的事实。

如果您确实需要对模块的写访问权以及某种通知机制,您可能不想使用参数。有更好的方法来获得这种功能。" [1]

基本上,您需要一种机制来不断轮询更改,或者您应该开发一种IOCtl方法并将您的设备注册为char设备,同时注册其他任何内容(Linux在这方面是精神病的) )。

布莱恩威尔克特      "如果你不重视自己的时间,Linux是免费的。" - 未知

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