本文以s5pv210这款SOC为例,分析了其启动流程

在s5pv210的SOC内部,存在着一个内部的ROM和一个内部的RAM

  • 这个内部的ROM叫做 IROM,它是norflash的一种。其不同于板子上外接的inand/sd(mmc),它优点是一上电无需初始化即可使用,缺点是又小又贵…
  • 这个内部的RAM叫做 SRAM,其不同于板子上外接的 DDR(DRAM),它优点也是一上电无需初始化即可使用…..缺点也是又小又贵…

由于它俩的优异特性,一上电后的很多工作就由它俩来负责了

1.判断启动介质

  • 首先一上电,cpu先从SOC内部的IROM中执行预先设置的代码(s5pv210称其为BL0),初始化CPU时钟、关看门狗、并且通过读取特定gpio来判断启动介质。(注:IROM中代码可以直接执行,不用放到SRAM中)
  • 对于有些SOC来说,他们不通过读gpio来判断启动介质,而是根据启动介质的优先级,来依次尝试从各个启动介质启动,直到某个启动介质成功启动SOC

2.加载第一部分引导代码

  • 判断完启动介质后,cpu会执行IROM中相应启动介质初始化代码,并从启动介质的特定扇区开始读取U-boot头部的少量代码(对于s5pv210来说是16k的代码,称其为BL1),然后放到至SRAM并执行。近年来的U-boot将这一小段代码称为“SPL”,并开始支持单独编译它
  • 为什么不直接加载整个U-boot呢?因为大部分SOC出于成本考虑,IROM做的不大,放不下整个U-boot
  • 总体来说由于各个SOC这一步大致相同,但可能都有细微的区别,具体要去参照手册。下面以s5pv210为例来说说对第一部分引导代码的一些细节要求:

当启动介质为SD/MMC时,第0个扇区必须保留,IROM中的代码会从第1个扇区开始读BL1,启动介质的空间分配如下图所示 
 
而其他的启动介质则是直接从第0个扇区存放BL1,IROM中的代码会也从第0个扇区开始读BL1,启动介质的空间分配如下图所示 

    • 然后,我们要把第一部分引导代码放到SRAM中的某个地址,通常SOC都会在代码头加上校验头,之所以要校验头是为了防止从启动介质读取时出错,一般是使用厂商的打包工具来添加校验头的,或者是在U-boot源码内添加了校验头。对于s5pv210来说,BL1的前16个字节是校验位,真正的代码是从D002_0010开始的。 

    • 至此,Soc主导的启动过程结束,接下来就靠SRAM中的第一部分引导代码来重定位了,接下来将加载整个U-boot,并引导内核镜像。详细流程可以去看U-boot的源码分析和U-boot引导内核流程分析.

    • 来源:https://www.veryarm.com/41643.html

常见SOC启动流程分析的更多相关文章

  1. u-boot启动流程分析(1)_平台相关部分

    转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的“board—>machine—>arch—> ...

  2. Netty 拆包粘包和服务启动流程分析

    Netty 拆包粘包和服务启动流程分析 通过本章学习,笔者希望你能掌握EventLoopGroup的工作流程,ServerBootstrap的启动流程,ChannelPipeline是如何操作管理Ch ...

  3. 【转】Netty 拆包粘包和服务启动流程分析

    原文:https://www.cnblogs.com/itdragon/archive/2018/01/29/8365694.html Netty 拆包粘包和服务启动流程分析 通过本章学习,笔者希望你 ...

  4. imx6 uboot启动流程分析

    参考http://blog.csdn.net/skyflying2012/article/details/25804209 这里以imx6平台为例,分析uboot启动流程对于任何程序,入口函数是在链接 ...

  5. Uboot启动流程分析(三)

    1.前言 在前面的文章Uboot启动流程分析(二)中,链接如下: https://www.cnblogs.com/Cqlismy/p/12002764.html 已经对_main函数的整个大体调用流程 ...

  6. Uboot启动流程分析(一)

    1.前言 Linux系统的启动需要一个bootloader程序,该bootloader程序会先初始化DDR等外设,然后将Linux内核从flash中拷贝到DDR中,最后启动Linux内核,uboot的 ...

  7. 【UEFI】---史上最全的X86平台启动流程分析(软硬结合)

    最近研究了下X86处理器的启动流程分析,相比于常见的ARM来说,X86平台启动流程真的复杂了很多,本次基于项目实际的两个问题入手,研究了包括以下几个部分的内容: 1. 从硬件角度看启动流程 2. 从软 ...

  8. u-boot启动流程分析(2)_板级(board)部分

    转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...

  9. Cocos2d-x3.3RC0的Android编译Activity启动流程分析

    本文将从引擎源代码Jni分析Cocos2d-x3.3RC0的Android Activity的启动流程,以下是具体分析. 1.引擎源代码Jni.部分Java层和C++层代码分析 watermark/2 ...

随机推荐

  1. 硕盟SM-H2V1 HDMI转VGA 笔记本台式主机HDMI转VGA显示器转接头

    硕盟SM-G2V1  HDMI转VGA高清转换器一款采用优质芯片的HDMI转VGA转换器,快速传输众享1080P的高清画质显示,而且HDMI转VGA高清转换器,采用24k镀金工艺,耐磨.耐腐蚀性强,这 ...

  2. java版gRPC实战之六:客户端动态获取服务端地址

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 1137. 第 N 个泰波那契数

    1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下: T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2 给 ...

  4. url传参和解决中文乱码

    在A页面把参数传给B页面 index.html?name="张三" 在B页面接收(js) function getQueryString(name) { var result = ...

  5. Vue3的新特性及相关的Composition API使用

    首先 创建项目 Vue3 Vue3 相较于Vue2 的6大亮点: 1 性能快. 2 按需编译 体积更小 3 提供了组合API 类似于react 的React Hooks 4 更好的Ts支持 5 暴露了 ...

  6. PHP设计模式之原型模式

    原型模式其实更形象的来说应该叫克隆模式.它主要的行为是对对象进行克隆,但是又把被克隆的对象称之为最初的原型,于是,这个模式就这样被命名了.说真的,从使用方式来看真的感觉叫克隆模式更贴切一些. Gof类 ...

  7. mysql5.5根据条件进行排序查询 TP5

    用到了 order by if 和 count 使用的是TP5.0 $sql = Db::name('teacher') ->alias('t') ->join('user u', 'u. ...

  8. google插件网页播放mp4代码

    <script src="http://html5media.googlecode.com/svn/trunk/src/html5media.min.js"></ ...

  9. Java面向对象系列(10)- 什么是多态

    多态 即同一方法可以根据发送对象的不同而采取不同的行为方式 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多 多态存在的条件 有继承关系 子类重写父类方法 父类引用指向子类对象 注意:多态是 ...

  10. javascript 面向对象 模块

    * module 完成函数 createModule,调用之后满足如下要求:1.返回一个对象2.对象的 greeting 属性值等于 str1, name 属性值等于 str23.对象存在一个 say ...