BSP与设备驱动程序

Edw*_*rdH 28 vxworks bsp device-driver linux-device-driver

虽然理解每一个(或许不是),但看起来我远远不了解两者之间的实际差异.

根据我的理解,BSP是一个驱动程序和配置设置包,允许内核映像启动板(并且是其中的一部分).单个设备驱动程序在特定组件(HW)上运行,一侧与核心内核连接,另一侧与设备本身连接.

看看Linux内核,我不清楚BSP角色的起源和设备驱动程序角色的结束位置.具体来说,我习惯于每个图像每个板看到一个BSP,但是,通用Linux内核可以加载到具有相同图像的任何架构系列(很明显,对于不同的系列,有不同的图像:x86,amd64,arm, etc ...),其中特定的板和外围设备驱动程序是从initrd按需加载的.

常见的Linux内核发行版是否有BSP?或者BSP是否与特殊案例板相关?

这种行为在其他内核上是否相似?VxWorks的?

最后一个,合并不同的BSP/s以生成适合不同电路板的单个图像是很常见的吗?

Jac*_*ens 23

我将BSP和设备驱动程序之间的关系视为"has-a".板级支持包包括设备驱动程序.

BSP和内核之间的差异不容易区分.内核将指令转换为硬件.内核通常写入特定的硬件系列,因此它们不像它们看起来那样可移植或通用.它相当于每个架构系列的代码的不同排列.

BSP就像反过来一样:它提供了使用该板特定硬件集的工具和指令.在特定的受控情况下,内核可以完成这项工作.但是BSP允许任何兼容的内核/ OS /应用程序堆栈按照其配置说明使用该板.

如果您只需要访问CPU周期和内存,可能需要一些协议(USB,以太网,几种视频类型),具有广泛架构支持的内核非常棒,而且有一段时间,该硬件抽象的广度被倒数第二.但是现在,考虑到电路板可能有一套传感器(加速度计,磁力计,陀螺仪,光线,接近度,大气压力等),电话,可能有多个CPU,多个GPU等等.如果/当有人使用这些特定的硬件包时,可以编写内核来提供VGA/DVI/HDMI/DisplayPort以及CPU/GPU组合的几种排列,但与使用一个硬件包相比,写入对所有理论上下文的支持是不切实际的.为特定电路板构建的BSP.即便如此,那将是一个内核; 该板能够支持Linux,Windows,Android,Symbian等等.

这就是为什么像Yocto这样的努力存在,以进一步解耦内核和硬件.BSP使硬件集可扩展到一个或两个内核/ os/app堆栈之外,而内核使特定的os/app堆栈可以在多个HW架构上移植.


小智 12

根据我的经验,BSP是一个更大的范围.它包括bootloader,rootfs,内核和驱动程序等,这意味着拥有一个BSP使你的主板能够启动自己.驱动程序使设备工作,只是BSP的一部分.

司机不等于BSP.


Saj*_*med 5

今天,模块化是为了提高可重用性,嵌入式系统的软件开发通常分为三层.

  • 内核(包含任务处理,调度,内存管理)
  • 堆栈(设备驱动程序的上层,为I2C,SPI,以太网,SDIO,串行,文件系统,网络等提供协议实现)
  • BSP =设备驱动程序(可以访问硬件上的任何控制器寄存器,如I2C,SDIO,SPI,Ethernet_MAC,UART(串行)和中断处理(ISR)的寄存器.

板支持包(设备驱动程序)是软件层,随着每个板的变化而保持其他两个软件层不变.