カーネルが起動したパラメーターを調べる方法はありますか?
たとえば、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: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;
}