Назад | Перейти на главную страницу

Что произойдет, если аргумент ядра Linux передается дважды с разными значениями?

Как говорится в вопросе, что, если я пройду

kernel /vmlinuz audit=1 audit=0

Будет ли аудит включаться или отключаться? Или ядро ​​просто взбесится? Или он не определен и будет зависеть от сборки переданного ядра / аргумента?

Что ж, глядя на код Vanilla в Linux / ядро ​​/ params.c и 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, чтобы проверить это, и это также будет зависеть от патчей, сделанных распространителем вашего ядра.