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

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

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

时间: 2024-10-05 17:18:04

嵌入式启动之二:资源宽裕型嵌入式系统的相关文章

嵌入式启动之一:资源有限型系统启动

启动即是芯片上电复位要运行的程序,启动作为一个模块独立于操作系统而在,因为操作系统需要通过启动这个模块来加载和引导的.所以启动的英文术语是boot loader.我对boot loader的定义包括两部分:1.加载os 2. 为了让os能够正常运行所要做的硬件和软件初始化工作. 我们常常看到boot loader这个词语用于arm引导linux,X86引导windows等等.可见一般意义上,能用上boot loader都是一些计算能力强并外挂SDRAM的SOC方案.那我们咱们去理解内存资源有限型

嵌入式启动之四:S5PV210 IROM BL0启动

三星S5PV210基于A8内核,是arm v7体系,广泛应用于手机和平板解决方案中.市场上也有很多基于S5PV210芯片的开发板(如smart210, gec210等),用于学习高级ARM体系编程.S5PV210跟S5PC11X基本一致,很多人认为两者是同样的SOC,只不过是封装不同,事实上,两者确实略有不同.跟S5PC11X相比,S5PV210没有内置16MSRAM和电源管理模块,解码能力也有些许不同.但从软件使用的角度,两者在内核体系.集成模块.管脚封装上确实有很大的相似性,以致UBOOT在

嵌入式启动之三:应用程序的三种存储和加载方式

通过前面嵌入式启动方式的学习,再来理解嵌入式应用程序的三种加载方式是比较容易的.一般意义上,启动是为了引导OS到内存,而应用程序则是操作系统run起来后的用户选择,两者是比较相似的.先根据启动的两种方式来介绍应用程序的加载. 1. 对于资源有限型的嵌入式系统,应用程序在编译.链接之后,会通过二进制工具分析可执行文件的格式,抽出code和data段数据,生成.HEX格式或者.BIN格式,下载到SOC内置的flash中.在上电之后就直接执行了.这种加载方式称为离线加载. 2. 对于资源宽裕型的嵌入式

嵌入式启动之五:基于S5PV210的UBOOT概述

启动引导(boot loader)是包括两个部分:1.引导加载os 2. 为了让os能够正常运行所要做的硬件和软件初始化工作.从OS引导的方式来看,启动又分两种模式,一种是用于开发人员调试的"下载模式",配置好网络环境.网络文件系统变量之后,OS可以从PC宿主机进行引导:另一种是量产产品的启动模式,OS已经存在于产品系统的外存设备中,启动即从外存中加载. 常见的启动引导模块技术如下图: uboot是一个通用的boot loader,被广泛应用于多种芯片架构的不同操作系统的引导.uboo

Linux 嵌入式启动以及优化

转载:http://www.embeddedlinux.org.cn/html/jishuzixun/201312/19-2717.html 第一步: BootLoader -- U boot 1 在cpu/arm926ejs/start.s中 a) b reset ; //jump to reset b) set cpsr ;svc mode ,disable I,F interrupt c)调用lowlevel_init  (在board\xxxx\lowlevel_init.S中 将调用

【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源热更新 Android热更新开源项目Tinker源码解析系类之三:so热更新 转载请标明本文来源:http://www.cnblogs

嵌入式linux与51/430/STM32的嵌入式开发的区别与关联

嵌入式linux与51/430/STM32的嵌入式开发的区别与关联 总结: 微控制器系列:8051, MSP 430 , STM32 F0-3( ARM Cortext M0 - M3系列)等 主要特点没有内存管理单元,不能运行linux 这类有着虚拟内存的操作系统,只能运行裸机程序或是ucOS一类的实时操作系统.主要工作就是外设驱动开发(比如写个编码器的驱动,液晶的驱动,usb的驱动)和基于驱动的应用程序开发,如控制类和简单的图像处理功能. 微处理器系列: ARM Cortex A系列的处理器

天天设计模式二:创建型模式实践

天天设计模式二:创建型模式实践 创建型设计模式主要应用在对象创建,以不同的方式来满足系统的灵活性配置.动态注入.等应用场景. 一.单例模式 二.抽象工厂 三.建造者模式 四.工厂方法模式 五.原型模式

在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10]; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(i==j||i+j==9) { y[i][j]='*'; } else { y[i][j]='#'; } } } for(int i =0;i<10;i++) { for(int k