• 嵌入式启动之二:资源宽裕型嵌入式系统


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

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





  • 相关阅读:
    ECharts学习总结(四):echarts的实例方法
    ECharts学习总结(三):ECharts图表对象的初始化(init)详解以及注意事项
    ECharts学习总结(二):标签式单文件引入echarts的方法
    ECharts学习总结(一):ECharts的第一个图表
    Eclispe最常用的几个快捷键
    javascript数组去重的4个方法(转)
    数据库主键设计之思考(转)
    数据库插入数据返回当前自增主键ID值的方法
    Node.js制作图片下载爬虫的一般步骤
    Node.js mzitu图片批量下载爬虫1.00
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5074830.html
Copyright © 2020-2023  润新知