我一直想知道内核如何在启动过程中将控制权传递给第三方代码,或者特定于发行版的代码。
我仔细研究了 GRUB 的配置文件,怀疑有一个特殊的参数传递给内核,让它知道成功启动后要做什么,但找不到任何东西。这让我怀疑内核在根分区上可能寻找某些文件。
如果有人能对这个问题有所了解,我将不胜感激。发行版如何实现这一目标?
答案1
它是硬编码的,但您可以通过内核参数覆盖默认值init=...
。
从init/main.c
:
if (execute_command) {
run_init_process(execute_command);
printk(KERN_WARNING "Failed to execute %s. Attempting "
"defaults...\n", execute_command);
}
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
panic("No init found. Try passing init= option to kernel. "
"See Linux Documentation/init.txt for guidance.");