系统开发 (五) 启动流程

一 概览

先来看android 系统架构图

系统开发 (五) 启动流程_第1张图片

从下至上大概分五层 其中 HAL AndroidRuntime 在android 高版本中的层级结构及关联有较大的变化

android系统从上电启动到进入luanch界面的流程和逐层向下依赖的层级结构有很强的关联性

系统开发 (五) 启动流程_第2张图片

系统启动

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对服务的管理。

你可能感兴趣的:(Framework,android)