如果使用不同的值传递两次Linux内核参数,会发生什么情况?

正如问题所述,如果我通过了

kernel /vmlinuz audit=1 audit=0 

审核是启用还是禁用? 还是内核只是吓坏了? 或者它是未定义的,将取决于正在传递的内核/参数的构build?

那么,看看linux / kernel / params.c中的Vanilla代码和parse_one函数(对于v3.2.6),我将假设audit=0是内核使用的版本,它是列表中的最后一个。

 static int parse_one(char *param, char *val, const struct kernel_param *params, unsigned num_params, int (*handle_unknown)(char *param, char *val)) { unsigned int i; int err; /* Find parameter */ for (i = 0; i < num_params; i++) { if (parameq(param, params[i].name)) { /* No one handled NULL, so do it here. */ if (!val && params[i].ops->set != param_set_bool) return -EINVAL; DEBUGP("They are equal! Calling %p\n", params[i].ops->set); mutex_lock(&param_lock); err = params[i].ops->set(val, &params[i]); mutex_unlock(&param_lock); return err; } } if (handle_unknown) { DEBUGP("Unknown argument: calling %p\n", handle_unknown); return handle_unknown(param, val); } DEBUGP("Unknown argument `%s'\n", param); return -ENOENT; } 

我现在不在GNU / Linux机器附近来validation它,而且还取决于内核分发者所做的补丁。