Skip to content
Home » BSP Development Process

BSP Development Process

  • by

Every board comes with a base BSP (Board Support Package) from the manufacturers. However, in most cases, different levels of customization are required to meet the strict application requirements in real-life scenarios. Thus implicitly demanding the development
of a custom BSP.

This article will cover the main aspects of the BSP development process when creating custom BSPs for embedded systems.

Main BSP Development Steps

The development process of a BSP starts with the hardware and the Operating System that is supposed to be used on the given embedded platform. In general, the hardware platform is chosen according to the application needs and the target OS that needs to run on it. The OS ecosystem for embedded applications is divided into two main categories: UNIX Like Operating systems and Real-Time Operating Systems. The BSP development process is highly dependent on the target OS being used. There are as well few main steps in the development process that are common for both types of operating systems:

Choosing the OS Open-Source vs Proprietary

Depending on specific requirements for the application at hand the OS is chosen, this choice is motivated by considerations as varied as safety-relevant vs non-safety-relevant application, required certifications for the system, real-time requirements, and application software stacks that need to run under the OS, etc.

Bootloader & Boot scheme Development

Irrespective of the chosen OS, the first initialization of the system is done by the bootloader. In general, depending on the chosen OS, a Bootloader will be customized starting from scratch or from an Open-Source implementation. In addition to the development and configuration of the individual Bootloaders used in each boot stage, the boot scheme/strategy needs to be implemented, such that the system can boot up according to strict application requirements and be in sync with other SoC or cores present on the same Board/SoC

Hardware Abstraction

Depending on the chosen OS, there are different techniques to abstract/describe the hardware/SoC on which the OS is running, such that the kernel of the OS can work with an abstract description of the hardware components – peripherals CPU cores, hardware accelerators, interrupt lines, etc. For Unix Like Operating Systems such as VxWorks, Linux, etc. there is the tree structure data format called Device Tree. It is used to describe the hardware in a format that can be compiled as a binary blob and at boot time loaded by the Kernel. Although not so popular in applications where RTOSs are used, Device Tree starts to gain popularity also with Real-Time Operating Systems. Other common hardware abstraction methods for hardware in  RTOS applications include writing standardized C routines that are well documented. The specification/documentation of the various APIs acts as a todo list for developers that implement the hardware abstraction layers. This will, later on, be used in the upper kernel layers/device drivers,  a widespread specification is Common Microcontroller Software Interface Standard (CMSIS) which is implemented by many silicon vendors.

Device Driver Development

Once the bootloader and the low-level hardware abstractions are done, the OS is ready to boot on the custom platform and the Kernel customization development can start. New functionality is added in terms of device drivers such that the various OS software stacks can be reliably interfaced with the various hardware peripherals, on-chip hardware accelerators, etc. As well as customization for existing drivers, depending on the type of OS Opensource vs proprietary, the amount of work will be centered around customization of existing opensource drivers or development of new ones from scratch based on guidelines and sample drivers from the OS supplier.

OS Stacks Development & Integration

For the OS to be able to reliably provide the application services the needed functionalities in terms of hardware and software resources, various software stacks such as networking, USB, video, audio, etc. need to be integrated or further developed such that they met the requirements of the application at hand. In general, most OS’es, proprietary, and Open-Source have already well-tested standard software stacks that can provide all required functionalities for the application layer. The only need in terms of custom development is isolated customization and integration work, such that only the required components are integrated and properly configured according to the needs of the overall application.

Root File System Customization

Embedded applications rely in general on a whole suite of tools that are needed along with them such that they can reliably provide the needed functionalities. Thus demanding that the rotfs are custom configured to include the various packages that the application needs.


As with any custom development, the developed BSP also needs to be tested and benchmarked according to the specific application KPIs such that the overall software platform has a solid foundation on which it can function properly at the expected performance. To reliably perform all the tests the infrastructure needs to be seated up in such a way that tests from unit to system test can be developed and integrated on a continuous integration pipeline.


In conclusion, the development of a custom Board Support Package is a complex development work that is highly dependent on the type of OS being chosen and the underlying characteristics of the hardware and the application that is supposed to run on top of the OS, as it dictates the features that need to be developed at both kernel/BSP level and OS Middleware level.

See other articles:

QEMU development during Global Chip Shortage

QEMU Development

Considering the current developments in the global market, especially having the issue of a Global Chip Shortage, there are some issues to be addressed

Read More »

Yocto Devtool

A command-line utility by the name of devtool serves as the foundation of the extensible SDK. With the help of this tool, you may

Read More »

Advantages of Outsourcing

Nowadays, most embedded systems have functionalities implemented in software. The usage of embedded software by electronics manufacturers for expanded functionality, improved quality, and reusability

Read More »


OpenRC is a dependency-based init system that was designed to work with Unix-like computer operating systems. It keeps compatibility with the system-provided init system,

Read More »

Yocto Project

Yocto Project is an open source community project that helps developers to create customized systems based on Linux. It has an accessible toolset that

Read More »

Leave a Reply

Your email address will not be published.