聊聊嵌入式BSP开发

文摘   2024-11-26 19:54   广东  

关注+星号公众号,不容错过精彩

作者:HywelStar


 

前一天和网友聊到关于BSP 开发的工作,今天就聊聊这个BSP相关的内容。

  1.  BSP开发是啥?

在嵌入式开发中,BSP 到底是什么?BSP 英文全称 Board support package ,中文意思是:板级支持包。那么在嵌入式领域中,它承载是在特定硬件平台上运行,它起着连接操作系统和硬件之间的桥梁作用。BSP负责硬件初始化、驱动程序支持、操作系统内核的适配等工作。因此,BSP的开发对嵌入式系统的稳定性和功能性至关重要。

不过,BSP开发并不是一件轻松的事情。它涉及的内容广泛、复杂,尤其是在面对不同硬件平台时,开发者常常会遇到各种挑战。接下来主要说说工作内容,挑战和应对策略三部分。

2. BSP的主要工作内容

BSP的核心任务是让操作系统能够顺利地在目标硬件平台上运行。这项工作主要包括以下几个方面:

  • • 硬件初始化 在嵌入式系统启动时,BSP首先会完成硬件的初始化工作。这包括CPU初始化、内存管理配置、时钟设置、外设初始化等。没有这些初始化操作,硬件就无法正常工作,操作系统也无法顺利启动。这个部分在有操作系统的情况下类似uboot负责工作。

  • • 驱动程序支持 BSP需要为目标硬件平台上的各类外设编写或移植驱动程序。无论是基本的串口、I2C、SPI,还是更复杂的图形显示、网络接口、存储控制器等,都需要对应的驱动程序来实现硬件控制。驱动程序是BSP的重要组成部分,直接决定了系统的外设是否能够正常工作。

  • • 操作系统适配 在不同的硬件平台上,操作系统(如Linux、FreeRTOS、Android、QNX等)需要做一定的适配工作。这通常涉及到内核的配置、外设驱动的移植、硬件抽象层(HAL)的实现等。操作系统适配,比如在不同版本操作系统的差异,都可能影响到其他功能的稳定运行。

  • • 引导加载程序(Bootloader) BSP还需要实现一个引导加载程序,用于在设备上电时加载操作系统内核。引导程序负责硬件的初始化、引导操作系统的启动,并且还可能涉及到系统升级、分区管理等功能。

总结内容下来:引导程序, 驱动支持,操作系统的定制,期间应该还有一些优化工作。最终的目标是,让新做的board 运行定制化系统,包含所有外设和资源正常稳定运行。

3. BSP开发中的常见问题

从BSP开发的工作内容来说,在开发过程中,开发者常常会遇到哪些问题:

  • • 硬件差异大,移植难度高 不同的硬件平台可能会有不同的架构、外设和硬件接口。这意味着同一个操作系统在不同平台上的移植工作量差异很大。平台间的差异,如CPU架构(ARM、x86、RISC-V等)、外设连接方式、内存管理方式等,都会影响BSP的开发。

  • • 设备驱动的编写和移植 对于新平台,编写和移植设备驱动是BSP开发中的关键部分。每种外设都有不同的硬件接口,驱动程序需要根据硬件规格编写,可能还需要深入理解硬件寄存器、时钟配置、DMA(直接内存访问)等内容。即使是常见的外设,也可能在不同平台上的实现存在差异。

  • • 操作系统和硬件的兼容性问题 在开发过程中,操作系统可能并不完全支持所有硬件特性,特别是在新平台上。比如操作系统可能无法识别特定的硬件外设或缺少对硬件加速功能的支持,这时需要对操作系统进行修改和适配。

  • • 调试难度大 嵌入式开发中的调试并不像桌面开发那样方便。硬件和操作系统的调试需要专门的工具,如JTAG、串口调试输出等。在很多情况下,硬件问题可能会导致系统无法启动或出现不稳定,而这些问题往往需要通过深入的硬件检查和调试工具来排查。

4. 应对BSP开发挑战的策略

在BSP开发过程中往往会遇到一些问题,在开发过程中遇到棘手问题拖太久,往往出现卡太久影响到整个项目进度。面对这问题,开发者可以采取以下策略来提高BSP开发的效率和质量。

  • • 充分了解硬件平台 在开发BSP之前,开发者需要深入了解目标硬件平台的架构、外设和设计。通过阅读硬件手册、查看硬件原理图和参考设计,能够帮助开发者提前识别潜在的难点,避免在开发过程中重复调试。

  • • 模块化设计和硬件抽象层(HAL) 为了提高BSP的可移植性,可以使用模块化设计,将硬件相关的部分与操作系统、驱动等功能隔离开。硬件抽象层(HAL)可以提供一个统一的接口,让上层软件不用关心底层硬件的具体实现,从而提高代码的复用性和移植性。

  • • 使用成熟的工具和框架 在BSP开发中,使用一些成熟的工具和框架可以显著减少开发难度。例如,U-Boot是一个常用的开源引导加载程序,DeviceTree可以帮助硬件平台与操作系统解耦,这些工具和框架能够大大简化开发工作。

  • • 利用调试工具进行系统调试 在BSP开发过程中,调试工具的选择非常重要。可以利用串口调试、JTAG、GDB远程调试等工具,帮助开发者排查硬件和软件的问题。在调试时,除了要检查硬件的电路和连接,还需要通过日志和调试信息查看系统的运行状态。

  • • 进行性能优化 嵌入式系统通常资源有限,因此性能优化至关重要。开发者可以通过减少内存占用、优化中断处理、精简驱动代码等方式来提高系统的运行效率。借助性能分析工具(如perfftrace等),可以帮助找出性能瓶颈,并进行针对性的优化。相关文章:掌握性能分析工具Perf(一) 掌握性能分析工具Perf(二)

5. 结语

对于目前硬件技术的不断发展,BSP的开发工作也在不断变化。新的硬件平台不断涌现,操作系统和工具链的不断升级,也为BSP开发提供了更多的支持。BSP 的工作内容其实并不少,大多数初期从开发板入手,通过需求定制,新增或者修改一些外设,根据实际情况进行对支持包的修改。另外一方面对于系统稳定性,性能优化算是挑战,BSP 岗位内容不会像应用有那么多编码的工作,更多的工作是在调试优化,但它需要的是一个全面的认识,有问题能够快速去找到精准位置解决。

总的来说,BSP开发既是嵌入式系统开发中最基础也是最关键的部分,只有打下坚实的BSP基础,才能确保后续应用开发的顺利进行。最后提一句,在开发过程中与原厂保持良好沟通也是一种快速解决途径。


往期推荐



一篇文章带你了解视频基础知识

认识 Linux Video 子系统

面试技巧 - 1. 学用STAR法则

嵌入式系统常用授时方案对比

Type-C 接口耳机分析

掌握性能分析工具Perf(二)

掌握性能分析工具Perf(一)

认识充电电池

掌握Dynamic debug调试

掌握GDB:在Linux 下调试程序

公众号目录指引【2】

 

           
“阅读原文”一起来充电吧!

 

码思途远
一位码农的日常分享,专注嵌入式领域相关知识。
 最新文章