A Board Support Package (BSP) is a set of source files to create a usable operating system (OS). BSPs usually consist of multiple things: low-level hardware description files, proprietary firmware, bootloader source code, the code of the OS itself, and user space applications, which run on top of the OS. Together, they form the BSP of a specific OS version for a specific type of hardware.
Android BSPs are less common than Linux ones. Linux has a longer history in embedded systems for IoT (Internet of Things) devices, so it has a much broader ecosystem of available BSPs.
As demand for embedded Android solutions increases, the need for Android BSPs grows.
Let's take a look at what an Android BSP is, and how to find and customize Android BSPs for your specific hardware platform.
What is an Android BSP?
An Android Board Support Package (BSP) refers to the package of device drivers, kernel customizations, bootloaders, and any necessary patches or tweaks to build the whole Android OS and ensure that it can run on the hardware you're targeting.
Should you choose an existing Android BSP, or develop your own?
Using an existing Android BSP significantly speeds up development for a specific Android board. Developers are freed up from the challenging task of kernel programming and driver development, and can instead focus on more product-related features.
Developing a BSP from scratch can take months—sometimes years—of development. In some cases, it isn't even possible to develop because some peripheral devices might rely on proprietary drivers or firmware, which can't be developed easily.
Developing an Android BSP when your team isn't familiar with it can be a herculean task, requiring immense amounts of learning. You'll significantly speed up your time-to-market by relaying on an existing Android BSP and customizing it to your needs, instead of writing it yourself.
Once you're ready to develop the final hardware product, partnering up with a team who is familiar with Android BSP customizations is boosting your time-to-market even further.
How to get an Android board support package
Although fewer options exist for board support packages in Android than in Linux, it is indeed possible to obtain Android BSP board support packages for evaluation and development boards. Every reputable hardware manufacturer will provide a BSP for their hardware. The option exists mostly for volume orders, but it should still be possible to request a functioning BSP for the hardware of your choice.
However, it's important to evaluate several technical quality indicators for these BSPs. For example, the Android and kernel version should be at least 11, although 13 and 14 are preferred. Some BSPs also lack Android's Verified Boot feature, which cryptographically verifies the integrity of the Android OS and kernel before executing it. If Android Verified Boot is missing from the BSP, it will need to be added during customization.
Further quality aspects also need to be verified by a team experienced in Android BSP quality assessment and customization to ensure that the BSP is secure and works with the hardware configuration you're targeting.
What's needed to carry out Android BSP development?
If you want to dive into the world of Android BSP development and hope to build a team of in-house Android BSP developers, your team will need knowledge of:
- Bootloader programming
- Embedded C programming
- Low-level debugging
- Linux kernel development
- Customizing and porting of Android OS stack
Technical skills aside, the other requirement is budget. Creating an Android BSP from scratch can cost hundreds of thousands of dollars, maintenance and updates not included.
How does Android BSP architecture relate to the Android HAL (hardware abstraction layer)?
The different layers involved in Android BSP architecture might feel confusing. People talk about firmware, kernels, HALs, and BSP in Android architecture which aren't the same, but whose meanings intersect.
Let's dive into the meanings of these terms:
Firmware is a general term that relates to low-level code, which interacts directly with the underlying hardware. Although drivers might sometimes be included in this definition, firmware typically refers to hardware code that allows the different parts of the hardware to communicate with each other.
A kernel refers to the layer above the firmware, and is directly related to the operating system. A kernel could be considered the core of the operating system, providing the lowest possible non-hardware layer of the device. Android uses a Linux kernel.
The hardware abstraction layer (HAL) is a set of Android-specific APIs that allow Android OS developers to interact with the underlying hardware in an agnostic manner. Android OS developers access the HAL to write code that interacts with the underlying hardware, but which the underlying kernel and/or firmware must explicitly execute.
Although the HAL code to switch Bluetooth on and off would be the same in different AOSP ROMs, the underlying implementation at the hardware level would frequently differ.
A BSP consists of everything necessary to allow a particular OS to function on a given hardware configuration. That might include firmware code or kernel code. It also includes device driver code and a bootloader.A BSP is also sometimes called hardware-dependent software (HDS), emphasizing its tight coupling with the hardware.
What is the difference between BSP and OS?
A BSP is an integrated collection of components required to make an OS function on a given hardware platform, including the OS, drivers, and low-level kernel code. Whereas OS code alone might contain abstraction APIs to access underlying hardware, the BSP must actually implement those calls.
What is the difference between BSP and drivers?
Drivers are a core element in any BSP. Drivers let the operating system communicate with and control hardware devices. In addition to drivers, BSPs also contain bootloader code, config files for that specific hardware device, and sometimes diagnostic and test utilities.
Customize your Android BSP
Other important questions when working with BSPs are:
- Who is the right contact for getting a BSP?
- Who owns the rights to it?
- Who introduces required OS customizations?
- Who is responsible for building the OS from a BSP?
- Who maintains it long-term and applies security patches?
We can help with all these questions. Whereas emteria doesn't develop Android BSPs from scratch, we can help to manage and customize BSPs for your specific product. You keep all rights to the final package, and we can maintain it for you and take care of updates.
To learn more about how we can help you customize your Android BSPs, contact us for a no-obligation chat.
Android board choices
A guide to the best dev board
Discover the best SBCs for Android development, their selection criteria and benefits ✔️ Get started prototyping with our comprehensive Android board guide!