1.设备上电后,跳转到boot rom中的boot code(固化在rom中)中执行,brom初始化栈,找到并初始化启动设备(外部memory比如emmc);
2.加载emmc中的preloader到内部ISRAM中,preloader开始执行,执行硬件初始化,创建c运行环境;
3.preloader从emmc中加载lk/uboot到内部memory(DRAM)执行;
4.lk开始执行,获取preloader中传递的参数,使能mmu,初始化硬件等;
5.lk加载kernel和ramdisk到DRAM中的相应地址,跳转到kernel去执行,执行ramdisk里的init进程,init(用户空间的鼻祖)进程fork其他进程,比如Zygote(java的鼻祖)进程,Zygote fork一个system server进程,该进程fork app进程,手机启动完成。
总结一下:
Android启动流程就是设备上电后跳转到boot code执行,并找到flash,将flash中的preloader加载到DRAM中,preloader加载lk和uboot,lk加载kernel和ramdisk,跳转到kernel启动内核,ramdisk负责创建init进程,init进程创建其他进程,系统启动完成
存在问题:ISRAM和boot rom不是同一个器件,boot code是放在boot rom中,而preloader是加载到ISRAM中,但是在课件的图中这两个是在一块的,如下图中的boot code是在rom中还是在ISRAM中。