7

I have some questions concerning the /sys/module/ in linux

  1. Does the /sys/module contain all modules of kernel

  2. Does the /sys/module/xxx/parameters contains all parameters of the kernel module xxxx

  3. Does the /sys/module/xxx/parameters/yyyy contain realtime values of the parameter yyyy of the kernel module xxxx

  4. if a parameter is changed in a giving kernel module, how to detect this change in RealTime? I want to develop a C application (user space) or a shell script which detect the change of a giving kernel module parameter in real time.

Evan Carroll
  • 78,363
  • 46
  • 261
  • 468
MOHAMED
  • 41,599
  • 58
  • 163
  • 268
  • Parameters are input values and not state values. You can not change a parameter after the recipient of the parameter has started. – ceving Jun 14 '12 at 15:42
  • @ceving so all parameters in the /sys/module/xxx/parameters folder are only ibput parameters ? So they could not be modified by the module in the running time ? there is no state parameters in thoses parameters? – MOHAMED Jun 14 '12 at 16:24
  • 1
    If you want to change the behavior of the kernel at run time you have to use /proc/sys. See here: http://tournasdimitrios1.wordpress.com/2011/02/07/passing-parameters-to-the-kernel-at-run-time-time-on-linux/ – ceving Jun 15 '12 at 08:18
  • good link. Thanks. Does the kernel send a signal to the user space if a parameter is changed by the kernel? This is useful because it will allow to detect the change of a parameter by the kernel in real time – MOHAMED Jun 15 '12 at 09:27

3 Answers3

7

1) Yes, /sys/module indeed has all the modules.

2) No, /sys/module/xxx/parameters only has the parameters the module wants to export, that is to say if you want to export some kernel module parameter from your module, you should use:

module_param(test, bool, 0600);

where the last parameter is non-zero, which means the permission of the file "/sys/module/xxx/parameters/test".

3) No, the value of the kernel module parameter is almost static, rarely changed by other places.

4) Your kernel module shall notify the userspace application.

Cong Wang
  • 2,001
  • 12
  • 13
3

Parameters are input values and not state values. You can not change a parameter after the recipient of the parameter has started.

If you want to change the behavior of the kernel at run time you have to use /proc/sys. See here: http://tournasdimitrios1.wordpress.com/2011/02/07/passing-parameters-to-the-kernel-at-run-time-time-on-linux/

MOHAMED
  • 41,599
  • 58
  • 163
  • 268
  • 4
    Then.. how does the following work: `writing (0/N/n=disable) to /sys/module/printk/parameters/time` will stop giving the timestamp, which looks like this -> [ 1915.150953]. Then `writing 1/Y/y=enable` will enable it back. All this during runtime. HOW ?? –  Oct 19 '13 at 08:51
  • https://www.kernel.org/doc/Documentation/ABI/stable/sysfs-module mentions that `/sys/module/MODULENAME/parameters/` contains "parameters of the module that are able to be changed at runtime" which suggests not every parameter has to be in there and that there is mechanism that a module can be informed of a change in parameter if it wants to know... – Anon Apr 25 '19 at 08:45
1

"Finally (and this one's kind of important), if you choose to define writable parameters and really do write to them while your module is loaded, your module is not informed that the value has changed. That is, there is no callback or notification mechanism for modified parameters; the value will quietly change in your module while your code keeps running, oblivious to the fact that there's a new value in that variable.

If you truly need write access to your module and some sort of notification mechanism, you probably don't want to use parameters. There are better ways to get that functionality." [1]

Basically, you'll need a mechanism to constantly poll for changes or you should just develop an IOCtl approach and register your device as a char device simultaneous to whatever else you are registering it as (Linux is psychotic in that respect).

Bryan Wilcutt "Linux is free if you don't value your own time." -- Unknown

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

Bryan Wilcutt
  • 335
  • 2
  • 9
  • Linux is free if you don't value your own time." - isn't that a really famous [Jamie Zawinski (jwz) quote](https://en.wikiquote.org/wiki/Jamie_Zawinski)? – Anon Apr 25 '19 at 08:59