maxschlepzig Asked: 2019-09-29 10:22:19 +0800 CST2019-09-29 10:22:19 +0800 CST 2019-09-29 10:22:19 +0800 CST 重复内核参数的评估顺序 772 如果内核命令行包含同一参数的多个设置,如何评估它们? 例子: nohz=off ... nohz=on 哪个设置“获胜”?最后一个? 每个参数的评估逻辑是否相同? linux-kernel 1 个回答 Voted Best Answer V13 2019-09-29T13:35:32+08:002019-09-29T13:35:32+08:00 应该是最后一个。 参数由 处理init/main.c,它使用parse_args()from kernel/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); } 所以它设置和取消设置标志。如果两者之间没有其他任何东西,那么它应该没有效果。 内核开发人员是通情达理的人,他们不会添加行为取决于传递顺序的参数,所以我假设在大多数情况下两者的距离不会起作用。 ... 但 ... parse_args()还有一张支票: if (irq_was_disabled && !irqs_disabled()) pr_warn("%s: option '%s' enabled irq's!\n", doing, param); 这表明一个标志的回调可能会做一些不平凡的事情,比如启用 irqs。 这种逻辑/扫描还检查模块参数(即模块名称.flag=xxx 形式的内核参数),我不会盲目相信模块选择做什么。
应该是最后一个。
参数由 处理
init/main.c
,它使用parse_args()
fromkernel/params.c
,它串行扫描它们。对于它调用的每一个parse_one()
,最终都会根据参数调用回调。由于涉及回调,所有参数都会影响您的系统,无论它们的顺序如何。
对于
nohz
,参数由 注册和处理kernel/time/time-sched.c
:所以它设置和取消设置标志。如果两者之间没有其他任何东西,那么它应该没有效果。
内核开发人员是通情达理的人,他们不会添加行为取决于传递顺序的参数,所以我假设在大多数情况下两者的距离不会起作用。
... 但 ...
parse_args()
还有一张支票:这表明一个标志的回调可能会做一些不平凡的事情,比如启用 irqs。
这种逻辑/扫描还检查模块参数(即模块名称.flag=xxx 形式的内核参数),我不会盲目相信模块选择做什么。