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

嵌入式:BSP的理解

BSP概念总结

  • BSP定义
  • BSP的特点
  • BSP的主要工作
  • BSP在嵌入式系统和Windowsx系统中的不同
  • BSP和PC机主板上的BIOS区别
  • BSP与 HAL关系

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

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

BSP定义

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

应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。

BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP。
🚀🚀🚀如下图所示 BSP定义。
在这里插入图片描述

BSP的特点

  • 硬件相关性 : 因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。
  • 操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式,实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。

BSP的主要工作

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

🚀1. 嵌入式系统硬件初始化
从硬件到权健的次序,可以将硬件初始化分为3个部分,分别为片级初始化,板级初始化和系统级初始化。

片级初始化:主要工作是完成嵌入式微处理的初始化,即 RAM,PowerPC等CPU初始化工作,包括设置 微处理的核心寄存器和控制寄存器,微处理器核心工作模式和微处理的局部总线模式等。片级初始化把微处理器从上电时的默认状态逐步设置成系统所要求的工作状态,这是一个纯一年的初始化过程。
板级初始化: 主要工作是完成嵌入式微处理器以外的其他硬件设备的初始化,即外围电路的初始化,另外,还需设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件好软件环境,这是一个同时包含软硬件两部分在内的初始化过程。
系统级初始化:主要工作是进行操作系统的初始化,BSP将对嵌入式微处理的控制权转交给嵌入式操作系统,由操作系统完成余下的初始化操作,包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,如:网络系统,文件系统等。最后,操作系统创建应用程序环境,并见控制权交给应用程序的入口。

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

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

🚀在日常生活使用的PC机上(WIndows或Linux)也是有 BSP的,只是PC机均采用的 CPU架构为统一的 x86体系架构,因此操作系统的 BSP相对于 x86架构是单一确定的,不需要做任何修改就可以很统支持操作系统在 x86上正常运行,所以在PC机上谈论 x86这个概念就显得没什么意思了。
🚀 但是在嵌入式系统则完全不同,目前市场上存在多种架构的嵌入式 CPU(ARM,MIPS,RISC-V等),同时外围设备也会根据需求有不同的选择和定义,一个嵌入式操作系统针对不同的CPU,就会有不同的 BSP,即使用一种CPU,由于外设的差异,其BSP也会部分不一样,所以根据硬件设计编写和修改BSP,保证系统正常的运行工作是非常重要的。

BSP和PC机主板上的BIOS区别

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

BSP概念总结BSP定义BSP的特点BSP的主要工作BSP在嵌入式系统和Windowsx系统中的不同BSP和PC机主板上的BIOS区别BSP与 HAL关系嵌入式计算机系统主要由 硬件层,中间层,系统软件层和应用软件层四层组成。硬件层:包含CPU,存储器(SDRAM&…...

Linux主机Tcpdump使用-centos实例

1、安装前系统信息 ifconfig查看系统网络接口情况。这里可以看到3个interface,ens160是正常使用的网口,lo是主机的loopback地址127.0.0.1。另外,由于centos安装在虚拟主机上,virbr0是KVM默认创建的一个Bridge,其作用是为连接其上的…...

线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列

AcWing 898. 数字三角形 1.题目 898. 数字三角形 2.思路 DP问题首先考虑状态转移方程,定义一个集合f ( i , j) ,表示从第一个数字(1,1)走到第 i行,第 j列(i , j)的所有方案的集合&#xff0c…...

SpringMVC

SpringMVC配置 引入Maven依赖 &#xff08;springmvc&#xff09;web.xml配置DispatcherServlet配置 applicationContext 的 MVC 标记开发Controller控制器 几点注意事项&#xff1a; 在web.xml中 配置<load-on-startup> 0 </load-on-startup> 会自动创建Spring…...

C++模板基础(二)

函数模板&#xff08;二&#xff09; ● 模板实参的类型推导 – 如果函数模板在实例化时没有显式指定模板实参&#xff0c;那么系统会尝试进行推导 template<typename T> void fun(T input, T input2) {std::cout << input << \t << input2 << …...

什么是linux内核态、用户态?

目录标题为什么需要区分内核空间与用户空间内核态与用户态如何从用户空间进入内核空间整体结构为什么需要区分内核空间与用户空间 在 CPU 的所有指令中&#xff0c;有些指令是非常危险的&#xff0c;如果错用&#xff0c;将导致系统崩溃&#xff0c;比如清内存、设置时钟等。如…...

day8—选择题

文章目录1.Test.main() 函数执行后的输出是&#xff08;D&#xff09;2. JUnit主要用来完成什么&#xff08;D&#xff09;3.下列选项中关于Java中super关键字的说法正确的是&#xff08;A&#xff09;1.Test.main() 函数执行后的输出是&#xff08;D&#xff09; public clas…...

ngx错误日志error_log配置

ngx之error_log 日志配置格式&#xff1a; 常见的错误日志级别 错误日志可配置位置 关闭error_log配置 设置debug 日志级别的前提&#xff1a; ngx之error_log 日志配置格式&#xff1a; error_log 存放路径 日志级别 例&#xff1a; error_log /usr/local/log…...

1.11、自动化

自动化 一、java 手机自动化 首先new DesertCapabilities&#xff08;这是一个类&#xff09; setCapability – 设置信息 获取appium的驱动对象 new AppiumDriver – 本机IP地址:端口号/wd/hub,前面的设置值信息 driver.findElementById() – 通过id找位置 click() – 点击 &…...

函数的定义与使用及七段数码管绘制

函数的定义 函数是一段代码的表示 函数是一段具有特定功能的、可重用的语句组 函数是一种功能的抽象&#xff0c;一般函数表达特定功能 两个作用&#xff1a;降低编程难度 和 代码复用 求一个阶乘 fact就是 函数名 n就是参数 return就是输出部分即返回值 而函数的调用就是…...

怎么压缩pdf文件大小?pdf文件太大如何压缩?

喜爱看小说的小伙伴们都会在网上下载很多的pdf格式电子书以方便随时阅览&#xff0c;但是pdf的电子书一般都过于的冗长&#xff0c;下载后的储存也是一个问题&#xff0c;怎么pdf压缩大小呢&#xff1f;可以试试今天介绍的这款pdf在线压缩工具来进行pdf压缩&#xff08;https:/…...

阿里云Linux服务器登录名ecs-user和root选择问题

阿里云服务器Linux系统登录名可以选择root或ecs-user&#xff0c;root具有操作系统的最高权限&#xff0c;但是root会导致的安全风险比较大&#xff0c;ecs-user比较安全&#xff0c;但是如果系统后续依赖root权限就会比较麻烦&#xff0c;从安全的角度&#xff0c;建议选择ecs…...

【云原生】 初体验阿里云Serverless应用引擎SAE(三),挂载配置文件使应用的配置和运行的镜像解耦

目录 一、前言二、SAE配置1、创建配置项2、配置SAE Nginx服务效果1、【云原生】 初体验阿里云Serverless应用引擎SAE(一),部署Nginx服务 2、【云原生】 初体验阿里云Serverless应用引擎SAE(二),前端Nginx静态文件持久化到对象存储OSS 本篇 3、【云原生】 初体验阿里云Se…...

Oracle用户密码过期,修改永不过期

修改密码有效过期时间&#xff0c;可以通过以下四步设置&#xff0c;如果再第一步发现本身的密码过期时间为无限期的&#xff0c;那就请各位小伙伴绕过&#xff0c;如果发现不是无期限的&#xff0c;那么必须设置第四步&#xff0c;才会生效。 目录 第一步&#xff1a;查询密码…...

welearn 视听说1-4

词汇题&#xff08;55道&#xff09; 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词&#xff0c;主句谓语动词think over后面缺宾语&#xff0c;后面的宾语从句谓语动…...

【git】将本地项目同步到远程

前提&#xff1a;git已经安装&#xff0c;并与账号完成密钥绑定 在github上创建一个新仓库 在项目文件夹下&#xff0c;右击选择git bash here &#xff0c;打开一个终端对话框 git init (在项目目录下出现隐藏的.git文件夹&#xff0c;目的是把该项目文件夹变成git可管理…...

10-链表练习-LeetCode82删除排序链表中的重复元素II

题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5] 示例 2&#xff1a; 输入&#xff1a;head …...

贯穿设计模式第五话--接口隔离原则

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 从今天开始&#xff0c;将…...

C语言计算机二级/C语言期末考试 刷题(四)

在空闲时间整理了一些C语言计算机二级和C语言期末考试题库 整理不易&#xff0c;大家点赞收藏支持一下 祝大家计算机二级和期末考试都高分过 系列文章&#xff1a; C语言计算机二级/C语言期末考试 刷题&#xff08;一&#xff09; C语言计算机二级/C语言期末考试 刷题&#x…...

JDK8中Stream接口的常用方法

参考答案 Stream 接口中的方法分为中间操作和终端操作&#xff0c;具体如下。 中间操作&#xff1a; filter&#xff1a;过滤元素map&#xff1a;映射&#xff0c;将元素转换成其他形式或提取信息flatMap&#xff1a;扁平化流映射limit&#xff1a;截断流&#xff0c;使其元…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...