设置内核可调参数

时间:2016-06-01 05:18:48

标签: linux-kernel kernel

因为我想引入新的内核模块参数,比如new_param = 1/0,然后必须在内核代码中检查该参数之后 if(new_param == 1) 做一些工作..... 其他 做别的......

通过这种方式我想通过引入新的内核模块参数进行检查。任何人都可以帮帮我吗?我需要遵循的步骤是什么?

1 个答案:

答案 0 :(得分:1)

使用自定义内核参数的一种方法是将其添加到内核命令行并将其解析出/ 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() #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 /Documentation/kernel-parameters.txt中提及(但未详细解释)。

内核源代码中有很多例子。其中一个是/drivers/block/brd.c:

module_param()

按照此示例,您可以在相关的源文件中添加__init和__setup()。要从__init函数中的选项字符串解析整数,请参阅/lib/cmdline.c中的get_option()

<强>更新

对于模块,您应该使用int foo = 200; module_param(foo, int, 0); ,它有三个参数:变量名,变量类型,sysfs权限。有关课程的更多信息,请访问/linux/moduleparam.h

在您希望能够传递参数的模块中,首先将参数声明为全局变量。示例用法将在模块源中包含以下内容:

modprobe <module-name> foo=40

重新编译模块,您将看到可以通过{{1}}加载它。