BSP与设备驱动程序

时间:2012-08-05 18:36:28

标签: linux-device-driver device-driver vxworks bsp

虽然理解每一个(或者可能不是),但我似乎还远远没有理解两者之间的实际差异。

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

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

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

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

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

6 个答案:

答案 0 :(得分:22)

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

BSP与BSP之间的差异内核不容易区分。内核将指令转换为硬件。内核通常写入particular families of hardware,因此它们看起来并不像便携式或通用的那样。它相当于每个架构系列的代码的不同排列。

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

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

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

答案 1 :(得分:12)

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

司机不等于BSP。

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:1)

Board支持包包括应用程序使用该板所需的所有内容。这些包括板上设备的设备驱动程序和应用程序员的实用程序软件。多媒体板上也有窗口环境。系统工程师可以进一步为电路板添加扩展。某些应用程序需要重新实现bsp的某些部分才能进行增强。在这里,bsp扮演参考实现的角色或这些要求的起点。

混淆在于商业模式。参考或开发板不是像移动设备那样的终端/消费者产品。它在设计和开发iPhone或三星Galaxy等产品方面发挥着重要作用。

在大多数情况下,通用bsp将缺乏优化,因此您只能期望新手模型的通用bsp或者为您完成优化。在廉价电路板的情况下,bsp非常通用,因为生产商将减少投资。

由于还有可用的微内核,因此不要过分强调内核和用户空间。这里的驱动程序是用户空间的一部分!再想想一个只有一段代码而没有内核的低功耗主板。因此,它归结为支持董事会完成工作的软件。

答案 4 :(得分:1)

从设备驱动程序/内核模块执行硬件抽象的意义上来说,板级支持包和HAL(硬件抽象层)之间存在概念上的联系,并且板级支持包为设备驱动程序提供了接口,或者是硬件抽象层本身。

因此,基本上 BSP具有与DOS时代的BIOS类似的功能

另外,BSP应该执行以下操作

  • 初始化处理器
  • 初始化公交车
  • 初始化中断控制器
  • 初始化时钟
  • 初始化RAM设置
  • 配置细分
  • 从Flash加载并运行Bootloader

来自:https://en.wikipedia.org/wiki/Board_support_package

现代PC中的BIOS初始化并测试系统硬件 组件,并从大容量存储设备加载引导加载程序, 然后初始化操作系统。 在DOS时代,BIOS 为键盘,显示器和键盘提供了硬件抽象层 标准化接口的其他输入/输出(I / O)设备[设备驱动程序] 应用程序和操作系统。 系统在加载后不使用BIOS,而是访问 直接使用硬件组件。

来源:https://en.wikipedia.org/wiki/BIOS

另一方面是BSP中设备树的使用,设备树是描述机器硬件的统一或标准化概念:

U-boot引导加载程序并准备好发布

Doug Abbott,在Linux中用于嵌入式和实时应用程序(第四部分) 版),2018年

设备树

移植操作系统的最大问题之一是 Linux向新平台描述了硬件。 那是因为 硬件描述可能分散在几十个左右 设备驱动程序,内核和引导加载程序,仅举几例。 最终结果是这些各种软件成为 每个平台都独一无二,配置选项的数量会增加, 而且每个主板都需要一个唯一的内核映像。

有许多方法可以解决此问题。 “董事会支持包”或BSP的概念试图收集所有 将与硬件相关的代码放在一个文件中的几个文件中。它可能是 认为Linux内核源代码树的整个arch/子树 是一个巨大的主板支持包。

看看内核的arch/arm/子树。在那你会 找到大量形式为mach-*plat-*的目录, 大概分别是“机器”和“平台”的缩写。大多数 这些目录中的文件提供了有关 ARM体系结构的特定实现。当然,每个 实现对配置的描述有所不同。

只有一种语言可以用来 清楚地描述计算机系统的硬件?那就是 设备树的前提和承诺。

系统中的外围设备可以沿数字进行表征 尺寸。例如,有字符设备与块设备。 有内存映射的设备,而那些通过 外部总线,例如I2C或USB。然后有平台设备和 可发现的设备。

可发现设备是指通过外部总线运行的设备,例如 PCI和USB,可以告诉系统它们是什么以及它们如何 配置。也就是说,它们可以被内核“发现”。有 确定了一个设备,加载 相应的驱动程序,然后询问设备以确定 其精确的配置。

另一方面,

平台设备缺少任何识别机制 他们自己。片上系统(SoC)实现,例如Sitara, 这些平台设备充斥着系统时钟,中断 控制器,GPIO,串行端口等。设备树 机制对于管理平台设备特别有用。

设备树的概念在内核的PowerPC分支中得到了发展, 这似乎是最常用的地方。实际上,现在 要求所有PowerPC平台将设备树传递给 内核在启动时。设备树的文本表示形式是 扩展名为.dts的文件。这些.dts文件通常位于 arch/$ARCH/boot/dts中的内核源代码树。

设备树是一种分层的数据结构,它描述了 设备集合和计算机系统的互连总线。 它被组织为从以“ /”表示的根开始的节点,只是 像根文件系统。每个节点都有一个名称,并由 是名称-值对的“属性”。它还可能包含“孩子” 节点。

清单15.1是从devicetree.org提取的示例设备树 网站。除了说明结构之外,它什么也没有做。在这里,我们 有两个名为node1和node2的节点。 node1有两个子节点,并且 node2有一个孩子。属性由名称=值表示。价值观 可以是字符串,字符串列表,包含的一个或多个数字值 用方括号或一个或多个用尖括号括起来的“单元格”表示。 如果属性通过以下方式传递布尔值,则该值也可以为空: 它的存在与否。

来源:https://www.sciencedirect.com/topics/computer-science/board-support-package

可以在引导时加载

通过设备树覆盖内核模块,即在RPi上向dtoverlay=lirc-rpi添加/boot/config.txt来加载lirc-pi内核模块/设备驱动程序:

将来的默认config.txt可能包含以下部分:

 # Uncomment some or all of these to enable the optional hardware interfaces
 #dtparam=i2c_arm=on
 #dtparam=i2s=on
 #dtparam=spi=on

如果您的叠加层定义了一些参数,则可以将其设置为 在以下这样的行上指定:

 dtoverlay=lirc-rpi 
 dtparam=gpio_out_pin=16 
 dtparam=gpio_in_pin=17
 dtparam=gpio_in_pull=down

来源:https://www.raspberrypi.org/documentation/configuration/device-tree.md

使用Yocto构建BSP时,将收集分散在设备驱动程序上的所有硬件信息,其中包括内核,引导加载程序……,这是开发人员指南,该方法说明如何在Yocto中完成 {{3 }}

[Yocto文档] ...指出BSP“ ...与 仅硬件特定的组件。在最终分发点,您 可以将BSP与构建系统和其他工具结合使用。 但是,重要的是要保持区别 恰好在某个特定末端组合在一起的独立组件 产品。

源:https://www.yoctoproject.org/docs/2.5/bsp-guide/bsp-guide.html

答案 5 :(得分:0)

驱动程序是一个向内核说出类似设备行为的程序...设备可以是USB设备,相机或蓝牙,也可以是任何东西。根据操作的大小,我们分为三个字符,块,网络。但是它仅允许访问每个设备...仅配置设备而不配置内存,CPU速度。它不提供该处理器或控制器的指令。它在该处理器或控制器上工作。谁启用定义功能的微控制器,谁给出微控制器的起点,谁给出指令。现在来回答像BSP .............. Bsp是支持启动加载程序的板级支持软件包。它给出了系统的行为。 考虑两种情况,  1.一个人在电脑中有USB连接器选项都可以,这是第一种情况 2.其次是我有PC,只有一个板子在具有USB的板子中。该板子应该与USB通讯,我该怎么办...

  1. 在这种情况下,我有一台装有os的PC,因此我无需考虑系统的行为。因此,我只启用了具有os操作系统的设备的行为

  2. 在这里,开发板意味着带有所有外围设备的处理器.....在这种情况下,没有操作系统,因此我们需要制造或启用该设备的行为... < / p>