Linux kernel uses lot's of sections to modularize it's code structure easily.
In case of kernel module and parameter, following section is used.
[ Module ] macro : module_init() section : device_initcall (section name : .initcall6.init) <see init.h>
[ Parameter ] macro : module_param_named(), module_param(), core_param() etc. section : __param <see moduleparam.h>
core_param() macro works like other module parameter. But this is NOT for module BUT for kernel booting parameter.
Kernel parameter doesn't have any prefix unlike other modules.
Module parameter's name has <module name> as it's prefix.
For example, parameter <param> of module <module> has name <module>.<param>
See source code for details.
KBUILD_MODNAME is preprocessor value for module name.
This is defined through complex script processing. See Makefile.lib, Makefile.mod* in scripts/.
But in most case, you can know it by intuition. That is, name that seems like module name, is set as KBUILD_MODNAME.
(ex. <mod name>-y, <mod-name>-m in Makefile)
So, usually, deep analysis about above scripts are not required.
Note:
It's possible that one object gets potentially linked into more than one module.
In that case KBUILD_MODNAME will be set to foo_bar, where foo and bar are the name of the modules.
Module and parameter initialization.
[ Built-in module ] module initialization : do_initcalls() <see 'main.c'> => initcall section is used parameter sysfs node : param_sysfs_init() -> param_sysfs_builtin() => __param section is used
[ Dynamic module ] module & parameter initialization is done at system call SYSCALL_DEFINE3(init_module, ...) => load_module()
Each parameter has permission mask. So, parameter value can be read or written at runtime through sysfs node.
/sys/module/<module name>/parameter/<parameter name>
But module parameter whose permission is 0, is ignored at sysfs (Not shown at sysfs).
( See module_param_sysfs_setup(...) function. )
'Domain > Kernel' 카테고리의 다른 글
[Kernel] SMP and IRQ - case (2011-Sep) (0) | 2011.09.23 |
---|---|
[Kernel] Potential bug for using jiffies - ex. schedule_timeout() - at Linux kernel. (0) | 2011.08.18 |
[Kernel] Debugging/Controlling GPIO at user space on Linux Kernel. (0) | 2011.06.22 |
[Kernel] kobject uevent in kernel (0) | 2011.04.19 |
[Kernel] Creating user-space process in Kernel (0) | 2011.04.19 |