虽然自己理解每个人(或可能不是),但似乎我还不了解两者之间的实际差异。
根据我的理解,BSP是一整套驱动程序和配置设置,允许内核镜像启动板(并且是板的一部分)。
单个设备驱动程序在特定组件(HW)上运行,其一侧与核心内核接口(interface),另一侧与设备本身接口(interface)。
从Linux内核来看,我不清楚BSP角色在哪里开始,设备驱动程序角色在哪里结束。具体来说,我以前每个图像每个板都看到一个BSP,但是,通用Linux内核可以以相同的图像加载到任何体系结构家族中(很明显,对于不同的家族,它们具有不同的图像:x86,amd64,arm,等),根据需要从initrd加载特定的板卡和外围设备驱动程序。
是否有用于常见Linux内核发行版的BSP?
还是BSP仅与特殊情况委员会有关?
这种行为在其他内核上是否类似? VxWorks?
最后一个,合并不同的BSP以生成适合不同板的单个图像是否很常见?
最佳答案
我认为BSP和设备驱动程序之间的关系为“has-a”。主板支持包包括设备驱动程序。
BSP和内核之间的差异很难区分。内核将指令转换为硬件。内核通常被写入particular families of hardware,因此它们不像看起来那样可移植或通用。对于每种体系结构系列,它相当于代码的不同排列。
BSP的作用与此相反:它提供了与该板的特定硬件一起使用的工具和说明。在特定的受控情况下,内核可以完成这项工作。但是BSP通过遵循其configuration instructions,使任何兼容的内核/ OS /应用程序堆栈都可以使用该板。
如果您只需要访问CPU周期和内存,也许是一些协议(protocol)(USB,以太网,几个视频类型),那么具有广泛体系结构支持的内核就非常棒了,并且有一段时间人们普遍认为倒数第二个硬件抽象。但是现在,考虑该板可能具有suite of sensors(加速度计,磁力计,陀螺仪,光线,接近度,大气压等),电话,可能有多个CPU,多个GPU等。如果/当有人使用这些特定的硬件程序包时,可以编写内核以提供VGA / DVI / HDMI / DisplayPort以及CPU / GPU组合的多种排列,但是与利用专为特定板构建的BSP。即使这样,也只适用于一个内核。该板能够支持Linux,Windows,Android,Symbian等。
这就是为什么存在像Yocto这样的努力来进一步分离内核和硬件的原因。 BSP使硬件集可扩展到一个或两个以上的内核/操作系统/应用程序堆栈,而内核使特定的操作系统/应用程序堆栈可通过多种硬件体系结构移植。