【问题标题】:kernel module parameters changes (using /sys/module)内核模块参数更改(使用 /sys/module)
【发布时间】:2023-03-04 00:17:01
【问题描述】:

我对 linux 中的 /sys/module/ 有一些疑问

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

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

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

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

【问题讨论】:

  • 参数是输入值而不是状态值。参数接收者启动后,您无法更改参数。
  • @ceving 所以 /sys/module/xxx/parameters 文件夹中的所有参数都只是 ibput 参数?所以它们不能在运行时被模块修改?那些参数中没有状态参数?
  • 如果你想在运行时改变内核的行为你必须使用 /proc/sys.见这里:tournasdimitrios1.wordpress.com/2011/02/07/…
  • 良好的链接。谢谢。如果内核更改了参数,内核是否会向用户空间发送信号?这很有用,因为它将允许内核实时检测参数的变化

标签: c linux linux-kernel kernel-module


【解决方案1】:

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

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

module_param(test, bool, 0600);

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 那么.. 以下是如何工作的:writing (0/N/n=disable) to /sys/module/printk/parameters/time 将停止提供时间戳,如下所示 -> [1915.150953]。然后writing 1/Y/y=enable 将启用它。所有这些都在运行时。怎么样??
    • kernel.org/doc/Documentation/ABI/stable/sysfs-module 提到 /sys/module/MODULENAME/parameters/ 包含“能够在运行时更改的模块参数”,这表明并非每个参数都必须在其中,并且存在模块可以如果它想知道参数的变化,就会被告知......
    【解决方案3】:

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

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

    【讨论】:

    猜你喜欢
    • 2013-08-10
    • 2016-07-13
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2017-03-14
    • 2020-09-12
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多