常见SOC启动流程分析
常见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启动流程分析相关推荐
- bootloader启动流程分析
bootloader启动流程分析 1.Bootloader的概念和作用 Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序.在完成对系统的初始化任务之后,它会将Flash中 ...
- 基于IMX6Q的uboot启动流程分析(3):_main函数之relocate_code与board_init_r
基于IMX6Q的uboot启动流程分析(1):uboot入口函数 基于IMX6Q的uboot启动流程分析(2):_main函数之board_init_f 基于IMX6Q的uboot启动流程分析(3): ...
- Android系统开机到Launcher启动流程分析
本文基于Android10.0的源码. 由于google团队在对framework层代码进行大量重构,所以代码变动还是挺大的. 常见基础问题: SystemServer系统服务进程是如何创建的?Lau ...
- u-boot启动流程分析(1)_平台相关部分
转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的"board->machine->arc ...
- Android12 应用启动流程分析
最近因为一些业务上的需求,需要梳理 Android 应用的启动链路,从中寻找一些稳定的锚点来实现一些特殊的功能.本文即为对应用端启动全过程的一次代码分析记录. 注: 本文所分析的代码基于 AOSP a ...
- Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(中)
目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.调用后处理器 2.1.调用在上下文中注册为beanFactory的后置处理器 2.2.invokeBeanFactoryPostP ...
- Alian解读SpringBoot 2.6.0 源码(六):启动流程分析之创建应用上下文
目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.创建应用上下文 2.1.初始化入口 2.2.初始化AbstractApplicationContext 2.3.初始化Generi ...
- Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(下)
目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.初始化特定上下文子类中的其他特殊bean 2.1.初始化主体资源 2.2.创建web服务 三.检查监听器bean并注册它们 四.实 ...
- Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(上)
目录 一.背景 1.1.run方法整体流程 1.2.刷新的整体调用流程 1.3.本文解读范围 二.准备刷新 2.1.准备刷新的流程 2.2.初始化上下文环境中servlet相关属性源 2.3.校验re ...
最新文章
- 聊聊服务治理中的路由设计
- 卧槽!新基建背景下,这些姿势架构师必须懂!
- c语言用链表的方式实现多项式加减,如何实现C语言单链表多项式相加的操作
- 上班请病假还得看AI脸色,10秒钟判别真假,打工人太难了
- Linux下内存泄露工具
- ibernate ID生成策略 小知识
- oracle 表查询(二)
- OpenCasCade网格的显示
- 5个很牛的黑科技网站分享
- PAT练习 人口普查
- librosa.stft的输出
- 练习4闭合导线平差计算
- html怎么让图片变灰色,css如何使图片变灰
- 06-Python类和对象
- 数字乡村建设浅谈(一):可行性、难点、思考
- 计算机简单的办公操作,电脑操作掌握这15种快捷键技巧,你就是办公高手!
- [附源码]计算机毕业设计springboot基于微信小程序的网络办公系统
- 微信小程序video默认不播放且显示视频第一帧
- python输入中文教程_如何用Python从头开始实现一个中文拼音输入法?
- 山西财经大学计算机专业考试题,计算机复习资料山西财经大学版.doc
热门文章
- 绵阳现在买房怕房价跌,不买又怕房价涨!到底是跌是涨?
- fzoj Problem 2190 非提的救赎 【单调栈】
- iPad当Linux电脑显示器,效率App:让iPad变成你电脑的第二显示屏,相当实用!
- 游戏开发物语方案点数分配_游戏开发物语攻略 游戏开发物语新手须知技巧
- http://zaojiasys.jianshe99.com 建造师数据泄漏,可以查看全部所有人的信息!
- 计算机三级嵌入式学习笔记(三)
- 【等保实践】等级保护仅仅是合规吗?
- 难得起了一个大早^_^
- write、read
- Python绘制点线