¿Hay alguna manera de averiguar con qué parámetros arrancó el kernel?
Por ejemplo, si especifico noexec = off en la línea de comando de grub? ¿Puedo ver este tipo de información después de que el sistema haya terminado de iniciarse?
¿Hay alguna manera de averiguar con qué parámetros arrancó el kernel?
Por ejemplo, si especifico noexec = off en la línea de comando de grub? ¿Puedo ver este tipo de información después de que el sistema haya terminado de iniciarse?
Respuestas:
Puede ejecutar cat /proc/cmdline
.
Ejemplo:
[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
obtener saltos de línea entre los parámetros.
Una forma alternativa es verificar la salida de dmesg
(línea 5 aquí):
$ 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
Pero tenga en cuenta que esto podría no funcionar si se han registrado muchas cosas (por ejemplo, si la máquina ha estado funcionando durante mucho tiempo) porque las líneas de inicio iniciales pueden haberse eliminado del ringbuffer.
En realidad, el parámetro se encuentra entre __setup_start
y __setup_end
en el núcleo. En el siguiente código, p->str
es el nombre del parámetro
El siguiente código del kernel se puede encontrar en 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;
}