OpenWRT启动流程分析

OpenWRT针对主线内核中不存在的各种硬件和独特应用程序提供了许多补丁,补丁的分析在Issue #86254。这些补丁位于

openwrt/target/linux/generic/patches-<patchver>中。其中,无论选择哪个版本的Linux,都可以找到一个名为921-

use_preinit_as_init.patch 的补丁,它在init进程列表的第一个位置注入OpenWRT init进程。patch内容如下:

--- a/init/main.c

+++ b/init/main.c

@@ -964,7 +964,8 @@ static int __ref kernel_init(void *unuse

panic("Requested init %s failed (error %d).",

execute_command, ret);

}

if (!try_to_run_init_process("/sbin/init") ||

if (!try_to_run_init_process("/etc/preinit") ||

!try_to_run_init_process("/sbin/init") ||

!try_to_run_init_process("/etc/init") ||

!try_to_run_init_process("/bin/init") ||

!try_to_run_init_process("/bin/sh"))


/sbin/init应用程序主函数位于procd/initd/init.c 文件。大致流程如下:

results matching ""

    No results matching ""