android系统启动简述

下面我将用最简单的话来描述这个过程:

1.bootloader主要是在系统加载前,初始化硬件设备,建立内存空间的映像图,为最终调用系统内核准备好环境,常见的引导程序就是uboot,uboot的第一条指令从cpu/arm920t/start.S文件开始,它最终跳转到内核。(若用户在启动刚开始按了指定的recovery组合键,系统会直接进入Recovery模式, 若启动过程中用户没有按下不论什么组合键,bootloader会读取位于MISC分区的启动控制信息块BCB。它是一个结构体,存放着启动命令command,依据不同的命令,系统又能够进入三种不同的启动模式:MainSystem、Recovery、Bootloader。)

2.跳转到内核,首先启动的是idle进程,进程号为0,它是用汇编语言写的,对应文件是kernelroots/arch/arm64/kernel/head.S。内核开始启动时,执行设置缓存、被保护存储器、计划列表,加载驱动等任务,当内核完成系统设置,它会在系统文件中寻找”init”文件,即启动用户空间的第一个进程:init进程。内核启动还有一个重要的任务就是启动了kthreadd进程,它是第一个内核空间第一个进程,kthreadd进程是Linux系统内核管家,所有的内核线程都是直接或间接以它为父进程

3.init是第一个用户进程,可以说它是root进程或者说有进程的父进程,init进程主要有两个责任:
a:挂载目录,比如/sys、/dev、/proc
b:解析init.rc脚本
值得注意的是解析init.rc后,init进程会根据规则启动zygote进程。

4.zygote 进程是系统服务,可以说是android系统的关键。在初始化时会启动虚拟机,并加载一些系统资源,最后fork处子进程system_server

5.system_server进程启动了各个系统服务,为android系统应用框架提供运行环境。

猜你喜欢

转载自blog.csdn.net/angelsmiling/article/details/105400464