Он должен быть последним.
Параметры обрабатываются с помощью init/main.c
, который использует parse_args()
из 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);
что указывает на то, что обратный вызов флага может выполнять -не тривиальные действия, такие как включение прерываний.
Эта логика/сканирование также проверяет параметры модуля (, то есть параметры ядра в форме имя_модуля.flag=xxx ), и я бы не стал слепо доверять тому, что выбирают модули.
do-release-upgrade
выпускается по одному LTS-релизу за раз; ничего другого не поддерживается. Так что на самом деле ваш единственный поддерживаемый вариант — перейти с 14.04 на 16.04.
Если вы хотите идти дальше, вы должны делать это шаг за шагом.
Стоит прочитать раздел «Обновление» примечаний к выпуску 16.04 .