如果内核命令行包含同一参数的多个设置,如何评估它们?
例子:
nohz=off ... nohz=on
Run Code Online (Sandbox Code Playgroud)
哪个设置“获胜”?最后一个?
每个参数的评估逻辑是否相同?
应该是最后一个了。
参数由 处理init/main.c
,它使用parse_args()
fromkernel/params.c
依次扫描它们。对于它调用的每一个parse_one()
,最终都会根据参数调用回调。
由于涉及回调,所有参数都会影响您的系统,无论它们的顺序如何。
对于nohz
,参数由 注册和处理kernel/time/time-sched.c
:
__setup("nohz=", setup_tick_nohz);
static int __init setup_tick_nohz(char *str)
{
return (kstrtobool(str, &tick_nohz_enabled) == 0);
}
Run Code Online (Sandbox Code Playgroud)
所以它设置和取消设置标志。如果中间没有其他任何东西,那么它应该没有影响。
内核开发人员是通情达理的人,他们不会添加其行为取决于传递顺序的参数,因此我认为在大多数情况下,两者的距离不会起作用。
... 但 ...
parse_args()
还有一张支票:
if (irq_was_disabled && !irqs_disabled())
pr_warn("%s: option '%s' enabled irq's!\n",
doing, param);
Run Code Online (Sandbox Code Playgroud)
这表明标志的回调可能会做一些重要的事情,比如启用 irqs。
这个逻辑/扫描还检查模块参数(即modulename.flag=xxx 形式的内核参数),我不会盲目相信模块选择做什么。
归档时间: |
|
查看次数: |
300 次 |
最近记录: |