嵌入式linux/Android系统详细启动流程解析

2019-07-13 00:36发布

第一阶段:启动ROM_code =============================
第二阶段:启动X_loader =============================
第三阶段:启动U_boot stage1: 基本硬件设备(如CPU等)的初始化; 为stage2部分的代码准备RAM空间; 设置好堆栈; 跳入stage2 C入口。 stage2: 监测系统内存映射; 将kernel镜像和根文件系统镜像从Flash读入RAM中; 设置内核启动参数; 调用内核。 =============================
第四阶段:启动内核 step1: kernel自解压 step2: 设置CPU工作模式,打开mmu、cache,设置内核页表,初始化串口、console、mmc、nand、显示、网络(分配IP与Mac地址)等硬件设备,使能中断、初始化进程间通信IPC等。 step3: 挂载根文件系统,设置根文件系统为rootfs,加载设备驱动以及内核静态模块。 =============================
第五阶段:启动用户进程init 文件权限清零; 为rootfs创建必要的文件夹,挂在必要分区; 创建/dev/null和/dev/kmsg节点; 解析init.rc启动脚本,执行各阶段动作; 初始化qemu模拟器(保证Android app能在无真正Android设备的情况下运行Android app); 初始化属性系统,开启属性服务; 显示设备开机logo/声音; init进程进入死循环。 =============================
第六阶段:启动java虚拟机zygote,进入java世界 =============================
第七阶段:启动systemserver后台服务 =============================
第八阶段:启动launcher桌面程序 =============================
第九阶段:启动lockscreen锁屏界面 =============================
第十阶段:启动第三方apk并显示于launcher桌面