系统启动过程与内核并不属于Android,根据MTK的流程来做一个简单总结
本来打算根据MTK的源文档做总结,但是发现另一个blog已经做了这个工作,自认为不可能做的更好,引用其连接吧!
MTK文档给出的流程图:
主要分为五个部分(代码包):
1、 Boot code
2、 Preloader
3、 U-Boot
4、 Kernel
5、 Ramdisk
涉及到的硬件有四个:
ROM、SRAM、DRAM、NAND
先分析四个硬件,都是存储器:
ROM 固化存储器,存储固定的code,不能被擦除
SRAM 随机存储器,存储速度很快,掉电存储信息丢失 特点:存储容量小,读写速度快
DRAM 随机存储器,存储速度一般,掉电存储信息丢失 特点:存储容量大,读写速度慢
NAND 和emmc作用一样,做flash使用,掉电存储信息不丢失
SRAM与DRAM就是 内存,NAND(或者emmc可以代替它) 是外存
根据流程图,看一下启动过程:
1和2 设备上电后,Boot ROM开始运行。
3 Boot ROM初始化NAND
4 Boot ROM从NAND中加载pre-loader到内部SRAM(ISRAM)中,执行pre-loader
5 pre-loader加载U-Boot到RAM中
6 执行U-Boot
7和8 U-Boot从NAND中加载引导镜像(boot image),包括linux内核和ramdisk
9 U-Boot跳转到linux内核并执行
具体的工作如下:
Ramdisk作用: ramdisk.img中主要是存放android启动后第一个用户进程init可执行文件和init.*.rc等相关启动脚本以及sbin目录下的adbd工具
————为什么要使用SRAM与DRAM,使用一个DRAM是否可以?
可以!如此可以把 Preloader和U-Boot做在一起,SRAM最主要的作用在于高速传输,在内存管理中,使用 段/页式,多级页表就是存储在SRAM中;C语言的局部快速处理操作也是由于SRAM存在实现的。SRAM可以极大的增加CPU的处理速度,解决CPU处理速度与DRAM读写速度极度不匹配的现象。