本文目录:
(一)整体概述
(二)BootLoader
(三)Kernel初始化
(四)Init初始化介绍
(a)Init.rc
(b)boottanim启动
(c)Surfaceflinger启动
(五)Zygote启动介绍
(a)app_process
(b)AppRuntime
(c)ZygoteInit
(六)SystemServer启动介绍
(a)AMS启动
(b)PackageMS启动
(七)Launcher启动介绍
(a)SystemUI启动
(b)Launcher启动
(八)Log抓取与分析方法
(九)总结及参考
概述:Loader > Kernel > Native > Framework > Application
细分:BootRom > Bootloader > Kernel > Init > Zygote > SystemServer > Launcher
Ø Loader层主要包括Boot Rom和Boot Loader;
Ø Kernel层主要是Android内核层,启动0号和1号进程;
Ø Native层主要是包括init进程以及其fork出来的用户空间的守护进程、HAL层、开机动画等;
Ø Framework层主要是AMS和PMS等Service的初始化;
Ø Application层主要指SystemUI、Launcher的启动;
(二)BootLoader
Bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
调用流程:
crt0.S > kmain > arch_init > target_init > apps_init > aboot_init
详细步骤如下:
Ø 在crt0.s中:
n 主要完成CPU初始化,禁用mmu,禁用cache,初始化异常向量表等操作,最后直接跳转到kmain中;
n MTK平台:alps/vendor/mediatek/proprietary/bootable/bootloader/lk/arch/{paltform}/crt0.S
Ø 在kmain方法中
n MTK平台:alps/vendor/mediatek/proprietary/bootable/bootloader/lk/kernel/main.c
n 初始化线程系统 > 初始化mmu,设置异常向量基地址 > 初始化硬件时钟、主板等 > 初始化uart端口 > 内核堆栈初始化(用于kmalloc等函数的内存分配) > 初始化定时器 > 初始化内核定时器 > 判断是否定义ENABLE_NANDWRITE:如果是运行bootstrap2线程;如果不是则在timer_init之后执行bootstrap_nandwrite。
Ø Bootstrap2中执行arch_init > target_init > apps_init:
n arch_init:打印信息;
n target_init:
u 从共享内存中读写xbl提供的pmic信息;
u