一 概览
先来看android 系统架构图

从下至上大概分五层 其中 HAL 及AndroidRuntime 在android 高版本中的层级结构及关联有较大的变化
android系统从上电启动到进入luanch界面的流程和逐层向下依赖的层级结构有很强的关联性

系统启动
1 引导
当电源键按下时引导芯片代码从预定义的地方(固化在ROM)开始执行。加载引导程序BootLoader(它负责初始化硬件设备,为最终调用操作系统做好准备。)到RAM中,然后执行。
2 内核启动 (提供底层硬件访问 系统调用)
它负责整个硬件的驱动,以及提供各种系统所需的核心功能,内核启动 (提供底层硬件访问 系统调用) 后调用 run_init_process运行init进程 Kernel 启动的第一个用户级进程 Kernel
3 启动init进程 主要提供四大功能 至此android framework环境启动完毕
作为守护进程 (处理子进程终结 )
解析和执行init.rc文件 (配置系统环境,建立文件系统挂载点,及注册系统服务列表 启动各种子进程等)
生成设备驱动节点 (静态或动态设备节点 热拔插 虚拟binder节点)
属性服务 (保存系统运行时所需环境变量类似window注册表)
注意此图中的 servicemanager 是由 int.rc脚本 中 AIL 脚本执行
service servicemanager /system/bin/servicemanager
usersystem
...
onrestart restart zygote
onrestart restart media
4 从3中服务列别种启动app_progress 启动zygote进程
在Android中,zygote是一个native进程,是Android系统上所有应用进程的父进程,是整个系统创建新进程的核心进程。
zygote进程在内部会先启动 虚拟机,继而加载一些必要的系统资源和系统类,建立socket服务端 runSelectLoopMode 监听app进程连接通信。通过fork的方式,启动system_server嫡长子进程
5 system_server 启动 本地系统服务(audio flinger surface camera...)及java系统服务(AMS PMS...)
SystemServer是Android系统的一个核心进程,它是由zygote进程创建的,因此在android的启动过程中位于zygote之后。android的所有服务循环都是建立在 SystemServer之上的。在SystemServer中,将可以看到它建立了android中的大部分服务,并通过ServerManager的add_service方法把这些服务注册到(加入)到了ServiceManager的svclist中。从而完成ServcieManager对服务的管理。

本文详细介绍了Android系统的启动流程,从引导加载器BootLoader开始,经过内核启动、init进程、zygote进程的孵化,到最后system_server的启动。在这一过程中,涉及硬件初始化、系统服务注册、进程创建等多个关键步骤,揭示了Android系统从按下电源键到显示启动界面的层层依赖关系。

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



