실행중인 커널에서 사용하는 부팅 매개 변수를 어떻게 찾습니까? 커널이 어떤 매개 변수를

커널이 어떤 매개 변수를 부팅했는지 알아내는 방법이 있습니까?

예를 들어 grub 명령 줄에 noexec = off를 지정하면? 시스템 부팅이 끝난 후에 이런 종류의 정보를 볼 수 있습니까?



답변

당신은 실행할 수 있습니다 cat /proc/cmdline.

예:

[01:31] ~ $ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-2.6.38-7-generic root=UUID=025c4231-b7bb-48bf-93e9-d20c5b5ce123 ro crashkernel=384M-2G:64M,2G-:128M quiet splash bootchart=disable acpi_enforce_resources=lax vga=792 vt.handoff=7

답변

다른 방법은 dmesg(5 행) 출력을 확인하는 것입니다 .

$ dmesg | grep "Command line"
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.19.0-33-generic root=UUID=81dba11f-f76e-4ed4-8120-e6da6328b1ee ro

그러나 초기 스타트 업 라인이 링 버퍼에서 밀려 나서 많은 것들이 기록 된 경우 (예를 들어, 기계가 오랫동안 실행 된 경우)이 기능이 작동하지 않을 수 있습니다.


답변

실제로, 매개 변수는 커널 사이 __setup_start__setup_end커널에 있습니다. 다음 코드에서는 p->str매개 변수 이름입니다.

다음 커널 코드는 linux-3.4.5 / init / main.c에서 찾을 수 있습니다 :

/* Check for early params. */
static int __init do_early_param(char *param, char *val)
{
    const struct obs_kernel_param *p;
    for (p = __setup_start; p < __setup_end; p++) {
        if ((p->early && parameq(param, p->str)) ||
            (strcmp(param, "console") == 0 &&
             strcmp(p->str, "earlycon") == 0)
        ) {
            if (p->setup_func(val) != 0)
                printk(KERN_WARNING
                       "Malformed early option '%s'\n", param);
        }
    }


    /* We accept everything at this stage. */
    return 0;
}