一、CPU上电启动

0、引入

CPU上电后如何从flash上获取程序并执行,不同厂家不同型号CPU也往往不同,但是大体是相同的:从flash上读取。从flash上读取是最传统和常规的方式,也是项目会采用的方式。

(1)各厂家的芯片如何从flash上读取程序来运行?

上电时根据某些GPIO的电平,来选择进入到不同模式,如启动还是烧写?选择从哪种flash启动,如nor,nand,emmc。

(2)对于imx6ul,有两个需要关注的启动电平。

一个是启动模式:是烧写还是启动。一个是从哪里启动,是nor,nand,emmc?

这些如何实现的我们无需关注,都是硬件固话好的模式,我们只需要知道,当我们想烧写,或者想启动的时候如何去配置这些引脚的电平状态即可。而什么样的电平决定了什么样的启动状态,在手册中有详细说明。

IMX6ULLRM.pdf Chapter 8 System Boot

对于我们的开发板,我们需要关注:

1、启动模式

imx6ul有三种启动模式,是烧写01(USB下载),或者是10内部引导启动(从flash启动)。其他的可以不关注。

2、从什么flash启动

用户根据不同项目,往往需求不同,有公司选择nor,有选择nand,有emmc启动的。为了更好的适合更多用户,芯片厂家往往会让自家芯片支持更多的flash启动。这里我们重点关注nand或者emmc,这是当前的主流。

IMX6ULLRM.pdf Chapter 5中 Boot Device Select,上电后,这些特殊引脚,默认为输入状态,CPU通过获取到这些输入引脚的电平,选择对应的flash进行启动。

同时,imx6u可以通过这些引脚告诉CPU更丰富的信息,从而更高效的实现启动。

EMMC启动都设置了哪些GPIO引脚:

二、imx6ul启动程序

用户的需求是,上电从flash启动,那么CPU通过上面的硬件配置获取了信息,那么如果启动执行程序?

imx6ul内部有一块boot ROM,这部分是CPU设计时实现的,上电后会首先运行。boot ROM会去读取上面设置好的硬件信息。

然后读取程序到内存中开始运行,因此boot ROM需要做:

  • CPU初始化
  • 时钟初始化
  • 内存初始化
  • 存储设备初始化
  • 从flash加载程序并执行

1、boot ROM从flash加载程序的过程。

一般的,很多选手都学习过S3C2400 一款十分经典,适合初学的平台,目前虽已停产多年,但学习资料,很多。它的实现方式是,CPU固定的从flash上读取4K大小代码,然后运行,运行时通过此4K代码,完成代码重定向到内存,然后在内存中运行。

imx6ul是boot ROM完成从flash到内存中的操作,所以boot ROM很重要的就是要知道,从哪里拷贝程序,程序有多大,从哪里拷贝到哪里。而这些信息不再通过外部硬件来告知boot ROM,而是通过存储在flash起始的一片位置,boot ROM获取后,在完成后续操作。因此,烧写到flash上的映像文件,出了程序业务本身,还需要包含一些额外的信息会boot ROM,用于启动前期工作。

那么包含哪些信息呢?不同厂家不同,我们针对imx6ul为例。

以上表明了从那里找到有用数据。

typedef struct {ivt_header_t header;uint32_t entry;//程序链接地址uint32_t reserved1;uint32_t dcd_ptr;//内存中DCD数据地址uint32_t boot_data_ptr;//内存中boot data数据地址(整个image所在地址)uint32_t self;//内存中ivt地址uint32_t csf;uint32_t reserved2;
} flash_header_v2_t;

boot_data_ptr指明了boot date所在地址,里面是一个结构体如下:

typedef struct {uint32_t start;//整个映像文件在内存中的起始地址uint32_t size;//大小uint32_t plugin;
} boot_data_t;

boot_data_t指明了复制到哪里去,复制多大。

【imx6ul】imx6ul上电boot rom启动过程相关推荐

  1. esp启动是什么感觉_第九章 ESP32上电后的启动过程

    目标 · 了解app_main之前ESP32干了什么 · 了解ESP32复位原因 ESP32启动总流程(原文) ESP32开发程序中有且只能有一个app_main函数,该函数是用户程序的入口,相当于其 ...

  2. BOOT ROM 初始化内容、启动设备、镜像烧写

       目录 1 启动方式 1.1 串行下载 1.2 内部 BOOT 模式 1.3 BOOT ROM 初始化内容 2 启动设备 3 镜像烧写 3.1 IVT 和 Boot Data 数据 3.2 DCD ...

  3. ARM(IMX6U)裸机之I.MX6ULL启动头文件详解(内部BOOT ROM、IVT + Boot data + DCD + led.bin)

    参考:Linux之ARM(IMX6U)裸机之I.MX6ULL镜像烧写以及启动头文件的详解 作者:一只青木呀 发布时间: 2020-08-09 17:10:00 网址:https://blog.csdn ...

  4. [Spring Boot] 2. Spring Boot 启动过程定制化

    在上一篇文章中,从源码角度介绍了Spring Boot的启动过程.启动的代码虽然只有短短的一行,但是背后所做的工作还真不少,其中有一些可以定制化的部分,主要分为以下几个方面: 初始化器(Initial ...

  5. ARM S5PV210的启动过程

    一.内存 SRAM 静态内存 特点就是容量小.价格高,优点是不需要软件初始化直接上电就能用. DRAM 动态内存 特点就是容量大.价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用. 单片 ...

  6. centos7 启动流程图_Linux启动过程详解

    Linux启动过程详解 作者:江远航 一.启动流程图如下 图1 Linux启动流程图 BIOS ---> MBR ---> Kernel---> Init 二.Linux启动顺序 一 ...

  7. 实践理解计算机启动过程

    就是烧个系统.小小工作,纸上得来终觉浅,绝知此事要躬行. 0)预备工作: 硬条件:板子一个,连线若干.连起来. 软条件:终端软件(SecureCRT).板子的USB驱动(使用其驱动不能识别的USB设备 ...

  8. Analyzing the Linux boot process-分析Linux启动过程

    本文翻译自Analyzing the Linux boot process. 箴言:了解运行良好的系统是将来处理不可避免的故障的很好准备 开源软件领域中流行的最为古老笑话:"the code ...

  9. Spring Boot启动过程(二)

    书接上篇 该说refreshContext(context)了,首先是判断context是否是AbstractApplicationContext派生类的实例,之后调用了强转为AbstractAppl ...

最新文章

  1. javascript删除,添加元素
  2. [原]请留心asp:Image控件中的ImageUrl属性
  3. python自动化办公:邮件篇 (定时邮件问候女票so easy)
  4. 苹果平板怎么卸载软件_苹果TF签名丨怎么卸载testflight下载的应用?
  5. mysql select 反选_JQuery实现全选、全不选和反选功能
  6. django集成原有数据库
  7. 消息系统Kafka介绍
  8. Mac系统Cornerstone安装和使用说明(最佳的SVN管理工具)
  9. 《雍正皇帝·九王夺嫡》物质文化专有词泰译研究(二)
  10. yarn集群下启动spark错误WARN:66 - Neither spark.yarn.jars nor spark.yarn.archive is set
  11. golang 定时任务处理
  12. 迁移学习在医学影像学中的应用
  13. inlinehook 看这一篇
  14. 【bat】验证是否安装某个软件
  15. 重新发现科技与人文的互动
  16. react native 实现扫描条形码功能(react-native-camera)
  17. 开源安全审计系统漏洞扫描工具lynis
  18. QA 特辑 | 百万员工不上班也能领全勤奖的原因都在这里了!
  19. faric区块链浏览器搭建
  20. PoC 项目盘点:MASS 与 Filecoin、Spacemesh、Chia、Burst 对比

热门文章

  1. 计算机能安装几个硬盘,一台电脑最多能接多少个硬盘?
  2. VUE3+Vite开发网易云音乐 Day1 后端环境搭建
  3. 电脑任务栏图标为白色解决方法
  4. win7语言文件夹c盘什么位置,win7桌面上的文件 在c盘哪个目录
  5. 这几本值得你一看再看的程序员素养必备好书
  6. 服务器自带软件怎么样卸载,告别卸载软件难 四大方法轻松搞定
  7. 论文阅读:Deep Residual Shrinkage Networksfor Fault Diagnosis
  8. 四小时学python爬虫爬取信息系列(第一天)
  9. 电动汽车换电池要多少钱?各品牌电池更换费用大起底!
  10. 上海航芯|推出基于ACX200T的V2X解决方案