假设我向内核传递了一个它不理解的参数,例如blabla
或eat=cake
,内核会如何处理这些未知参数,传统情况是将任何未知参数传递给init
,以防 Linux 内核以早期用户启动space (initramfs) 会将其传递到/init
initramfs 中吗?
答案1
来自内核文档:
内核从内核命令行解析参数到
--
;如果它无法识别参数并且不包含 a.
,则该参数将传递给 init:参数=
进入 init 的环境,其他参数将作为命令行参数传递给 init。之后的所有内容--
都作为参数传递给 init。
这也适用于/init
initramfs。在源代码中,initramfs/init
和最终根/sbin/init
(或其他位置)都是通过以下方式调用的run_init_process
它使用相同的参数(除了参数 0,它是可执行文件的路径)。我找不到文档中的说明,但内核接口是稳定的,因此不会改变。
请注意,这不适用于/linuxrc
initrd。调用此函数时不带任何参数,但环境与/init
和相同/sbin/init
。它可以挂载 proc 文件系统并读取/proc/cmdline
以查看内核命令行参数。