/proc/cmdline 中的 BOOT_IMAGE 参数是什么

Kun*_*shu 6 linux boot-loader debian proc

我目前正在阅读 How Linux Works 一书,在第 5 章中讨论了 Linux 参数。出于好奇,我开始查看在启动时传递给已安装内核的参数是什么,并注意到:

BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64

我一直在网上搜索这个参数的解释,但没有成功。任何人都可以指出我可以找到更多信息或解释这是BOOT_IMAGE关于什么的正确方向吗?需要注意的一件事是我正在运行远程 Debian 服务器。我知道服务本身是虚拟化的,可能使用 Xen。这是否与 Xen 以及它如何启动实例有关?

更新: 所以在调查时我注意到这vmlinuz-3.16.0-4-amd64是内核映像。还看着man bootparam它写道:

大多数排序在 linux/init/main.c 中进行。首先,内核检查参数是否是任何特殊参数“root=”、“nfsroot=”、“nfsaddrs=”、“ro”、“rw”、“debug”或“init”。这些特殊参数的含义如下所述。

任何不被接受为上述设置函数的“foo=bar”形式然后被解释为要设置的环境变量。一个(无用的?)示例是使用 'TERM=vt100' 作为启动参数。

任何未被内核选取且未被解释为环境变量的剩余参数然后被传递到进程一,这通常是 init 程序。传递给 init 进程的最常见参数是单词“single”,它指示 init 在单用户模式下启动计算机,而不是启动所有常用的守护进程。检查系统上安装的 init 版本的手册页,看看它接受哪些参数。

运行systemctl show-environment将显示如下内容:

[root@localhost ~]# systemctl show-environment 
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

所以看起来我们正在将我们正在启动的 Linux 映像的位置作为参数传递。剩下的唯一问题是什么进程使用这个环境变量,为什么?

小智 3

根据http://homepage.smc.edu/morgan_david/cs40/lilo-readme.txt

LILO always passes the string  BOOT_IMAGE=<name>  to the kernel, where 
<name> is the name by which the kernel is identified (e.g. the label). This 
variable can be used in /etc/rc to select a different behaviour, depending 
on the kernel.
Run Code Online (Sandbox Code Playgroud)

因此,它是(或保留在某些系统上)一种根据标签(或其他引导加载程序上的内核文件名)有选择地区分引导脚本行为的方法。init可能会将此变量传递给脚本。