内核如何“放弃”对特定于发行版的初始化的控制?

内核如何“放弃”对特定于发行版的初始化的控制?

我一直想知道内核如何在启动过程中将控制权传递给第三方代码,或者特定于发行版的代码。

我仔细研究了 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.");

答案2

维基百科有一个不错的文章关于Linux的启动过程。

今天,通常是初始化文件系统用来。

相关内容