虽然理解每一个(或者可能不是),但我似乎还远远没有理解两者之间的实际差异。
根据我的理解,BSP是一个驱动程序和配置设置包,允许内核映像启动一个板(并且是其中的一部分)。 单个设备驱动程序在特定组件(HW)上运行,一端与核心内核连接,另一端与设备本身连接。
查看Linux内核,我不清楚BSP角色的起源和设备驱动程序角色的结束位置。具体来说,我习惯于每个图像每个板看到一个BSP,但是,通用Linux内核可以加载到具有相同图像的任何架构系列(很明显,对于不同的系列,有不同的图像:x86,amd64,arm, etc ...),其中特定的板和外围设备驱动程序是从initrd按需加载的。
是否有针对常见Linux内核发行版的BSP? 或者BSP是否与特殊案例板相关?
这种行为在其他内核上是否类似? VxWorks的?
最后一个,为了生成适合不同电路板的单个图像,合并不同的BSP / s是常见的吗?
答案 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)
今天,模块化是为了提高可重用性,嵌入式系统的软件开发通常分为三层。
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通讯,我该怎么办...
在这种情况下,我有一台装有os的PC,因此我无需考虑系统的行为。因此,我只启用了具有os操作系统的设备的行为
在这里,开发板意味着带有所有外围设备的处理器.....在这种情况下,没有操作系统,因此我们需要制造或启用该设备的行为... < / p>