1 Overview
MTK/高通 BootLoader加载 --> LK(UEFI)加载 --> HLOS(Linus kernel) --> init
2 Init是什么?
Init 是Android OS中第一个user space process(pid = 1),守护进程(在后台运行的特殊进程,用于执行启动的系统任务),源码位于:system/core/init/ ,本文会分析它的完整启动流程。
pid = 0: 启动 Kernel 的 Swapper 进程, idle进程,用于初始化进程管理、内存管理、加载各种驱动等工作。
pid = 1:Init 进程是所有用户进程的鼻祖,Init 进程会孵化出 ueventd、logd、healthd、installd、adbd、lmkd 等用户守护进程;
Init 进程还启动 ServiceManager (binder服务管家)、bootanim (开机动画) 等重要服务;
Init 进程孵化出 Zygote 进程,Zygote 进程是 Android 系统的第一个 Java 进程 (即虚拟机进程),Zygote 是所有 Java 进程的父进程, Zygote 进程本身是由 Init 进程孵化而来的。
pid =2: Linux 系统的内核进程,会创建内核工作线程 kworkder,软中断线程 ksoftirqd,thermal 等内核守护进程,kthreadd 进程是所有内核进程的鼻祖。
3. Init的起始是什么?
kernel/msm-5.4/init/main.c: run_init_process(ramdisk_execute_command)
--> 开始执行根目录下的init进程:
Start :platform/system/core/init/main.cpp
platform/system/core/init/init.cpp
platform/system/core/init/ueventd.cpp
platform/system/core/init/selinux.cpp
platform/system/core/init/subcontext.cpp
platform/system/core/base/logging.cpp
platform/system/core/init/first_stage_init.cpp
platform/system/core/init/first_stage_main.cpp
platform/system/core/init/first_stage_mount.cpp
platform/system/core/init/keyutils.h
platform/system/core/init/property_service.cpp
platform/external/selinux/libselinux/src/label.c
platform/system/core/init/signal_handler.cpp
platform/system/core/init/service.cpp
4. Init/main.cpp做了什么谜之操作?
CMD查看init pid:ps -e | grep init

本文详细介绍了Android系统从BootLoader加载到Init进程启动,再到Zygote进程孵化的过程。Init作为Android的首个用户空间进程,负责孵化其他关键服务和守护进程,如ueventd、logd、ServiceManager、bootanim以及Zygote。Init的启动始于kernel/msm-5.4/init/main.c的run_init_process函数,执行root目录下的init进程。主要涉及的源码文件包括main.cpp、init.cpp、ueventd.cpp等。Init的主要任务包括启动服务、管理进程,并为Android系统的Java层奠定基础。
1028

被折叠的 条评论
为什么被折叠?



