自学内容网 自学内容网

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

请添加图片描述

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

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

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

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

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

请添加图片描述


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

前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【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概念讲解的基础概念讲解,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

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

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

更多专栏订阅:



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


原文地址:https://blog.csdn.net/csh1807266489/article/details/138323424

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!