我看到BSP和设备驱动程序之间的关系为“has-a”。主板支持包包括设备驱动程序。
BSPs和内核不容易区分。内核将指令转换为硬件。内核通常写入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 /应用程序栈或两个之外,而内核使特定的OS /应用程序堆栈可以通过多个HW体系结构进行移植。