linux内核在启动过程中如何知道/ sbin / init程序的位置? 将“/ sbin / init”硬编码到linux内核源代码中?
是的, /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.");
内核加载完成后运行的程序可以使用init=/file/name参数在内核启动命令行中给出。
如果该选项没有通过,则使用内置的默认/sbin/init 。