zoukankan      html  css  js  c++  java
  • 嵌入式启动之二:资源宽裕型嵌入式系统

           上一篇介绍了资源紧缺型嵌入式系统的启动过程,如今介绍资源宽裕型嵌入式系统的启动过程。

    内存资源宽裕型操作系统一般都外挂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,欢迎关注。





  • 相关阅读:
    面试试题
    使用NSURLSessionDataTask请求数据(get post方式)
    使用SSZipArchive第三方库解压zip包
    实现图文混编界面
    使用多线程创建单例对象
    SQL语句的种类_外键_表连接(内连接和左外连接)
    使用第三方库(FMDB) 本地数据库存储数据 --使用为了保证线程安全做法
    利用第三方库XML解析 (TBXML)转化成模型数据
    蓝牙传送_多点连接 (适用于>iOS7)
    Unity 产生各不相同的随机数
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5074830.html
Copyright © 2011-2022 走看看