BSP概念总结

2023-11-01

嵌入式计算机系统主要由硬件层、中间层、系统软件层和应用软件层四层组成。

  • 硬件层:包含CPU、存储器(SDRAM、ROM、Flash等)、通用设备接口和 I/O接口(A/D、D/A、I/O等)。其中操作系统和应用程序都可以固化在ROM中。
  • 中间层:硬件层与软件层之间称为中间层,可以称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP)。
  • 系统软件层:系统软件层由操作系统(RTOS、LINUX、VxWorks等)、文件系统、网络系统及通用组件模块组成。
  • 应用软件层:应用软件层是由操作系统开发的应用程序组成,用来实现某种功能或者业务。

BSP定义

硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据 BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。

应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP。

BSP特点

BSP具有以下两个特点

  • 硬件相关性:

因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。

  • 操作系统相关性:

不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。

BSP的主要工作

设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及设计硬件相关的设备驱动程序。

(1)嵌入式系统硬件初始化

从硬件到软件的次序,可以将硬件初始化分为3个部分,分别为片级初始化、板级初始化和系统级初始化。

  • 片级初始化

主要工作是完成嵌入式微处理器的初始化,即ARM、PowerPC等CPU的初始化。包括设置微处理器的核心寄存器和控制寄存器、微处理器核心工作模式和微处理器的局部总线模式等。片级初始化把微处理器从上电时的默认状态逐步设置成系统所要求的工作状态,这是一个纯硬件的初始化过程。

  • 板级初始化

主要工作是完成嵌入式微处理器以外的其他硬件设备的初始化,即外围电路的初始化。另外,还需设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。这是一个同时包含软硬件两部分在内的初始化过程。

  • 系统级初始化

主要工作是进行操作系统的初始化。BSP将对嵌入式微处理器的控制权转交给嵌入式操作系统,由操作系统完成余下的初始化操作。包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区;加载并初始化其他系统软件模块,如网络系统、文件系统等。最后,操作系统创建应用程序环境,并将控制权交给应用程序的入口。

(2)设计硬件相关的设备驱动程序

BSP的另一个主要功能是硬件相关的设备驱动。硬件相关的设备驱动程序的初始化通常是一个从高到低的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP将他们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。与硬件相关的驱动程序是BSP设计与开发中另一个非常关键的环节。

BSP在嵌入式系统和Windows系统中的不同

       在日常生活中使用的PC机上(windows或linux系统)也是有BSP的,只是PC机均采用的CPU架构为统一的x86体系架构。因此操作系统的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持操作系统在x86上正常运行,所以在PC机上谈论BSP这个概念没有什么意义了。

而嵌入式系统则完全不同,目前市场上存在多种架构的的嵌入式CPU(ARM,MIPS,RISC-V等),同时外围设备也会根据需求有不同的选择和定义。一个嵌入式操作系统针对不同的CPU,会有不同的BSP。即使同一种CPU,由于外设的差别,其BSP相应的部分也不一样。所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。

BSP和PC机主板上的BIOS区别

       BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化等)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其实是为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。

在OS正常运行后,BIOS的作用基本上也就完成了,这就是为什么更改BIOS一定要从新关机开机。PC机BIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备)。与Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设置(中断端口定义等),而Bootloader只是简单的装载系统。

BSP和操作系统绑在一起运行在主板上,尽管BSP的开始部分和BIOS所做的工作类似,可是大部分和BIOS不同,作用也完全不同。此外BSP还包含和系统有关的基本驱动(串口,网口等),此外程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中。而BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置。更不会包含一些基本的硬件驱动。

BSP与HAL的关系

       硬件的变动将会对BSP(板级支持层)进行大规模改动,无疑对BSP的维护是一种巨大的负担。引入了HAL(硬件抽象层)的概念,由HAL库对BSP库进一步的封装,形成统一的标准,而下次再改动硬件电路部分时,只需要改动BSP库的具体功能函数,而不需要对上层进行任何的修改。

 参考:

BSP 概念解析_axlrosek的博客-CSDN博客icon-default.png?t=M276https://blog.csdn.net/axlrosek/article/details/1566350

嵌入式 bsp_feeling2012-2012的博客-CSDN博客icon-default.png?t=M276https://blog.csdn.net/happy_6678/article/details/5949139?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~top_click~default-1-5949139.nonecase&utm_term=%E5%B5%8C%E5%85%A5%E5%BC%8Fbsp%E4%B8%8Edsp%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1000.2123.

BSP和HAL层的区别和联系_Ronin Xu的博客-CSDN博客_bsp和halicon-default.png?t=M276https://blog.csdn.net/qq_43603125/article/details/110928807

嵌入式系统BSP基础知识 - 百度文库icon-default.png?t=M276https://wenku.baidu.com/view/8bd80eb40a4e767f5acfa1c7aa00b52acec79c66.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BSP概念总结 的相关文章

  • Bugku:社工-进阶收集

    Bugku过年上了几道新的社工题 有空了来试着写看看 先打开附件可以发现存在一张空间截图 盲猜应该是西安的 烂怂 大雁塔吧 从评论中主角和朋友的对话 我们大概可以获得以下信息 主角家距离大雁塔一共有七站地铁 其中要进行中转 同时作者是从始发

随机推荐

  • 在C#中使用OpenCV(使用OpenCVSharp)

    1 什么是OpenCVSharp 为了解决在Csharp下编写OpenCV程序的问题 我做过比较深入的研究 并且实现了高效可用的方法 GOCW 这几天在搜集资料的时候 偶尔看见了OpenCVSharp 从时间上来看 它已经经过了更久的发展
  • Unity中几种简单的相机跟随

    unity中相机追随 固定相机跟随 这种相机有一个参考对象 它会保持与该参考对象固定的位置 跟随改参考对象发生移动 using UnityEngine using System Collections public class Camera
  • Memcached 清除缓存命令

    首先打开cmd窗口 输入一下命令清除memcached缓存 1 连接 telnet 127 0 0 1 11211 2 查看状态 stats 3 清除缓存 flush all 显示ok以后 缓存就清理成功啦
  • 罗技驱动检测不到设备?解决方法

    罗技旗下的鼠标是很多用户都在使用的设备 需要用户安装驱动程序才能够运行 而近期有些小伙伴遇到了罗技驱动检测不到设备的情况 这该如何处理 纯净之家 win7纯净版系统 win7 ghost 纯净版 方法一 1 检测不到设备也有可能不是驱动的问
  • Linux的正则表达式

    目录 正则简介 正则三剑客一 grep 正则三剑客二 sed 正则三剑客三 awk 1 正则简介 什么是正则表达式 简单的说 正则表达式就是为处理大量的字符串而定义的一套规则和方法 通过定义的这些特殊符号的辅助 系统管理员就可以快速过滤 替
  • Linux命令 chmod -R 755

    linux 命令chmod 755的意思 chmod是Linux下设置文件权限的命令 后面的数字表示不同用户或用户组的权限 一般是三个数字 第一个数字表示文件所有者的权限 第二个数字表示与文件所有者同属一个用户组的其他用户的权限 第三个数字
  • 【django】Forbidden (CSRF cookie not set.)

    CSRF 表示django全局发送post请求均需要字符串验证 功能 防止跨站请求伪造的功能 工作原理 客户端访问服务器端 在服务器端正常返回给客户端数据的时候 而外返回给客户端一段字符串 等到客户端下次访问服务器端时 服务器端会到客户端查
  • 面试——Unity Animation和Animator的区别

    两者都是控制动画播放的 Animation控制一个动画播放的各类方法和数据 当然你可以通过修改目标动画进行动画切换 Animator则可以实现控制多个动画的播放 切换 叠加等一级对骨骼动画控制等更复杂的效果 是一个动画状态机 除却必要的动画
  • nmon命令

    启动nmon监控命令 日志保存到 log 路径下 nmon16g x86 sles12 s0 5 c14400 f m log 对nmon文件赋权 chmod 777 file name s 采集时间 c 采集次数 f 文件类型 不填写为标
  • 线程池 (通俗易懂)

    线程池 一 线程池是什么 二 标准库中的线程池 三 线程池的执行流程 四 实现线程池 3 1 思路与细节 3 2 完整代码 五 标准库里的构造方法 六 延伸问题 一 线程池是什么 之前我们已经认识过 池 String 字符串常量池 MySQ
  • Java并发编程

    发一定比串行快么 这个问题肯定是错的 并发比串行慢的原因在于 线程有创建和上下文切换的开销 上下文切换 即使是单核处理器也支持多线程执行代码 CPU通过给每个线程分配CPU时间片来实现这个机制 CPU通过时间片分配的算法来循环执行任务 当前
  • SpringBoot入门

    目录 一 微服务 什么是微服务 发展历程 单体应用程序 垂直应用架构 分布式架构 SOA架构 微服务架构 单体应用程序 垂直应用架构 分布式架构 SOA架构 微服务架构 二 构建SpringBoot项目 三 基于配置文件的注入 四 多环境配
  • 三方协议接收节点不存在_【汇总】缴款失败找不到原因?申报姐带你解读“神秘”代码!...

    然后 我们来看看缴款失败的提示页面 页面中有错误代码和中文的错误信息 申报姐根据这两个信息对缴款失败的情况总结如下 1 错误代码为F02 错误信息为与国库通讯超时通讯故障 解决方法 请稍后再尝试 重新缴款 2 错误代码为FG1 错误信息为征
  • 使用SOAtest进行功能回归测试,作为持续集成过程的一部分

    实现速度 同时保护您的应用程序不受退步影响 持续集成 CI 是一种广为人知且 在这一点上 被广泛采用的实践 它是显著提高应用交付速度的必要第一步 持续集成允许开发人员将他们的变更推送到源代码的 主 分支中 一个开发人员可能在一天内向主分支推
  • 电路仿真软件LTspice 使用教程

    目录 一 LTspice 特点 二 获取方式 三 运行演示电路 四 自绘电路 五 操作要点 六 相关链接 一 LTspice 特点 1 免费 2 电源快速仿真 3 涵盖大量ADI产品模型 二 获取方式 LTspice信息中心 亚德诺半导体
  • 前端如何调用后端接口?有哪几种方式?

    一般来讲 前端不会给后端接口 而是后端给前端接口的情况比较普遍 一些人可能不理解接口和前端开发的关系 其实不合适的接口设计会极大地影响用户的页面体验 那么今天就跟着我一起来看看 前端如何调用后端接口 有哪几种方式 首先 要弄清楚前端提供一个
  • Leetcode 09/04 每日一题 (257. 二叉树的所有路径 )

    给定一个二叉树 返回所有从根节点到叶子节点的路径 说明 叶子节点是指没有子节点的节点 示例 输入 1 2 3 5 输出 1 gt 2 gt 5 1 gt 3 解释 所有根节点到叶子节点的路径为 1 gt 2 gt 5 1 gt 3 思路与算
  • android mtk分析,MTK android平台LCD 驱动的代码分析与讲解

    http blog csdn net sunweizhong1024 article details 8447915 MTK LCD Driver 代码的路是在 mediatek source kernel driver vedio mtk
  • static、const、volatile

    4 关键字static的作用是什么 解答 在C语言中 关键字static有三个明显的作用 在函数体中 一个被声明为静态的变量在这一函数被调用过程中只会被分配一次内存 且整个运行期间不会重新分配 在函数体外 某个源文件内 一个被声明为静态的变
  • BSP概念总结

    嵌入式计算机系统主要由硬件层 中间层 系统软件层和应用软件层四层组成 硬件层 包含CPU 存储器 SDRAM ROM Flash等 通用设备接口和 I O接口 A D D A I O等 其中操作系统和应用程序都可以固化在ROM中 中间层 硬