Click the blue "One Click Linux" in the upper left corner and select "Set as Star"
Be the first to see valuable articles
☞【Valuable】Embedded Driver Engineer Learning Path
☞【Valuable】A Comprehensive Linux IoT Project for Your Resume
☞【Valuable】Linux Embedded Knowledge Points – Mind Map – Free Access
☞【Thanks】My new book “Learning ARM from Scratch” is officially launched
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 discuss embedded systems (embedded devices). Wikipedia defines embedded systems as follows:
An embedded system (<span>Embedded System</span>
) is a computer system designed to be embedded within mechanical or electrical systems, with specific functions and real-time computing performance.
In simple terms, an embedded system is a computer system with specific functions.
There are many embedded devices around us, commonly seen in consumer electronics such as smartphones and digital cameras, as well as in smart home devices like smart speakers, smart TVs, and robotic vacuum cleaners that have gained popularity in recent years.
It also includes devices like anti-lock braking systems in cars and various medical imaging systems.
In summary, we may encounter 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.
2. Embedded Engineers
As the application of embedded devices becomes increasingly widespread, the demand for related talent is also growing. So what types of talent are there?
The most important one 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 of the embedded system and using appropriate tools to create the PCB layout;
-
Collaborating with embedded software engineers for system debugging later on.
Embedded software engineers can further be divided into two types:
-
-
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.
As I am involved in BSP development, we will focus on BSP engineers here.
3. BSP Engineers
BSP, short for <span>Board Support Package</span>
, means Board Support Package in Chinese.
A BSP engineer 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 and creating PCB layouts, and factories will produce corresponding circuit boards based on the PCB designs.
However, 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, and then to write application software to achieve its specific functions.
The code that ensures the board operates normally and stably belongs to the board support package.
What are the specific tasks of a BSP engineer?
Let’s first discuss embedded devices. Earlier, we talked about many embedded devices; 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 or STM series microcontrollers.
For these simple systems, the requirements for software developers are relatively low, and there may not be such detailed divisions of labor as I mentioned earlier; sometimes, a single person may complete tasks from schematic design to development.
For devices that run operating systems, the situation is different. Generally, the software development for devices that run operating systems is divided into three stages:
1. Bring Up the Board
The first batch of boards does not come with any software.
BSP engineers need to modify the reference code obtained from the chip manufacturers in conjunction with the hardware schematic to debug the board, ensuring that the operating system 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 BSP engineers, as it requires both breadth and depth of knowledge.
It involves understanding computer principles, operating systems, processor architectures, 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, we will enable all peripherals and provide corresponding software control interfaces for the applications to be developed later.
This process essentially involves the development of drivers under the corresponding operating system, requiring knowledge of how hardware works and related operating system knowledge.
3. Develop Applications 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 should be operational.
The task of this stage is to develop application programs to achieve specific functions, using the software interfaces provided in the second stage to control the devices on the board to accomplish this.
4. Skills Required for BSP Engineers
The first two stages described above relate to BSP development, while the third stage pertains to embedded application software development.
In summary, the main skills that BSP engineers should possess include:
Knowledge of Computer Principles
Understanding related operating systems and in-depth study of a specific operating system; currently, studying the Linux operating system is the choice for most people;
Basic Linux (development environment) operations
Proficient in C language 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 master some general software, such as:
Code management software, commonly like Git;
Code reading software, which varies by personal preference, such as: OpenGrok, Source Insight, or the combination of ctags/cscope plugins under Vim.
Original article:https://luomuxiaoxiao.com/?p=170
Source from the internet, copyright belongs to the original author. If there is any infringement, please contact for removal.

This is a new book by One Click, thank you for your support!
Follow and reply 【1024】 to receive a wealth of Linux materials
Collection of Wonderful Articles
Article Recommendations
☞【Album】LinuxGetting Started
☞【Album】Computer Networks
☞【Valuable】Embedded Driver Engineer Learning Path
☞【Valuable】All Knowledge Points of Linux Embedded – Mind Map