设置内核可调参数
Setting kernel tunable parameter
因为我想引入新的内核模块参数说 new_param=1 /0 ,然后必须在内核代码中检查该参数作为
如果 (new_param==1)
做一些工作.....
别的
做其他的...
这样我想通过引入新的内核模块来检查parameter.Can任何人都可以帮助我吗?执行此操作需要遵循哪些步骤?
使用自定义内核参数的一种方法是将其添加到内核命令行并从 /proc/cmdline 中解析出来,即:
将参数添加到内核命令行
BOOT_IMAGE=<image> root=<root> ro quiet splash vt.handoff=7 your_parameter=<value>
开机时,通过解析/proc/cmdline:
的内容就可以得到这个参数
$ cat /proc/cmdline
BOOT_IMAGE=<image> root=<root> ro quiet splash vt.handoff=7 your_parameter=<value>
我相信更适合您需求的解决方案包括使用 __setup()
,/Documentation/kernel-parameters.txt.
中提到了(但没有很好地解释)
内核源码中有不少示例。其中之一是 /drivers/block/brd.c:
#ifndef MODULE
/* Legacy boot options - nonmodular */
static int __init ramdisk_size(char *str)
{
rd_size = simple_strtol(str, NULL, 0);
return 1;
}
__setup("ramdisk_size=", ramdisk_size);
#endif
按照此示例,您可以在相关源文件中添加 __init 和 __setup()。要从 __init 函数中的选项字符串解析整数,请参阅 /lib/cmdline.c
中的 get_option()
更新
对于模块,你应该使用module_param()
,它接受三个参数:变量名、变量类型、sysfs权限。有关 class 的更多信息,请访问 /linux/moduleparam.h。
在你希望能够传递参数的模块中,首先将参数声明为全局参数。示例用法将在模块源中包含以下内容:
int foo = 200;
module_param(foo, int, 0);
重新编译模块,你会看到你可以通过modprobe <module-name> foo=40
加载它。
因为我想引入新的内核模块参数说 new_param=1 /0 ,然后必须在内核代码中检查该参数作为 如果 (new_param==1) 做一些工作..... 别的 做其他的...
这样我想通过引入新的内核模块来检查parameter.Can任何人都可以帮助我吗?执行此操作需要遵循哪些步骤?
使用自定义内核参数的一种方法是将其添加到内核命令行并从 /proc/cmdline 中解析出来,即:
将参数添加到内核命令行
BOOT_IMAGE=<image> root=<root> ro quiet splash vt.handoff=7 your_parameter=<value>
开机时,通过解析/proc/cmdline:
的内容就可以得到这个参数$ cat /proc/cmdline
BOOT_IMAGE=<image> root=<root> ro quiet splash vt.handoff=7 your_parameter=<value>
我相信更适合您需求的解决方案包括使用 __setup()
,/Documentation/kernel-parameters.txt.
内核源码中有不少示例。其中之一是 /drivers/block/brd.c:
#ifndef MODULE
/* Legacy boot options - nonmodular */
static int __init ramdisk_size(char *str)
{
rd_size = simple_strtol(str, NULL, 0);
return 1;
}
__setup("ramdisk_size=", ramdisk_size);
#endif
按照此示例,您可以在相关源文件中添加 __init 和 __setup()。要从 __init 函数中的选项字符串解析整数,请参阅 /lib/cmdline.c
中的 get_option()更新
对于模块,你应该使用module_param()
,它接受三个参数:变量名、变量类型、sysfs权限。有关 class 的更多信息,请访问 /linux/moduleparam.h。
在你希望能够传递参数的模块中,首先将参数声明为全局参数。示例用法将在模块源中包含以下内容:
int foo = 200;
module_param(foo, int, 0);
重新编译模块,你会看到你可以通过modprobe <module-name> foo=40
加载它。