Czy istnieje sposób, aby dowiedzieć się przy pomocy jakich parametrów uruchomił się jądro?
Na przykład, jeśli podam noexec = off w wierszu poleceń grub? Czy mogę zobaczyć tego rodzaju informacje po zakończeniu uruchamiania systemu?
Czy istnieje sposób, aby dowiedzieć się przy pomocy jakich parametrów uruchomił się jądro?
Na przykład, jeśli podam noexec = off w wierszu poleceń grub? Czy mogę zobaczyć tego rodzaju informacje po zakończeniu uruchamiania systemu?
Odpowiedzi:
Możesz biegać cat /proc/cmdline
.
Przykład:
[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
tr ' ' '\n' < /proc/cmdline
uzyskać podział między parametrami.
Alternatywnym sposobem jest sprawdzenie wyniku dmesg
(tutaj wiersz 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
Należy jednak pamiętać, że może to nie działać, jeśli zarejestrowano wiele rzeczy (np. Jeśli maszyna działała przez długi czas), ponieważ początkowe linie startowe mogły zostać wypchnięte z bufora pierścieniowego.
W rzeczywistości parametr znajduje się pomiędzy __setup_start
i __setup_end
w jądrze. W poniższym kodzie p->str
jest to nazwa parametru
Poniższy kod jądra można znaleźć pod 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;
}