为什么 Linux 允许 'init=/bin/bash'?
我读了这个,答案是说它是运行这个初始化程序的内核。
然后我开始怀疑,Linux通常带有一个initramfs,它最终会mount和pivot_root到真正的根文件系统。那么这个init
论点是什么意思呢?initramfs中的路径?或者就像我猜的那样,它不是由内核读取,而是由 initramfs 的 init 来执行真正的 init。
另外,root=UUID=xxxx
论点,是真正由内核读取还是仅由 initramfs 的 init 读取以找到真正的根文件系统?
似乎我可以将我想要的任何参数作为内核参数传递,那么它们是否都被内核读取,或者至少其中一些只对用户空间程序有意义?
Ste*_*itt 18
在内核命令行上传递的参数不一定对内核有意义:内核参数文档说
内核将内核命令行中的参数解析为“--”;如果它不能识别参数并且它不包含“.”,则该参数将传递给 init:带有“=”的参数进入 init 的环境,其他参数作为命令行参数传递给 init。“--”之后的所有内容都作为参数传递给 init。
这不适用于init
和root
哪些确实是内核参数,并由内核处理。用户空间也可以对它们进行操作,因为它们出现在/proc/cmdline
. (例如,systemd 会考虑quiet
内核参数以减少其输出。)
当内核与一个initramfs的引导时,该root
参数不使用直接由内核,并且init
如果参数仅用于rdinit
失败。init
启动在 中处理kernel_init
,其工作原理如下:
rdinit
内核命令行上给定的值,或/init
),内核会尝试运行该命令;init
内核命令行上给出的值),内核会尝试运行它,如果不能,则恐慌;/sbin/init
, /etc/init
, /bin/init
, 和/bin/sh
; 如果这些都不能运行,它就会恐慌。当有 initramfs 时,所有这些都发生在那里,并且目标卷不是由内核挂载的。内核运行第一个程序(通常是 initramfs 中的脚本)后会发生什么取决于程序,而不是内核。如果文件系统已挂载,则未传递给的参数仍然可用。init
/init
init
/proc/cmdline
/proc
归档时间: |
|
查看次数: |
1849 次 |
最近记录: |