【BES2500x系列 -- RTX5操作系统】系统启动流程 -- boot loader概念讲解 --(九)

请添加图片描述

  • 💌 所属专栏:【BES2500x系列】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩

请添加图片描述

文章目录

  • 前言
  • 1 系统启动流程
      • 1.1 代码架构
      • 1.2 启动流程
      • 1.3 BSP
      • 1.4 Boot Loader
      • 1.5 Boot Loader的启动流程
  • 总结


<<【系列文章索引】>>

前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【BES2500x系列】专栏的第9篇文章;
  今天开始学习BES2500x系列的一天💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
  专栏地址:【BES2500x系列】, 此专栏是我是夜阑的狗对BES2500x系列开发过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。


1 系统启动流程

  最近比较忙,刚接触到恒玄平台的SDK源码,靠着公司大佬(这里说明一下:肖爷给予我很大的帮助👍,给我很多文档学习)给文档慢慢夜以继日的啃,自己也亲手操作了一遍,踩了挺多坑的,自己也是新人刚学起步,记录学习过程好让自己温故而知新。注意:从这篇开始才是正常开始学习BES系列,前面几篇都是讲解一些基础的概念,有一定基础的大佬们可以跳过前面几篇话不多说,让我们开始吧。接下来就来讲解一下代码的框架和模块之间的解耦处理。

请添加图片描述

1.1 代码架构

  在讲解系统启动流程之前,我们先来了解一下整个代码架构,当我们打开 bes2500x 系列的 sdk 后,可以发现 BES 采用的是 RTOS (嵌入式实时操作系统),并且使用了 ARM 架构的 CMSIS_RTOS API 接口;

在这里插入图片描述
  接下来就检点介绍一下几个重要的目录:

  • rots目录

  打开 rtos 文件后看到是使用的 RTX 系统 (rtos 系统中的一种);

在这里插入图片描述
  注意:本篇文章概念涉及比较多一点,所以文字部分会很多,这都是为了讲解系统启动流程前期所需的准备工作。

  • Apps目录

  该目录主要是存放上层应用相关的软件

在这里插入图片描述

  • Config 目录

  该文件夹中存放基础差异化配置。
  target.mk 文件中主要是宏定义的开关,包含 DEBUG 信息开关、差分/单端输出、默认音量大小、音乐EQ开关、通话算法的开关等。
  tgt_hardware.ctgt_hardware.h 文件中存放基础配置,如按键、LED灯、蓝牙默认信息、音量表、EQ参数、ANC默认参数等。

  • Out目录

  编译成功的输出文件会存放在out目录下的对应工程文件夹下,以.bin的文件形式存放。
工具烧录的时候选中该文件即可。

在这里插入图片描述

  • Platform 目录
    该目录下主要存放一些底层驱动文件,正常情况下不需要修改。

在这里插入图片描述

1.2 启动流程

  嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。其中引导代码一般也由两部分构成:

请添加图片描述

  • 第一部分是板级、片级初始化代码,主要功能是通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化 MMU 等。
  • 第二部分是装载程序,将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM 中并执行。

1.3 BSP

  BSP(Board Support Package) 是板级支持包,是介于主板硬件和操作系统之间的一层,主要是为了支持操作系统,使之能够更好的运行于硬件主板。不同的操作系统对应于不同形式的 BSP,例如 WinCEBSPLinuxBSP 相对于某CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的。所以,BSP 一定要按照该系统 BSP 的定义形式来写,这样才能与上层OS保持正确的接口,良好的支持上层OS。

1.4 Boot Loader

  在 BSP 中有一个重要的组成部分就是 BootLoader ,它是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。
  一般来说,在嵌入式世界里 BootLoader 是严重地依赖于硬件的,因此想建立一个通用的 BootLoader 几乎是不可能的。不同的 CPU 体系结构有不同的 BootLoader,而且除了依赖于 CPU 的体系结构外,BootLoade r还依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 结构而构建的,要想让运行在一块板子上的 BootLoader 程序也能运行在另一块板子上,通常也都需要修改 BootLoader 的源程序。

1.5 Boot Loader的启动流程

  大多数 BootLoader 都包含两种不同的操作模式:启动加载模式和下载模式。启动加载模式也称为自主模式,即 BootLoader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。而下载模式则是目标机上的 BootLoader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件。从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中,然后再被 BootLoader 写到目标机上的 FLASH 类固态存储设备中。这种模式通常在第一次安装内核与根文件系统时被使用,或系统更新时使用。一般嵌入式系统的 Boot Loader 较为常用的是启动加载模式,它的加载流程也是我们要重点讨论的内容。

  • 启动部分

  启动部分主要是实现初始化硬件的功能。在参考板的 BootLoader 目录下,会发现一些 .s 文件,可能会是init.s或者是 reset.s 等,这样的文件是CPU加电后最先执行的代码。接着 Oal.exe通过 Startup 函数完成硬件的初始化,StartUp 函数是 Boot Loader 的入口函数。该函数一般是使用汇编语言编写,与CPU关系非常紧密,能完成初始化CPU、内存等核心硬件。
  Startup.s 代码与硬件平台的 Bootloader 启动代码共用。如果是热启动,即在该函数调用之前已经启动了 Bootloade r程序,相当基本硬件初始化已经完成,则直接跳转到OALStartUp 函数中;否则需要进行硬件中断屏蔽、内存、系统时钟频率、电源管理等硬件的基本初始化过程。在系统硬件初始化完毕之后,Startup 调用 OALStartUp 函数,OALStartUp 函数主要完成将 OEMAddressTable 表传递给内核,然后调用 KernelStart 函数跳转到内核。因此,这部分工作是 BootLoader 的一大重点。

<<【系列文章索引】>>

请添加图片描述


总结

  感谢观看,这里就是系统启动流程 – boot loader概念讲解的基础概念讲解,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

更多专栏订阅:

  • 😀 【LeetCode题解(持续更新中)】

  • 🥇 【恒玄BES】

  • 🌼 【鸿蒙系统】

  • 💎 【蓝牙协议栈】

  • 🎃 【死机分析】

  • 👑 【Python脚本笔记】

  • 🚝 【Java Web项目构建过程】

  • 💛 【微信小程序开发教程】

  • 【JavaScript随手笔记】

  • 🤩 【大数据学习笔记(华为云)】

  • 🦄 【程序错误解决方法(建议收藏)】

  • 🔐 【Git 学习笔记】

  • 🚀 【软件安装教程】



订阅更多,你们将会看到更多的优质内容!!

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

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

相关文章

.NET 情报 | 分析某云系统添加管理员漏洞

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

【计算机毕业设计】881音乐网站

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

跟代码执行流程,读Megatron源码(二)训练入口pretrain_gpt.py

Megatron-LM默认支持GPT、T5、BERT等多个常见模型的预训练&#xff0c;当下大模型流行&#xff0c;故以pretrain_gpt.py为例做源码的走读。 一. 启动pretrain_gpt.py pretrain_gpt.py为GPT类模型的训练入口&#xff0c;它通过命令行形式被调用&#xff0c;其精确执行路径位于M…

计算机网络通信基础概念

目录 1、网络通信的本质 2、网络的发展 3、网络协议&#xff08;TCP\IP协议&#xff09; 3.1 协议实现通信的原理 3.2 协议的具体概念 3.3 协议的模型 4、数据链路层 5、网络协议栈和操作系统的关系 6、网络协议通信过程 6.1 通信过程的封装与解包 7、以太网通信…

Ai绘画变现的14种途径 学习Stablediffusion midjourney用途

AIGC&#xff0c;一个在当代社会中不可忽视的词汇&#xff0c;指的是利用人工智能技术生成创作内容。近年来&#xff0c;全球范围内涌现出50个热门的AI工具&#xff0c;其中&#xff0c;以140亿次访问量雄踞榜首的“GBT”&#xff0c;无疑是AI领域的领头羊。在这些工具中&#…

DETR目标检测模型训练自己的数据集

前言 基础环境&#xff1a;ubuntu20.04、python3.8、pytorch:1.10.0、CUDA:11.3 代码地址&#xff1a;https://github.com/facebookresearch/detr 目录 一、训练准备1、预训练模型下载2、txt文件转为coco模式 二、修改训练模型参数三、开始训练四、实现DETR的推理 一、训练准备…

【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案

【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案 一&#xff0c; 文章简介二&#xff0c;硬件平台构建2.1 音频源板2.2 音频收发板2.3 双板硬件连接 三&#xff0c;软件方案与软件实现3.1 方案实现3.2 软件代码实现3.2.1 4路I2S接收3.2.2 I2S DMA pingpong配置3.2.3 音频数…

Python自动化批量下载ECWMF和GFS最新预报数据脚本

一、白嫖EC和GFS预报数据 EC的openData部分公开了一部分预报数据&#xff0c;作为普通用户只能访问这些免费预报数据&#xff0c;具体位置在这 可以发现&#xff0c;由于是Open Data&#xff0c;我们只能获得临近四天的预报结果&#xff0c;虽然时间较短&#xff0c;但是我们…

vue3前端开发-小兔鲜项目-二级页面面包屑导航和跳转

vue3前端开发-小兔鲜项目-二级页面面包屑导航和跳转&#xff01;这一次&#xff0c;做两件事。第一件事是把二级分类页面的跳转&#xff08;也就是路由&#xff09;设计一下。第二件事是把二级页面的面包屑导航设计一下。 第一件事&#xff0c;二级页面的跳转路由设计一下。 如…

Python爬虫(4) --爬取网页图片

文章目录 爬虫爬取图片指定url发送请求获取想要的数据数据解析定位想要内容的位置存放图片 完整代码实现总结 爬虫 Python 爬虫是一种自动化工具&#xff0c;用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持&#xff08;如 requests、Beaut…

科普文:后端性能优化的实战小结

一、背景与效果 ICBU的核心沟通场景有了10年的“积累”&#xff0c;核心场景的界面响应耗时被拉的越来越长&#xff0c;也让性能优化工作提上了日程&#xff0c;先说结论&#xff0c;经过这一波前后端齐心协力的优化努力&#xff0c;两个核心界面90分位的数据&#xff0c;FCP平…

Day05-readinessProbe探针,startupProbe探针,Pod生命周期,静态Pod,初始化容器,rc控制器的升级和回滚,rs控制器精讲

Day05-readinessProbe探针&#xff0c;startupProbe探针&#xff0c;Pod生命周期&#xff0c;静态Pod&#xff0c;初始化容器&#xff0c;rc控制器的升级和回滚&#xff0c;rs控制器精讲 0、昨日内容回顾1、readinessProbe可用性检查探针之exec案例2、可用性检查之httpGet案例3…

[数据集][目标检测]躺坐站识别检测数据集VOC+YOLO格式9488张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;9488 标注数量(xml文件个数)&#xff1a;9488 标注数量(txt文件个数)&#xff1a;9488 标注…

C语言 | Leetcode C语言题解之第242题有效的字母异位词

题目&#xff1a; 题解&#xff1a; bool isAnagram(char* s, char* t) {int len_s strlen(s), len_t strlen(t);if (len_s ! len_t) {return false;}int table[26];memset(table, 0, sizeof(table));for (int i 0; i < len_s; i) {table[s[i] - a];}for (int i 0; i &…

EMQX 跨域集群:增强可扩展性,打破地域限制

跨域集群的概念 提到 EMQX&#xff0c;人们通常首先会想到它的可扩展性。尽管 EMQX 能随着硬件数量的增加几乎实现线性扩展&#xff0c;但在单个计算实例上的扩展能力终究有限&#xff1a;资源总会耗尽&#xff0c;升级成本也会急剧上升。这时&#xff0c;分布式部署就显得尤为…

JavaScript(11)——对象

对象 声明&#xff1a; let 对象名 { 属性名&#xff1a;属性值, 方法名&#xff1a;函数 } let 对象名 new Object() 对象的操作 先创建一个对象 let op {name:jvav,id:4,num:1001} 查 对象名.属性 console.log(op.name) 对象名[属性名] 改 对象名.属性 新值 op.name …

Pytorch学习笔记day4——训练mnist数据集和初步研读

该来的还是来了hhhhhhhhhh&#xff0c;基本上机器学习的初学者都躲不开这个例子。开源&#xff0c;数据质量高&#xff0c;数据尺寸整齐&#xff0c;问题简单&#xff0c;实在太适合初学者食用了。 今天把代码跑通&#xff0c;趁着周末好好的琢磨一下里面的各种细节。 代码实…

Spring MVC的高级功能——拦截器(三)拦截器的执行流程

一、单个拦截器的执行流程 如果在项目中只定义了一个拦截器&#xff0c;单个拦截器的执行流程如图所示。 二、单个拦截器的执行流程分析 从单个拦截器的执行流程图中可以看出&#xff0c;程序收到请求后&#xff0c;首先会执行拦截器中的preHandle()方法&#xff0c;如果preHa…

bug诞生记——动态库加载错乱导致程序执行异常

大纲 背景问题发生问题猜测和分析过程是不是编译了本工程中的其他代码是不是有缓存是不是编译了非本工程的文件是不是调用了其他可执行文件查看CMakefiles分析源码检查正在运行程序的动态库 解决方案 这个案例发生在我研究ROS 2的测试Demo时发生的。 整体现象是&#xff1a;修改…

聊一聊前端动画的种类,以及动画的触发方式有哪些?

引言 动画在前端开发中扮演着重要的角色。它不仅可以提升用户体验&#xff0c;还可以使界面更加生动和有趣。在这篇文章中&#xff0c;我们将深入探讨前端动画的各种实现方式&#xff0c;包括 CSS 动画、JavaScript 动画、SVG 动画等。我们还将讨论一些触发动画的方式和动画在…