CPU上电后加载程序的流程 | 基于RK3399

芯片上电解复位之后执行的第一段程序,在芯片中称之为Bootrom loader。这部分程序在芯片制造过程中固化到其内部的ROM空间,具备只读属性,在实际使用过程中无法修改这部分内容,这部分程序的知识产权也仅归属于芯片公司所有。其实,你也可以将Bootrom loader称之为固件。

75e700bf7d9e549f00f2c4e9b806179d.png

对于ARM架构的处理器而言,芯片上电解复位后的PC通常是指向0x000000000xffff0000地址,也就是说,它会去该地址处取第一条指令、译码、执行。CPU能支持的启动模式通过硬件拨码的方式告知CPU,CPU上电解复位后内部逻辑会识别bootmode。依据识别出的bootmode决定去何处取第一条指令。假设解析bootmode后发现并不是从bootrom启动,而是从其他存储外设启动,例如norflashnandflashqspiflash等,这些外设就会变为CPU的一级启动设备,而CPU内部逻辑也会将这些启动外设的地址空间进行remap处理。

RK3399内部包含4个ARM cortex-A53以及2个cortex-A72,典型的cluster结构,cortex-A53作为小核而cortex-A72作为大核。当系统上电解复位之后,cortex-A53的core0作为第一个启动的核心,执行0xffff0000处的Bootrom loader程序。

其完整的启动流程如下图所示:

+--------+----------------+----------+-------------+---------+
| Boot   | Terminology #1 | Actual   | Rockchip    | Image   |
| stage  |                | program  |  Image      | Location|
| number |                | name     |   Name      | (sector)|
+--------+----------------+----------+-------------+---------+
| 1      |  Primary       | ROM code | BootRom     |         |
|        |  Program       |          |             |         |
|        |  Loader        |          |             |         |
|        |                |          |             |         |
| 2      |  Secondary     | U-Boot   |idbloader.img| 0x40    | pre-loader
|        |  Program       | TPL/SPL  |             |         |
|        |  Loader (SPL)  |          |             |         |
|        |                |          |             |         |
| 3      |  -             | U-Boot   | u-boot.itb  | 0x4000  | including u-boot and atf
|        |                |          | uboot.img   |         | only used with miniloader
|        |                |          |             |         |
|        |                | ATF/TEE  | trust.img   | 0x6000  | only used with miniloader
|        |                |          |             |         |
| 4      |  -             | kernel   | boot.img    | 0x8000  |
|        |                |          |             |         |
| 5      |  -             | rootfs   | rootfs.img  | 0x40000 |
+--------+----------------+----------+-------------+---------+

RK3399的二级启动设备支持SPI NOR FLASHSPI NAND FLASHeMMCSD以及USB load,可以将二级启动程序放置于上述静态存储设备中,RK3399通过读取ID BLOCK信息决定当前启动程序是否有效。

6aeeae19db981cea33db5a9f83624560.png

RK3399提供了镜像文件更新的软件工具AndroidTool.exe,该工具可以更新二级启动程序及之后的所有镜像。

32591d1cebead936002847bd61d8365e.png

对于如何进入到固件更新模式,这取决于板卡的设计方式,例如我们手中的这块板子,它进入固件更新方式如下:

使用 Type-C 线连接开发板和主机,按住 recover 键然不要松开然后按 reset 键系统复位,大约两秒后,松开 recover 键。系统将提示发现 loader 设备。


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

2c12252c163e6e4308c5514190b0f62a.png

嵌入式Linux

微信扫描二维码,关注我的公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IPv6与IPv4的区别

Technorati 标签: Hank--network porter■第一个就不说哈,32bit直接升级到128bit了。 从2的32次方升级到2的128次方了,地球上的每一粒沙子都可以分到一个IP地址。这个是IPv6最拉风的地方. ■在IPv6中,路由器不能用自动配置机制来配置接口&…

在腾讯的这半年

晚上和同事聚餐后,我和李总坐车回公司,李总在电话里面和大家开会,然后说着各种让大家帮忙的话,我看着窗外密密麻麻的车辆——想着,这一年又要过去了。我是有总结的习惯的,不管是做事情还是生活,…

mysql数据删除后无法恢复数据恢复_Mysql数据库delete删除后数据恢复报告

原标题:Mysql数据库delete删除后数据恢复报告数据库环境部署与故障原因:本次恢复的数据库安装在客户本地服务器上,服务器操作系统为windows2008 r2 。在当前环境内安装有mysql5.6单实例,引擎类型为innodb,表内数据存储…

Linux启动流程 | kernel执行第一个init应用程序的实现原理

1. 概述Linux系统启动过程中通过init_task创建0号idle进程。然后通过kernel_thread创建1号init进程。创建该进程时通过系统调用,在内核空间执行用户空间的/sbin/init程序,通过该程序产生出shell,并依赖init衍生出其他进程。通过top命令查看当…

poj1484

简单题 View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 25int n, m, blow, power[maxn];bool on[maxn];void out(int a){int b m - a - 1;int x;for (int i 0; i < b; i…

西安下雪了,做了一个室内温度计

摘要&#xff1a;最近各地都在下雪&#xff0c;湖南湖北西安都下雪了。养热带花草和宠物的同学们需要多留意室内温度。下面教一个实用性强、制作简单的温度计。使用DS18B20温度传感器和OLED模块构建&#xff0c;这里使用的开发板是Arduino。本项目的源码和3D文件在后台回复&…

oci mysql_Oracle常用的OCI函数

欢迎进入Oracle社区论坛&#xff0c;与200万技术人员互动交流 >>进入 sword OCIEnvInit ( OCIEnv **envhpp, ub4 mode, size_t xtramemsz, dvoid **usrmempp ); 注&#xff1a; 在8i以后&#xff0c;可用OCIEnvCreate一个函数就可以初始化环境了&#xff0c;相当于OCIIni…

android mysql 图片_android sqlite添加图片到数据库

sqlite图片是怎么储存的呢&#xff1f;其实是二进制的方式存储的blob代表使用二进制储存 (更多类型参考&#xff1a;数据库简介)在创建表的地方,VALUE_PIC代表存储图片字段&#xff0c;blob代表这个字段是以二进制储存的。/*创建表语句 语句对大小写不敏感 create table 表名(字…

MCU为什么内部不集成晶振

01MCU为什么不集成晶振本文将用STM32代替MCU。原因1&#xff1a;早些年&#xff0c;芯片的生产制作工艺也许还不能够将晶振做进芯片内部&#xff0c;但是现在可以了。这个问题主要还是实用性和成本决定的。实用性&#xff1a;如果封装进入STM32内部&#xff0c;不利于不同客户更…

cad中怎么随意移动图形_cad中怎么随意移动图形_绘制CAD图纸的过程中CAD快捷键失灵了怎么办?...

很多人在使用笔记本绘制CAD图纸的过程中&#xff0c;当用到CAD快捷键的时候会发现部分CAD快捷键无法正常使用&#xff0c;比如按F8后并没有切换成正交状态&#xff0c;而是出来了连接投影仪的选项&#xff0c;而且其他的快捷键也无法使用了&#xff0c;如下图所示。在以前老的笔…

GitHub的嵌入式开源项目

来源&#xff1a;嵌入式大杂烩关于GitHub&#xff0c;可能很多人误以为这是互联网人的专属&#xff0c;其实并不是&#xff0c;那上面嵌入式相关的开源项目是有很多的。现分享一些高星开源项目&#xff08;像RT-Thread、AWTK等大家都熟知的就不介绍了&#xff09;&#xff1a;A…

项目开发日志:Build AssetBundle——SpriteAtlas(已解惑)

项目信息&#xff1a;平台-AndroidUnity编辑器版本-2018.2.5f1状况1&#xff1a;真机状况下引用到图集下的sprite的UI显示出错。&#xff08;图集被打成AB包且勾选了Include in Build&#xff09;.在我们的测试下发现了以下两个解决方案&#xff1a;&#xff08;当然我觉得第二…

Sangfor上网行为管理单点登录配置

单点登录功能介绍&#xff1a; 当用户成功登录到第三方认证服务器时&#xff0c;自动通过AC的认证&#xff0c;而无需再次输入用户名和密码。 优点&#xff1a; 用户只需要输入一次账号和密码&#xff0c;即可自动通过AC的认证&#xff0c;避免账号和密码的重复输入&#xff0c…

教你精确计算 I2C 上拉电阻阻值

I2C 总线能挂多少设备&#xff1f;理论上&#xff1a;7-bit address &#xff1a;2 的 7 次方&#xff0c;能挂 128 个设备。10-bit address &#xff1a;2 的 10 次方&#xff0c;能挂 1024 个设备。当然&#xff0c;要把预留设备地址去除&#xff0c;7 bit 协议规定了 8个预留…

原型设计+用户规格说明书

用户规格说明书 作业链接&#xff1a;https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具&#xff1a; 墨刀 原型模型链接&#xff1a;https://modao.cc/app/6a5fcc03e409ffe37cfcdb9cb06914271744f131 学号1&#xff1a;362 何永康 学号2&#xff…

什么集成mysql_mysql集成部署

经常听说mysql数据库是集成在系统中&#xff0c;也一直不太明白集成的概念。今天才明白集成的概念就是将mysql所有的文件放到一个文件夹下放到系统中&#xff0c;也就是将mysql采用目录迁移部署的方式进行安装。在上一篇研究了mysql的数据存储结构之后&#xff0c;也研究了mysq…

一文让你了解RT-Thread

前言要学习一项新知识或新的技能&#xff0c;首先要对其有个初步了解&#xff0c;然后再逐步学习如何运用它。本文作为快速入门 RT-Thread 系列文章的第一篇&#xff0c;首先介绍一下&#xff0c;我当时是如何学习 RT-Thread 的&#xff0c;以及参与官方组织的活动的情况&#…

创建python虚拟环境

一 windows下如何构建虚拟环境如果系统中只有python2或只有python3&#xff0c;可以直接打开命令行&#xff0c;输入pip install virtualenv 来下载创建虚拟环境的包(如果提示pip不是内部命令&#xff0c;把python文件下的Scripts的文件路径加入计算机环境变量即可可) 1. 选择一…

电源开关上的 | 和 O 究竟代表了什么?

大家好,我是写代码的篮球球痴&#xff0c;转发张老师的一篇文章。几乎所有的电器、灯具和插座上只要带有电源开关必然会出现“|”和“O”两个符号。如果只看符号判断&#xff0c;“|”和“O”到底代表什么含义呢&#xff1f;能分清&#xff1a;哪个是电路联通&#xff0c;哪个是…