6

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

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

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

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

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

4

3 回答 3

6

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

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

module_param(test, bool, 0600);

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

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

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

于 2012-11-13T06:02:59.103 回答
2

参数是输入值而不是状态值。在参数的接收者启动后,您不能更改参数。

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

于 2012-11-07T08:26:22.633 回答
1

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

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

基本上,您需要一种机制来不断地轮询更改,或者您应该开发一种 IOCtl 方法并将您的设备注册为 char 设备,同时与您注册的其他设备同时注册(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

于 2015-11-11T16:22:19.830 回答