当前位置: 首页 > 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;使其元…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...