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

news2024/9/23 3:12:02

请添加图片描述

  • 💌 所属专栏:【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.coloradmin.cn/o/1943083.html

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

相关文章

力扣高频SQL 50题(基础版)第七题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第七题1068. 产品销售分析 I题目说明思路分析实现过程准备数据&#xff1a;实现方式&#xff1a;结果截图:总结&#xff1a; 力扣高频SQL 50题&#xff08;基础版&#xff09;第七题 1068. 产品销售分析 I 题目说明 …

mysql + Oracle

eg627. 变更性别 Salary 表&#xff1a; ----------------------- | Column Name | Type | ----------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int | ----------------------- id 是这个表…

eclipse 没有war file 选项 不能导入和导出war包

1 eclipse打包war,项目右键 2 安装Web和Java EE插件, 在Eclipse中选择Help菜单&#xff0c;然后选择Install New Software。在Work with下拉菜单中选择All Available Sites&#xff0c;然后选择Web, XML, Java EE and OSGi Enterprise Development进行安装。完成安装后&#xf…

海康视频WEB插件

引入相关依赖 index.html <script src"/video/web-control_1.2.5.min.js"></script> <script src"/video/jquery-1.12.4.min.js" type"text/javascript"></script> <script src"/video/jsencrypt.min.js" …

使用LSTM完成时间序列预测

c 在本教程中&#xff0c;我们将介绍一个简单的示例&#xff0c;旨在帮助初学者入门时间序列预测和 PyTorch 的使用。通过这个示例&#xff0c;你可以学习如何使用 LSTMCell 单元来处理时间序列数据。 我们将使用两个 LSTMCell 单元来学习从不同相位开始的正弦波信号。模型在…

黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day4 重置版 全网最全最快

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会…

python3.10.4——windows环境安装

python下载官网&#xff1a;https://www.python.org/downloads/ 如果安装在C盘&#xff0c;需要右键→选择“以管理员身份运行” 勾选2个按钮&#xff0c;选择自定义安装 全部选择&#xff0c;点击Next 更改安装路径 命令行检查python是否安装成功&#xff1a; 出现版本号说明…

通俗地理解主动元数据管理

元数据管理&#xff0c;是企业开展数据管理的核心基础&#xff0c;内容涉及元数据的创建&#xff0c;确定需要捕获哪些元数据&#xff0c;通过哪些工具和流程进行创建&#xff0c;继而将元数据妥善存储&#xff0c;保障安全性和可访问性&#xff0c;并不断更新维护&#xff0c;…

vue3前端开发-小兔鲜项目-使用逻辑函数拆分业务模块

vue3前端开发-小兔鲜项目-使用逻辑函数拆分业务模块&#xff01;其实就是把一些单独的业务代码组成一个js文件。抽离出去后&#xff0c;方便后面的维护。 如图&#xff0c;在一级分类下面新建一个文件夹。composables里面新建2个js文件。 分别封装之前的分类&#xff0c;和ban…

Electron 企业级开发通信与本地存储实用解决方案

背景 之前写了一篇Electron通信的方式&#xff0c;讲述了一下三者之间的通信机制&#xff0c;比较恶心&#xff0c;后来发现有个electron/remote&#xff0c; Electron 渲染进程直接调用主进程的API库electron/remote引用讲解-CSDN博客文章浏览阅读58次。remote是个老库&…

将mars3D导入自己的项目中

文章目录 Mars3D官方文档 一、打开自己的vite项目二、创建场景配置文件1.json文件路径 public\config\config.json2.创建组件定义文件路径 src\components\mars-work\mars-map.vue三、demo中引入四、必要样式 依赖文件 总结 Mars3D官方文档 一、打开自己的vite项目 我创建了一…

【Linux】安装Nacos-单机版

一、摘要 单机模式又称单例模式, 拥有所有Nacos的功能及特性&#xff0c;具有极易部署、快速启动等优点。但无法与其他节点组成集群&#xff0c;无法在节点或网络故障时提供高可用能力。单机模式同样可以使用内置Derby数据库&#xff08;默认&#xff09;和外置数据库进行存储…

爆赞!终于有大佬把网络安全零基础入门教程给讲明白了!

网络安全的一个通用定义指网络信息系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的破坏、更改、泄露&#xff0c;系统能连续、可靠、正常地运行&#xff0c;服务不中断。网络安全简单的说是在网络环境下能够识别和消除不安全因素的能力。 网络安全…

探索智能本质:技术智能的演进趋势

在人工智能的浪潮中&#xff0c;我们常常被各种技术术语和概念所包围&#xff0c;但智能的本质究竟是什么&#xff1f;香港大学计算与数据科学学院院长马毅教授&#xff0c;在第三届「知乎 AI 先行者沙龙」上的演讲&#xff0c;为我们提供了全新视角。香港大学马毅&#xff1a;…

vue3 vite 引入包报错 无法找到模块“lib-flexible/flexible.js”的声明文件

文章目录 vue3 vite 引入包报错解决方法 1解决方法 2 vue3 vite 引入包报错 无法找到模块“lib-flexible/flexible.js”的声明文件。“d:/mine/web面试/video-demo/node_modules/lib-flexible/flexible.js”隐式拥有 "any" 类型。尝试使用 npm i --save-dev types…

《昇思25天学习打卡营第23天 | 基于MobileNetv2的垃圾分类》

《昇思25天学习打卡营第23天 | 基于MobileNetv2的垃圾分类》 目录 《昇思25天学习打卡营第23天 | 基于MobileNetv2的垃圾分类》1、实验目的2、MobileNetv2模型原理介绍3、实验环境4、数据处理4.1数据准备下载data_en数据集 4.2数据加载将模块导入&#xff0c;具体如下&#xff…

k8s 公共服务

修改named.conf。修改第13行和第21行 下面是 named.rfc1912 修改位置&#xff0c;在最后 所以用cp -p 复制文件&#xff0c;保留权限 nslookup 回车&#xff0c;server是看哪个dns 在起作用 dns服务器要配置给所有公共服务节点和 k8s 节点 就在网络文件加个DNS2就行了&…

c++ - set、map、multiset、multimap容器介绍和常用接口使用

文章目录 前言一、set容器二、multiset三、map四、multimap 前言 1、set、map、 multiset、 multimap都是基于红黑树实现的容器。 2、set、multiset都使用头文件#include<set>,map、multimap都是使用头文件#include<map> 一、set容器 1、set容器的介绍 C标准库中的…

S02. 中断与异常处理

中断处理过程及保护 1、 中断处理过程 处理器根据中断向量号定位中断门描述符。中断向量号是中断描述符的索引&#xff0c;当处理器收到一个外部中断向量号后&#xff0c;它用此向量号在中断描述符表中查询对应的中断描述符&#xff0c;然后再去执行该中断描述符中的中断处理程…

谷歌浏览器跨域

首先创建谷歌浏览器快捷键 右击 属性 在C盘创建文件夹MyChromeDevUserData “C:\Program Files\Google\Chrome\Application\chrome.exe” --disable-web-security --user-data-dirC:\MyChromeDevUserData