Today, we will learn what a BSP engineer is.
Embedded Systems
To understand what an embedded software engineer is, we first need to discuss embedded systems (embedded devices). According to Wikipedia, an embedded system is defined as follows:
An embedded system is a computer system that is embedded within a mechanical or electrical system, designed for specific functions and real-time computing performance.
In simple terms, an embedded system is a computer system with a specific function.
We encounter many embedded devices in our daily lives, such as smartphones, digital cameras, and other consumer electronics. Additionally, in recent years, devices like smart speakers, smart TVs, robotic vacuum cleaners, and smart home devices have become popular.
Of course, this also includes automotive anti-lock braking systems, various medical imaging systems, and more.
In summary, we may come across embedded systems in various industries, especially with the advent of the smart era, where many non-smart devices will gradually be replaced by embedded devices, such as smart locks.
Embedded Engineers
As the application of embedded devices becomes more widespread, the demand for related talent is also increasing. So, what types of talent are there?
The most important among them is the embedded engineer.
Embedded engineers can be divided into two categories: embedded hardware engineers and embedded software engineers.
The main responsibilities of embedded hardware engineers include:
- Designing the hardware schematic for embedded systems and using appropriate tools to create PCB layouts;
- Collaborating with embedded software engineers to debug the system.
Embedded software engineers can further be divided into two types:
- BSP engineers
- Embedded application software engineers
Embedded application software engineers are primarily responsible for writing application software based on embedded systems, similar to QQ or Word on Windows.
Since I work in BSP, we will focus on discussing BSP engineers here.
BSP Engineers
BSP, short for Board Support Package, refers to the software that supports the hardware of a specific board.
A BSP engineer, as the name suggests, is responsible for the development, debugging, and maintenance of the board support package.
What is a Board Support Package?
As mentioned earlier, embedded hardware engineers are responsible for designing hardware and creating PCB layouts, which factories use to produce corresponding circuit boards.
An embedded system requires not only a circuit board but also corresponding software support. The prerequisite for software development is to ensure that the board operates normally and stably, after which application software can be written to achieve its specific functions.
The code that ensures the board operates normally and stably is part of the board support package.
What are the specific tasks of a BSP engineer?
Let’s first discuss embedded devices. We previously mentioned many embedded devices; from a system perspective, some of these devices run operating systems while others do not.
For devices that do not run an operating system, their functions are relatively simple, and the main control chips used are generally simpler, such as the once-popular 51 series microcontrollers or STM32 series microcontrollers.
For these simple systems, the requirements for software developers are relatively low, and the division of labor is not as detailed as mentioned earlier; sometimes, one person may complete the entire process from schematic design to development.
For devices that run operating systems, the situation is different. Generally, the software development for devices running operating systems is divided into three stages:
1. Bring Up the Board
The first batch of boards shipped does not contain any software.
The BSP engineer needs to modify the reference code obtained from the chip manufacturer based on the hardware schematic, debug the board, and ensure that the operating system on the board can operate normally and stably;
thus providing a stable development and debugging environment. This process is called bringing up the board, commonly referred to as Bringup.
This is one of the most valuable tasks for a BSP engineer, as it requires a certain breadth and depth of knowledge.
This involves knowledge of computer principles, operating systems, processor architecture, and some hardware knowledge.
In summary, the core task is the porting and trimming of the kernel.
2. Enable All Devices on the Board
In the previous stage, the CPU and basic components of the board can operate normally. In this stage, all peripherals will be enabled, and corresponding software control interfaces will be provided for the application programs to be developed later.
This process essentially involves the development of drivers under the corresponding operating system, requiring an understanding of hardware operation principles and relevant operating system knowledge.
3. Develop Application Programs for the Board
As mentioned earlier, an embedded system is a system with a specific function, and all hardware and software on it should serve this function.
By the end of the second stage, all devices on the board should be operational.
The task of this stage is to develop application programs to achieve a specific function, using the software interfaces provided in the second stage to control the devices on the board to complete this function.
Skills Required for BSP Engineers
The first two stages belong to the content of BSP development, while the third stage pertains to embedded application software development.
In summary, the main skills that a BSP engineer should possess include:
Knowledge of Computer Principles
Understanding of operating systems, with a focus on studying a specific operating system. Currently, researching the Linux operating system is the choice for most people.
-
Basic Linux (development environment) operations
-
Proficient in C programming and some knowledge of C++/Assembly
Knowledge of Hardware and Circuit Principles
Familiarity with common interface protocols such as I2C, SPI, UART, USB, etc.
As a software developer, one must also be familiar with some general software, such as: code management software, commonly like git, etc.
Code reading software, which varies by personal preference, such as: opengrok, source insight, or vim with ctags/cscope plugin combinations, etc.