我有一些关于/sys/module/
in linux的问题
是否
/sys/module
包含内核的所有模块是否
/sys/module/xxx/parameters
包含内核模块xxxx的所有参数是否
/sys/module/xxx/parameters/yyyy
包含内核模块 xxxx 的参数 yyyy 的实时值如果在给定的内核模块中更改了参数,如何在实时中检测到这种更改?我想开发一个 C 应用程序(用户空间)或一个 shell 脚本来实时检测给定内核模块参数的变化。
我有一些关于/sys/module/
in linux的问题
是否/sys/module
包含内核的所有模块
是否/sys/module/xxx/parameters
包含内核模块xxxx的所有参数
是否/sys/module/xxx/parameters/yyyy
包含内核模块 xxxx 的参数 yyyy 的实时值
如果在给定的内核模块中更改了参数,如何在实时中检测到这种更改?我想开发一个 C 应用程序(用户空间)或一个 shell 脚本来实时检测给定内核模块参数的变化。
1) 是的,/sys/module 确实拥有所有模块。
2)不,/sys/module/xxx/parameters只有模块要导出的参数,也就是说如果你想从你的模块中导出一些内核模块参数,你应该使用:
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 方法并将您的设备注册为 char 设备,同时与您注册的其他设备同时注册(Linux 在这方面是精神病)。
Bryan Wilcutt “如果你不珍惜自己的时间,Linux 就是免费的。” -- 未知