What exactly is a BSP engineer? Let’s take a look at this article.
1. Embedded Systems
To understand what an embedded software engineer is, we first need to talk about embedded systems (embedded devices). The definition of embedded systems according to Wikipedia is as follows:
Embedded systems (<span>Embedded System</span>
) are a type of computer system that is embedded within a mechanical or electrical system, designed to perform specific functions with real-time computing performance.
In simple terms, an embedded system is a type of computer system with specific functions.
There are many embedded devices around us, common ones include smartphones, digital cameras, and other consumer electronic devices, as well as the recently popular smart devices such as smart speakers, smart TVs, and robotic vacuum cleaners.
Of course, it also includes devices like anti-lock braking systems in cars, various medical imaging systems, etc.
In summary, we may encounter embedded systems in various industries, especially with the advent of the smart era, many non-smart devices will gradually be replaced by embedded devices, such as smart locks.
2. Embedded Engineers
As the application of embedded devices becomes more widespread, the demand for related talents is also increasing. So, what are the relevant talents?
The most important one is the embedded engineer.
Embedded engineers can be divided into two types: embedded hardware engineers and embedded software engineers.
The main responsibilities of embedded hardware engineers include:
-
Designing the hardware schematic of embedded systems and using the corresponding tools to draw PCB diagrams;
-
Collaborating with embedded software engineers to debug the system in the later stages.
Embedded software engineers can be further divided into two types:
-
-
Embedded application software engineers
Embedded application software engineers are mainly responsible for writing application software based on embedded systems, similar to QQ or Word on Windows.
Since I am involved in BSP, we will focus on discussing BSP engineers here.
3. BSP Engineers
BSP, short for <span>Board Support Package</span>
, means Board Support Package in Chinese.
A BSP engineer, as the name suggests, is responsible for the development, debugging, and maintenance of the board support package.
So, what is a board support package?
As mentioned earlier, embedded hardware engineers are responsible for designing hardware, drawing PCB diagrams, and factories produce corresponding circuit boards based on the PCB diagrams.
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 works normally and stably, and then to write the corresponding application software to realize its specific functions.
The code that ensures the board works normally and stably belongs to the board support package.
What are the specific tasks of a BSP engineer?
Let’s first talk about embedded devices. As mentioned earlier, there are many embedded devices, and from a system perspective, some of these devices run operating systems while others do not.
For devices that do not run operating systems, their functions are relatively simple, and the main control chips used are generally simpler, such as the once-popular 51 series microcontrollers, STM series microcontrollers.
For these simple systems, the requirements for software developers are relatively low, and there is not as detailed a division of labor as I mentioned earlier; sometimes, the entire process from drawing the board to lighting it up and developing it is completed by one person.
For devices that run operating systems, it is different. Generally speaking, 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.
BSP engineers need 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 work 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.
It involves 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 work 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.
The essence of this process is the driver development under the operating system, which requires knowledge of how hardware works and relevant operating system knowledge.
3. Develop Application Programs for the Board
As mentioned earlier, embedded systems are systems with specific functions, and all hardware and software on them should serve this function.
By the end of the second stage, all devices on the board can be used normally.
The task of this stage is to develop application programs to achieve certain specific functions, using the software interfaces provided in the second stage to control the devices on the board to complete these functions.
4. Skills Required for BSP Engineers
The first two stages mentioned above belong to the content of BSP development, while the third stage is part of the embedded application software development process.
In summary, the main skills that BSP engineers should possess include:
Mastering Knowledge of Computer Principles
Mastering knowledge related to operating systems, with a deep study of a specific operating system; currently, studying the Linux operating system should be the choice for most people;
Basic operations in Linux (development environment)
Proficient in C programming and some knowledge of C++/Assembly.
Mastering Certain Hardware and Circuit Principles
Familiarity with common interface protocols such as I2C, SPI, UART, USB, etc.
Of course, as a software developer, one must also master some general software, such as:
Code management software, commonly used ones like git;
Code reading software, which varies by personal preference, such as OpenGrok, Source Insight, or the combination of ctags/cscope plugins under Vim.
Recently, many friends have asked me for essential materials for programmers, so I dug out my treasure trove and will share it for free!
Scan the QR code on the poster to get it for free.
