首页 > 代码库 > 嵌入式启动之二:资源宽裕型嵌入式系统
嵌入式启动之二:资源宽裕型嵌入式系统
上一篇介绍了资源紧缺型嵌入式系统的启动过程,现在介绍资源宽裕型嵌入式系统的启动过程。内存资源宽裕型操作系统一般都外挂SDRAM,并且CPU的计算能力都比较强,例如基于cortex A、MIPS 74k等核心的SOC。下图是两种嵌入式系统架构的区别:
图1,对于资源紧缺型系统,内置flash和ram。上电之前就已经通过烧写工具将代码写到内置flash(nor flas),而iram用于data读写。
图2是资源宽裕型系统,其代码都放在外置存储介质中,如nand,sd卡等,包括引导OS的启动代码、OS、根文件系统和用户数据。上电后的运行过程是:
1)irom中有第一阶段的启动代码,一般称为boot loader 0(BL0),其作用是为了引导nand flash中的启动代码到IRAM中,而nand flash中的启动代码是为了引导OS代码,称为BL1。BL0上电运行,这时SDRAM尚未初始化,所以其需要将BL1搬到IRAM中运行。BL0的代码量比较小,主要是固化nand flash和card的读驱动代码,因为其要支持不同的启动介质。
由于受成本约束,IRAM也不可能很大,那BL0搬BL1的大小一般是固定的,一定要小于IRAM大小;而引导OS的启动代码往往超过IRAM大小,所以引导OS的启动代码又再分为两部分,一般分是由BL0搬到IRAM,即BL1;剩下的一部分称为BL2。UBOOT就是这样。
2)BL0引导BL1到IRAM后,把控制权交给BL1。BL1初始化好SDRAM,接着将BL2搬到SDRAM。
3)BL1将控制权交给BL2,BL2接着引导OS,最后把控制权交给OS。
事实上,为了支持不同的启动模式,如上电复位,看门狗中断,睡眠唤醒等等,在2)中,BL1会将自身BL1和BL2一起搬到SDRAM。可见BL1可能运行在IRAM中,也有可能运行在SDRAM中,一份代码只有一个链接地址,怎么可以在两个不同的虚拟地址上运行呢?答案就是BL1一定是位置无关的,GCC编译选项是-fPIC。
接下来的博文会详细分析UBOOT的代码细节---基于S5PV210,欢迎关注。
嵌入式启动之二:资源宽裕型嵌入式系统