当前位置: 首页 > news >正文

【SoC FPGA】HPS启动过程

SoC HPS启动流程

    • Boot ROM
    • Preloader
    • Boot Loader

HPS的启动是一个多阶段的过程,每一个阶段都会完成对应的工作并且将下一个阶段的执行代码引导起来。每个阶段均负责加载下一个阶段。第一个软件阶段是引导 ROM,引导 ROM 代码查找并且执行称为预加载器的第 2 个阶段软件。预加载器如果找到下一个阶段软件,那么对其执行。预加载器和接下来的引导阶段 ( 如果存在 )统称为用户软件。用户软件位于 HPS 的外部并且由用户提供。引导 ROM 代码仅知道预加载器,但不知道接下来任何可能存在的引导阶段。

当处理器从复位(比如上电)释放并且CPU执行内部引导ROM(Boot ROM)中的复位异常处理代码时(通过指定复位向量指定Boot ROM区域实现自动执行Boot ROM),HPS开始进行引导;当引导ROM(Boot ROM)中的代码跳到引导软件的下一个阶段时,引导程序结束。引导软件的下一个阶段被称为预加载器,预加载器可以定制并且通常存储在HPS外部的基于闪存的非易失性存储器。
图1 典型引导流程
处理器可以从以下资源进行引导:

  • NAND闪存
  • SD/MMC闪存
  • Quad SPI闪存
  • FPGA内核逻辑

Boot ROM

Boot ROM是HPS内核上一段ROM中固化的可执行程序,作用是系统复位之后,执行引导preloader并且将CPU使用权交给preloader进行后续工作的过程。
Boot ROM完成的具体工作还有:

  • 使能指令缓存,branch predictor,浮点单元,NEON 向量单元
  • 设定看门狗定时器,Boot ROM保留适用
  • 根据CLKSEL设定配置MainPLL和外设PLL
  • 根据BOOTSEL设定配置I/O引脚的复用(此处只是完成了QSPI or SPI Flash or SD/MMC controller 的引脚的复用,更多的引脚的复用需要根据preloader才能够完成设定)
  • 初始化FLASH Controller 到默认设置

图2 Boot ROM执行过程
Boot ROM引导的preloader来源分为3类:

  1. 片上RAM热启动(对应图2框图①)
    如果之前执行过一次preloader,preloader会留在on-chip RAM中,按下热复位按键后,会首先选择从on-chip RAM启动,此过程具有最高优先级,但是从on-chip RAM 启动时会对遗留的preloader代码进行CRC校验(具体是否校验用户可以通过warmramgrp配置决定),校验成功才会执行。这样做防止了用户对on-chip RAM里的内容进行更改!如校验失败,会选择从Flash中启动preloader(对应图2框图③)。
  2. 从FPGA部分冷启动(对应图2框图②)
    此方式具有第二优先级,如果用户设定了bootsel从FPGA启动,则会等待FPGA配置成功(通过FPGA manager获取FPGA的状态),HPS会通过 HPS-to-FPGA bridge执行位于 0xC0000000(相对于HPS-to-FPGAbridge偏移地址为0)的memory中的指令。
  3. 从FLASH存储器冷启动(对应图2框图④)
    如果在找不到preloader的话,则会检验FPGA处的回调镜像(callback image),等待复位。对应图2框图⑤、⑥。
    说明:
    (1)只有冷启动才会选择从FPGA 引导
    (2)不论热启动还是FPGA冷启动,如不成功都会进入到了红色框的QSPI启动中
    (3)图2框图②中的yes 和 no 由bootsel 决定,图2框图③、④中最后具体是使用哪个FLASH存储器也由bootsel管脚决定。
    补充:
    (1)以上的冷、热分别表示上电时和已上电。
    (2)从断电状态到上电自动产生的复位成为冷复位,冷复位用英文表示Restart。已经通电的情况下给一个复位信号称为热复位,热复位用英文表示Reset。
    (3)热启动和冷启动区别:从断电到上电启动成为冷启动;上电的状态下重启系统成为热启动。
    (4)热复位和热启动区别:二者既有相同之处又有不同之处,不同在于热复位是复位相关存储器,热启动是重新启动相关设备。

Preloader

preloader(预加载器)的命名相对于BootLoader,其作用类似于PC主板上的BIOS,BIOS在系统启动之前控制着主板上的硬件设备,引导系统启动程序。preloader在HPS中完成的功能主要有系统时钟配置、引脚的复用配置、存储器初始化以及引导用户软件,下一步用户软件可以直接是用户的baremental 程序,也可以不需要bootloader的系统程序,如ucos,或者是操作系统的引导程序,如u-boot(开源引导加载器)。

预加载器被允许从 HPS 可用的任何器件加载下一个阶段引导软件。典型源头包括含有预加载器的同一闪存器件,一个不同的闪存器件或一个如 EMAC 的通信接口。

引导加载器:引导加载器加载操作系统并且将软件控制传递到操作系统。

HPS启动过程中三大典型用户软件架构:
(1)preloader+baremental code
(2)preloader+无bootloader的操作系统(如ucos)+用户定义软件
(3)preloader+bootloader code(如u-boot)+操作系统(如linux)+用户定义软件

preloader具体完成的工作:

  • 初始化SDRAM接口
  • 配置 remap 寄存器,把on-chip RAM 映射至地址0x0,异常会被preloader处理
  • on-chip RAM 可以被读写,初始地址从0x0对齐
  • 通过scan manager配置HPS I/O
  • 通过system manager配置引脚复用
  • 通过clock manager配置HPS时钟
  • 初始化包含了下一阶段启动代码的FLASH控制器(NAND, SD/MMC, or quad SPI)
  • 启动下一阶段或者将用户代码引导入SDRAM,并把CPU控制权交至下一段代码

Boot Loader

Boot loader(系统引导程序),操作系统内核运行之前运行的一段程序。它首先完成系统硬件的初始化,包括时钟的设置、存储区的映射等,设置堆栈指针等;然后把操作系统内核从flash区拷贝带ram区,并跳转到内核的入口,将系统的控制权交给操作系统,从此系统的运行和Boot loader再无任何关系。

BootLoader启动方式:

大多数BootLoader都有两种操作模式:启动加载模式和下载模式,BootLoader的组最终目的都是启动内核。

1.启动加载模式(boot loading)
上电后,BootLoader从板子的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户介入。这种模式是BootLoader的正常工作模式,产品发布时候,BootLoader就工作在这种模式下。

2.下载模式(down loading)
这种模式下,开发人员使用各种命令,通过串口连接或者网络连接从主机上下载文件,将他们直接放在内存运行或者烧入flash类固态存储设备中。以后的系统更新也会使用 Boot Loader 的这种工作模式。工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。

参考文章:
https://blog.csdn.net/qq_51118175/article/details/122052285
http://m.eeworld.com.cn/bbs_thread-454675-1-1.html

相关文章:

【SoC FPGA】HPS启动过程

SoC HPS启动流程 Boot ROMPreloaderBoot Loader HPS的启动是一个多阶段的过程,每一个阶段都会完成对应的工作并且将下一个阶段的执行代码引导起来。每个阶段均负责加载下一个阶段。第一个软件阶段是引导 ROM,引导 ROM 代码查找并且执行称为预加载器的第 …...

Wireshark CLI | Mergecap 篇

简介 Mergecap 是 Wireshark 程序安装时附带的可选工具之一&#xff0c;用于合并数据包文件的命令行工具。 mergecap [ -a ] [ -F <file format> ] [ -I <IDB merge mode> ] [ -s <snaplen> ] [ -V ] -w <outfile>|- <infile> [<infile>…...

10个打工人必备AI神器,升职加薪靠AI

HI&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是第18篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完后可领取&#xff01;1. Runway&#xff08;文字转视频AI工具&#xff09; 只需要一句提示词就能精确生成你所想象的视频场景&#xff0c;还…...

Java架构师缓存架构设计

目录 1 导学2 高性能概述2.1 高性能的定义和衡量指标2.2 如何实现高性能的计算机系统或软件程序2.3 木桶理论2.4 如何实现计算机系统或软件程序的高性能3 多级缓存设计3.1 浏览器缓存3.2 CDN缓存3.3 负载均衡的缓存3.4 进程内缓存3.5 分布式缓存4 缓存技术方案5 如何进行缓存拆…...

Linux 安全 - DAC机制

文章目录 一、安全简介二、DAC2.1 UNIX 的自主访问控制2.2 Linux 的自主访问控制 三、进程凭证3.1 简介3.2 uid/gid3.3 系统调用 四、客体标记4.1 简介4.2 系统调用 五、UGO规则源码分析参考资料 一、安全简介 计算机系统应对安全挑战的办法大致有四种&#xff1a;隔离、控制、…...

解决Windows系统win+shift+s截图快捷键失效问题

文章目录 打开任务管理器找到Windows资源管理器&#xff0c;选择重新启动 打开任务管理器 按“Win R”打开&#xff1a; 输入taskmgr.exe&#xff0c;运行&#xff0c;即可打开任务管理器&#xff1a; 找到Windows资源管理器&#xff0c;选择重新启动 点击右下角的“重新启…...

Excel 快速填充

文章目录 利用快速填充进行提取数据利用快速填充进行拆分重组 2013 及以上版本才有的功能. 利用快速填充进行提取数据 有一列的数据已有, 需要提取部分数据到另一列, 只需要输入部分内容, 后面内容可以自动显示, 按下回车即可快速填充. 只要前面手动输入的内容没有错得太离谱…...

OPENCV图像和视频处理

图像基本操作&#xff1a; Opencv图像处理&#xff08;全&#xff09;_胖墩会武术的博客-CSDN博客 import cv2 import matplotlib.pyplot as plt import numpy as npimgcv2.imread(1.jpg) #图像的显示 cv2.imshow(image,img) cv2.waitKey(0) …...

QDir实践

现在有多个文件&#xff0c;路径为&#xff1a; a\xxx\kmd_config\c.json 其中xxx是变量 startcalc,,,,,, 目标&#xff1a; 访问每一个json文件 实例&#xff1a; QString app_path QApplication::applicationDirPath() "/app";QDir dir(app_path);QStringLi…...

网络通信三要素

三要素概述 IP地址&#xff1a;设备在网络中的地址&#xff0c;是唯一的标识。 端口&#xff1a;应用程序在设备中唯一的标识。 协议: 数据在网络中传输的规则&#xff0c;常见的协议有UDP协议和TCP协议。 网络通信过程 A程序通过IP和端口连接到到B程序&#xff0c;再互…...

2023年中国渔业研究报告

第一章 行业概况 1.1 定义 渔业&#xff0c;作为全球经济的重要支柱之一&#xff0c;其核心活动包括捕捞、水产养殖、产品加工与销售等。其不仅是食物安全的重要保障&#xff0c;还是许多沿海和内陆地区经济发展的重要动力。 首先&#xff0c;捕捞活动是渔业的基础。通过海洋…...

python字符串中的\“

data {"text": "\"abc\""} print(data) # {"text": ""abc""}从结果可以看到并没有出现反斜杠&#xff0c;反斜杠与双引号作为一个整体&#xff0c;转义为了一个双引号&#xff0c;如果要在字符串中出现反斜杠&am…...

Elasticsearch 分片内部原理—使文本可被搜索、动态更新索引

目录 一、使文本可被搜索 不变性 二、动态更新索引 删除和更新 一、使文本可被搜索 必须解决的第一个挑战是如何使文本可被搜索。 传统的数据库每个字段存储单个值&#xff0c;但这对全文检索并不够。文本字段中的每个单词需要被搜索&#xff0c;对数据库意味着需要单个字…...

lvgl 界面管理器

lv_scr_mgr lvgl 界面管理器 适配 lvgl 8.3 降低界面之间的耦合使用较小的内存&#xff0c;界面切换后会自动释放内存内存泄漏检测 使用方法 在lv_scr_mgr_port.h 中创建一个枚举&#xff0c;用于界面ID为每个界面创建一个页面管理器句柄将界面句柄添加到 lv_scr_mgr_por…...

一篇文章让你了解“JWT“

一.JWT简介 1.概念 JWT (JSON Web Token) 是一种用于在网络上安全传输信息的开放标准&#xff08;RFC 7519&#xff09;。它是一种紧凑且自包含的方式&#xff0c;用于在不同组件之间传递信息&#xff0c;通常用于身份验证和授权目的。JWT 是以 JSON 格式编码的令牌&#xff…...

HJ73 计算日期到天数转换

HJ73 计算日期到天数转换 int main() {int year, month, day;cin >> year >> month >> day;int monthDays[13] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };int nday monthDays[month - 1] day;if (month > 2 &&((year…...

Unity实现设计模式——适配器模式

Unity实现设计模式——适配器模式 适配器模式又称为变压器模式、包装模式&#xff08;Wrapper&#xff09; 将一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 在一个在役的项目期望在原有接口的基础…...

【2023年11月第四版教材】专题1 - 计算题考点汇总 (合集篇)

专题1 - 计算题考点汇总 (合集篇&#xff09; 1 进度类1.1 PERT三点估算1.1.1 β分布1.1.2 三角分布 1.2 单代号网络图1.2.1 画图1.2.2 找关键路径1.2.3 计算总工期1.2.4 总时差1.2.5 自由时差1.2.6 工期压缩 1.3 双代号网络图1.4 双代号时标网络图1.4.1 画图1.4.2 找关键路径1…...

系统架构设计:17 论信息系统的安全性与保密性设计

目录 一 信息安全基础 1 信息安全的基本要素 2 信息安全的范围 3 网络安全...

使用EasyDarwin+ffmpeg+EasyPlayerPro完成rtsp的推流操作和拉流操作

本文分享在做视频类测试过程中所用到的工具EasyDarwinffmpegEasyPlayerPro 首先说一下EasyDarwin,简单来讲&#xff0c;它就是个推流和拉流及系统消耗的监测软件&#xff0c;具体使用方法我会写在下方。 EasyDarwin 1、解压下载好的EasyDarwin压缩包&#xff0c;并找到EasyD…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...