常见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引导内核流程分析

常见SOC启动流程分析相关推荐

  1. bootloader启动流程分析

    bootloader启动流程分析 1.Bootloader的概念和作用 Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序.在完成对系统的初始化任务之后,它会将Flash中 ...

  2. 基于IMX6Q的uboot启动流程分析(3):_main函数之relocate_code与board_init_r

    基于IMX6Q的uboot启动流程分析(1):uboot入口函数 基于IMX6Q的uboot启动流程分析(2):_main函数之board_init_f 基于IMX6Q的uboot启动流程分析(3): ...

  3. Android系统开机到Launcher启动流程分析

    本文基于Android10.0的源码. 由于google团队在对framework层代码进行大量重构,所以代码变动还是挺大的. 常见基础问题: SystemServer系统服务进程是如何创建的?Lau ...

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

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

  5. Android12 应用启动流程分析

    最近因为一些业务上的需求,需要梳理 Android 应用的启动链路,从中寻找一些稳定的锚点来实现一些特殊的功能.本文即为对应用端启动全过程的一次代码分析记录. 注: 本文所分析的代码基于 AOSP a ...

  6. Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(中)

    目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.调用后处理器 2.1.调用在上下文中注册为beanFactory的后置处理器 2.2.invokeBeanFactoryPostP ...

  7. Alian解读SpringBoot 2.6.0 源码(六):启动流程分析之创建应用上下文

    目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.创建应用上下文 2.1.初始化入口 2.2.初始化AbstractApplicationContext 2.3.初始化Generi ...

  8. Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(下)

    目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.初始化特定上下文子类中的其他特殊bean 2.1.初始化主体资源 2.2.创建web服务 三.检查监听器bean并注册它们 四.实 ...

  9. Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(上)

    目录 一.背景 1.1.run方法整体流程 1.2.刷新的整体调用流程 1.3.本文解读范围 二.准备刷新 2.1.准备刷新的流程 2.2.初始化上下文环境中servlet相关属性源 2.3.校验re ...

最新文章

  1. 聊聊服务治理中的路由设计
  2. 卧槽!新基建背景下,这些姿势架构师必须懂!
  3. c语言用链表的方式实现多项式加减,如何实现C语言单链表多项式相加的操作
  4. 上班请病假还得看AI脸色,10秒钟判别真假,打工人太难了
  5. Linux下内存泄露工具
  6. ibernate ID生成策略 小知识
  7. oracle 表查询(二)
  8. OpenCasCade网格的显示
  9. 5个很牛的黑科技网站分享
  10. PAT练习 人口普查
  11. librosa.stft的输出
  12. 练习4闭合导线平差计算
  13. html怎么让图片变灰色,css如何使图片变灰
  14. 06-Python类和对象
  15. 数字乡村建设浅谈(一):可行性、难点、思考
  16. 计算机简单的办公操作,电脑操作掌握这15种快捷键技巧,你就是办公高手!
  17. [附源码]计算机毕业设计springboot基于微信小程序的网络办公系统
  18. 微信小程序video默认不播放且显示视频第一帧
  19. python输入中文教程_如何用Python从头开始实现一个中文拼音输入法?
  20. 山西财经大学计算机专业考试题,计算机复习资料山西财经大学版.doc

热门文章

  1. 绵阳现在买房怕房价跌,不买又怕房价涨!到底是跌是涨?
  2. fzoj Problem 2190 非提的救赎 【单调栈】
  3. iPad当Linux电脑显示器,效率App:让iPad变成你电脑的第二显示屏,相当实用!
  4. 游戏开发物语方案点数分配_游戏开发物语攻略 游戏开发物语新手须知技巧
  5. http://zaojiasys.jianshe99.com 建造师数据泄漏,可以查看全部所有人的信息!
  6. 计算机三级嵌入式学习笔记(三)
  7. 【等保实践】等级保护仅仅是合规吗?
  8. 难得起了一个大早^_^
  9. write、read
  10. Python绘制点线