Linux 内核在启动过程中如何知道 /sbin/init 程序的位置?“/sbin/init”是否硬编码到 Linux 内核源代码中?
答案1
是的,/sbin/init
已硬编码到源代码中。查看函数init_post
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
可以使用参数在内核启动命令行上给出内核加载完成后要运行的程序init=/file/name
。
/sbin/init
如果未传递此选项,则使用内置默认值。