커널 매개변수 평가 순서를 반복합니다.

커널 매개변수 평가 순서를 반복합니다.

커널 명령줄에 동일한 매개변수에 대한 여러 설정이 포함되어 있는 경우 이를 어떻게 평가합니까?

예:

nohz=off ... nohz=on

어떤 설정이 "승리"합니까? 마지막 하나?

각 매개변수에 대한 평가 논리가 동일합니까?

답변1

이것이 마지막이어야합니다.

매개변수는 에 의해 처리되며 from을 init/main.c사용하여 지속적으로 스캔합니다. 호출할 때마다 콜백은 결국 매개변수에 따라 호출됩니다.parse_args()kernel/params.cparse_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);

이는 플래그의 콜백이 irq 활성화와 같은 중요한 작업을 수행할 수 있음을 나타냅니다.

이 로직/스캔은 또한 모듈 매개변수(예: modulename.flag=xxx 형식의 커널 매개변수)를 확인하므로 모듈이 수행하기로 선택한 작업을 맹목적으로 신뢰하지는 않습니다.

관련 정보