Wie finde ich die vom laufenden Kernel verwendeten Boot-Parameter?

52

Gibt es eine Möglichkeit, herauszufinden, mit welchen Parametern der Kernel gebootet hat?

Zum Beispiel, wenn ich noexec = off in der Grub-Befehlszeile eingebe? Kann ich diese Art von Informationen sehen, nachdem das System gebootet wurde?

nvm
quelle

Antworten:

70

Du kannst rennen cat /proc/cmdline.

Beispiel:

[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
Drehmoment
quelle
Versuchen Sie tr ' ' '\n' < /proc/cmdline, Zeilenumbrüche zwischen den Parametern zu erhalten.
Mwfearnley
10

Eine alternative Möglichkeit besteht darin, die Ausgabe von dmesg(Zeile 5 hier) zu überprüfen :

$ 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

Beachten Sie jedoch, dass dies möglicherweise nicht funktioniert, wenn viele Dinge protokolliert wurden (z. B. wenn der Computer lange gelaufen ist), da möglicherweise die ersten Startzeilen aus dem Ringpuffer entfernt wurden.

joeytwiddle
quelle
1

Tatsächlich befindet sich der Parameter zwischen __setup_startund __setup_endim Kernel. Im folgenden Code ist der p->strder Parametername

Der folgende Kernel-Code befindet sich unter linux-3.4.5 / init / main.c: 388

/* 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;
}
byhankswang
quelle