常见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 ...
随机推荐
- vue el-transfer新增拖拽排序功能---sortablejs插件
<template> <!-- target-order="unshift"必须设置,如果不设置的话后台穿的value值得顺序会被data重置 - --> ...
- Linux学习笔记--快捷键
桌面 ALT+空格 打开窗口菜单 ALT+F1 聚焦到桌面左侧任务导航栏,可按上下键导航 ALT+F2 运行命令 ALT+F4 关闭窗口 ALT+TAB 切换程序窗口 PRINT 桌面截图 S ...
- 删除数组中指定的元素,然后将后面的元素向前移动一位,将最后一位设置为NULL 。 String[] strs={“aaa”,”ccc”,”ddd”,”eee”,”fff”,”ggg”}; 指定删除字符串“ccc”,把后的元素依次向前移动!!!
public static void main(String[] args) { int temp = -1; String[] strs = {"aaa", "ccc& ...
- pycharm的常规使用
1.修改当前项目的Py版本,是py2还是py3 pycharm-->settings-->选中要运行的项目-->选择py版本(如果你两个py版本都装在本机的话) 2.显示行数 在每行 ...
- Nginx总结(九)Nginx服务器高性能优化的配置--轻松实现10万并发访问量
前面讲了如何配置Nginx虚拟主机,如何配置服务日志等很多基础的内容,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category ...
- 概述 .NET 6 ThreadPool 实现
目录 前言 任务的调度 基本调度单元 IThreadPoolWorkItem 实现类的实例. Task 全局队列 本地队列 偷窃机制 Worker Thread 的生命周期管理 线程生命注入实验 .N ...
- C#导出数据—使用Word模板
前言 本文主要介绍C#使用标签替换的方法导出数据,导出的数据模板使用Word文档. 模板建立 首先创建一个Word文档,然后建立一个基础模板.然后将上方菜单切换到插入菜单. 然后在想填充数据的地方添加 ...
- Jmeter导出测试报告
测试数据概述 jemter导出数据 另存为导出csv文件 命令行导出 测试报告的作用: 反馈结果 复现问题,所以需要写明测试场景.数据
- struts2 使用ajax进行图片上传
第一步:引入一个插件 jquery.form.js /*! * jQuery Form Plugin * version: 3.36.0-2013.06.16 * @requires jQuer ...
- 深入浅出WPF-03.XAML语法
2 XAML语法 树形结构,我们将整个XAML的结构想象成一棵树,我们从树的顶部向下看,形成俯视图.最上面的叶子节点会覆盖父节点,同级的子节点,后面的(也就是树的最上面)会覆盖前面的.覆盖包含了形状( ...