常见SOC启动流程分析
本文以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启动流程分析的更多相关文章
- u-boot启动流程分析(1)_平台相关部分
转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的“board—>machine—>arch—> ...
- Netty 拆包粘包和服务启动流程分析
Netty 拆包粘包和服务启动流程分析 通过本章学习,笔者希望你能掌握EventLoopGroup的工作流程,ServerBootstrap的启动流程,ChannelPipeline是如何操作管理Ch ...
- 【转】Netty 拆包粘包和服务启动流程分析
原文:https://www.cnblogs.com/itdragon/archive/2018/01/29/8365694.html Netty 拆包粘包和服务启动流程分析 通过本章学习,笔者希望你 ...
- imx6 uboot启动流程分析
参考http://blog.csdn.net/skyflying2012/article/details/25804209 这里以imx6平台为例,分析uboot启动流程对于任何程序,入口函数是在链接 ...
- Uboot启动流程分析(三)
1.前言 在前面的文章Uboot启动流程分析(二)中,链接如下: https://www.cnblogs.com/Cqlismy/p/12002764.html 已经对_main函数的整个大体调用流程 ...
- Uboot启动流程分析(一)
1.前言 Linux系统的启动需要一个bootloader程序,该bootloader程序会先初始化DDR等外设,然后将Linux内核从flash中拷贝到DDR中,最后启动Linux内核,uboot的 ...
- 【UEFI】---史上最全的X86平台启动流程分析(软硬结合)
最近研究了下X86处理器的启动流程分析,相比于常见的ARM来说,X86平台启动流程真的复杂了很多,本次基于项目实际的两个问题入手,研究了包括以下几个部分的内容: 1. 从硬件角度看启动流程 2. 从软 ...
- u-boot启动流程分析(2)_板级(board)部分
转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...
- Cocos2d-x3.3RC0的Android编译Activity启动流程分析
本文将从引擎源代码Jni分析Cocos2d-x3.3RC0的Android Activity的启动流程,以下是具体分析. 1.引擎源代码Jni.部分Java层和C++层代码分析 watermark/2 ...
随机推荐
- java原码反码补码以及位运算
原码, 反码, 补码的基础概念和计算方法. 对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式. 1. 原码 原码就是符号位加上真值的绝对值, 即 ...
- qsc oj-17 喵哈哈村的排队
http://qscoj.cn/problem/17/ 喵哈哈村的排队 描述 有一堆喵哈哈村的村民们在排队,他们从队列的尾部开始标号,标号为1的村民站在最后面,标号为n的村民站在队列的最前面,而且每个 ...
- MapReduce原理深入理解(一)
1.MapReduce概念 1)MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. 2)MapReduce是分布式运行的,由两个阶段组成:Map和R ...
- PHP垃圾回收机制的一些浅薄理解
相信只要入门学习过一点开发的同学都知道,不管任何编程语言,一个变量都会保存在内存中.其实,我们这些开发者就是在来回不停地操纵内存,相应地,我们如果一直增加新的变量,内存就会一直增加,如果没有一个好的机 ...
- 如何创建 Office LTSC 2021 VL(批量许可)版本的安装 ISO
Office LTSC 2021 发布 2021 年 9 月 16 日,微软正式发布了支持 Office 2021 的部署工具(Office Deployment Tool),这意味着 Office ...
- Django边学边记—新手Django建项目各流程细节
一.准备虚拟环境 1)安装 virtualenv pip install virtualenv 2)virtualenvwrapper pip install virtualenvwrapper-wi ...
- javascript 高阶函数 实现 AOP 面向切面编程 Aspect Oriented Programming
AOP的主要作用是吧一些跟核心业务逻辑模块无关的功能 -日志统计, 安全控制, 异常处理- 抽离出来, 再通过"动态织入"的方式掺入业务逻辑模块中. 这里通过扩展Function. ...
- 最详细STL(一)vector
vector的本质还是数组,但是可以动态的增加和减少数组的容量(当数组空间内存不足时,都会执行: 分配新空间-复制元素-释放原空间),首先先讲讲vector和数组的具体区别 一.vector和数组的区 ...
- MD5加密算法的实现方式
MD5加密算法 MD5在我们平时项目中运用比较多,尤其是在用户注册的时候,密码存入数据库时可以利用MD5算法加密后存入,可以保证数据的安全性. 代码实现 public final class Md5U ...
- 4.自定义类加载器实现及在tomcat中的应用
了解了类加载器的双亲委派机制, 也知道了双亲委派机制的原理,接下来就是检验我们学习是否扎实了,来自定义一个类加载器 一. 回顾类加载器的原理 还是这张图,类加载器的入口是c++调用java代码创建了J ...