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

has*_*ste 3 linux boot kernel

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

我在 GRUB 的配置文件中四处寻找,怀疑将一个特殊的参数传递给内核,让它知道在成功启动后要做什么,但找不到任何东西。这使我怀疑内核查找的根分区上可能存在某些文件。

如果有人能对此事有所了解,我将不胜感激。发行版如何实现这一点?

Ans*_*ann 8

它是硬编码的,但您可以通过内核参数覆盖默认值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.");
Run Code Online (Sandbox Code Playgroud)