Android系统板子上电启动流程

2019-04-13 13:24发布

文章目录

Android整体上电启动流程

在这里插入图片描述
具体流程图如下: 在这里插入图片描述 流程分析
1-3: 板子上电时,就跳转到boot Rom中去执行boot code,之后boot code中去加载preloader到ISRAM中去执行
4-6: 接着preloader跳转到EL3去执行ATF(Arm Trust firmware), ATF为ARM芯片的底层固驱动,将触发LK
7-8: 将LK从flash中copy到DRAM中去初始化,为进行启动linux kernel做准备
9-10: 解压bootimage成ramdisk跟kernel,并加载到DRAM中进行初始化dtb,开始做kernel初始化.
11-13: LK跳转到kernel初始化,kernel初始化完成,会fork出init进程, 然后, 拉起ramdisk中的init进程进入用户空间初始化验,
init进程fork出zygote进程,直到整个Android系统自动完成.
到此,整个Android系统就启动完毕,可以看Android的logo启动,最后进入桌面.

DRAM在哪得到初始化的?

由于硬件DRAM的颗粒不同,访问的timing也不同,因此,要知道DRAM如何运行,首先得知道DRAM的时序如何?DRAM的初始化是在preloader中做的,而preloader的加载地址是其头部有一个0x300的header,所以在boot code中去加载读取出preloader的header, 将其加载到ISRAM中去执行即可得到DRAM的初始化时序,即可开始运行系统了.

LK的功能

1, 线程池的初始化,包括运行队列,链表初始化
2, 架构初始化,包括DRAM MMU初始化,使能协处理器
3, platform early init, 包括UART, timer, I2C, pmic, usb等
4, platform init,包括storagre, mmc, nand, leds, disp
5, load boot logo and display it
6, load kernel into DRAM, 解压kernel并启动kernel

Init进程的功能

1, 创建文件并挂载
2, 初始化和启动属性服务
3, 解析init.rx配置文件并启动zygote进程