How to Become an Excellent Embedded BSP Engineer?

Click the business card below to follow our public account

Abstract: BSP, short for Board Support Package, 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? What is a BSP engineer? How can one become an excellent embedded BSP engineer?

1. Embedded Systems

To understand what an embedded software engineer is, we first need to talk about embedded systems (embedded devices). According to Wikipedia, an embedded system is defined as:

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 simpler terms, an embedded system is a computer system with a specific function. There are many embedded devices around us, commonly seen in consumer electronics like smartphones and digital cameras, as well as in smart speakers, smart TVs, robotic vacuum cleaners, and smart home devices that have gained popularity in recent years. It also includes systems in automobiles, such as anti-lock braking systems, and various medical imaging systems. In short, we may encounter embedded systems in various industries, especially with the advent of the intelligent era, where many non-intelligent 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 kinds of talents are needed? 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 responsibility of an embedded hardware engineer is to design the hardware schematic for embedded systems, use appropriate tools to create PCB layouts, and later collaborate with embedded software engineers to debug the system.
  • Embedded software engineers can be further divided into two types: BSP engineers and embedded application software engineers. The embedded application software engineer is 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 BSP engineers here.
How to Become an Excellent Embedded BSP Engineer?
Classification of Embedded Engineers

3. BSP Engineers

BSP, short for Board Support Package, 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, creating PCB layouts, and factories will produce corresponding circuit boards based on the PCB layouts. An embedded system requires not only the 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 corresponding application software to achieve its specific functions. The code that ensures the board works normally and stably belongs to the board support package.

So what are the specific tasks of a BSP engineer?

We will first discuss embedded devices. Previously, we talked about many embedded devices; from a system perspective, some of these devices run an operating system while others do not. For devices that do not run an operating system, their functionality is relatively simple, and the main control chips used are generally simpler, such as the once-popular 51 series microcontrollers and STM series microcontrollers. For these simple systems, the requirements for software developers are relatively low, and the division of labor is not as detailed as I mentioned earlier; sometimes, the entire process from drawing the board to lighting it up and developing it is completed by a single person. However, for devices that run an operating system, it is different. Generally speaking, software development for devices running an operating system consists of 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 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, also known as <span>Bringup</span>. 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. The core task is to port and trim the kernel.

2. Enable All Devices on the Board

In the previous stage, the board’s CPU and basic devices can work normally. In this stage, all peripherals will be enabled, and software control interfaces will be provided for the application programs to be developed later. This process essentially involves driver development under the corresponding operating system, requiring knowledge of hardware principles and related 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 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 belong to the content of BSP development, while the third stage belongs to the process of embedded application software development. In summary, the main skills that a BSP engineer should possess include:

  • Knowledge of computer principles;
  • Knowledge of operating systems, with a deep understanding of a specific operating system; currently, studying the Linux operating system should be the choice for most people;
  • Basic Linux (development environment) operations;
  • Proficient in C programming language and some knowledge of C++/assembly;
  • Knowledge of 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 like Git;
  • Code reading software, which varies by personal preference, such as OpenGrok, Source Insight, or Vim with ctags/cscope plugin combinations.

Simply put, as an embedded BSP engineer, one must understand hardware principles and be able to write corresponding software to ensure normal operation. The learning and development difficulty is self-evident. So, what knowledge should one learn, and how should one study to become a qualified embedded BSP engineer?

Simply put, as an embedded BSP engineer, one must understand hardware principles and be able to write corresponding software to ensure normal operation. The learning and development difficulty is self-evident. So, what knowledge should one learn, and how should one study to become a qualified embedded BSP engineer?

5. Professional Background

Let’s first talk about professional backgrounds. From my understanding, those engaged in embedded BSP development mainly come from computer science and electronic information majors. These two majors are the most relevant to embedded BSP. Of course, some colleagues have transitioned from other majors (like me; my friends know that I studied physics in college, which is relatively unrelated to this field). Therefore, if you are from computer science or electronic information majors, your foundation is already strong enough. As we learned from the previous article, the main work of a BSP engineer is to ensure the stability of hardware and its operating system, so understanding hardware principles, computer principles, and operating systems is the basic requirement, and both majors cover basic hardware principles like analog circuits and digital circuits, as well as computer principles and a high-level language, which are core knowledge for BSP engineers. Of course, students from other majors need not be discouraged, as mastering the courses in college indicates a certain level of understanding. So even if you haven’t undergone systematic learning, as long as you have enough interest and self-discipline, self-study is certainly possible.

6. Recommended Books

Back to the point, let’s introduce how to study based on the knowledge required for BSP engineers mentioned in the previous article.

1. Computer Principles

As mentioned earlier, embedded systems running an operating system are typical computer systems. If we are to port an operating system to a computer, understanding the details of computer operation principles is essential for development. This knowledge is especially useful when dealing with difficult problems. I recommend a classic book on computer principles—“Computer Systems: A Programmer’s Perspective” (translated as “深入理解计算机系统”). This book systematically explains the basic principles of computer program storage and execution from a programmer’s perspective, along with examples analyzing how to optimize computer programs. The second part introduces important concepts in operating systems based on computer principles and elaborates on these concepts from the perspective of program execution.

Since 2010, I have repeatedly read this book several times, and each time I find many insights. Therefore, in this blog, I have created a theme specifically to summarize my understanding and insights from this book from the perspective of “the process from a C file written by a programmer to compiling into an executable file and finally running the program.” This book has released three editions since its publication, and I have collected the second edition in English and the latest third edition in high-definition scanned Chinese electronic version (file size 501MB).

2. Basic Linux Operations

Most embedded development is carried out in a Linux operating environment because it has many excellent open-source development tools, which can quickly set up a compilation environment and provide convenient debugging tools. Many students may have never encountered a Linux system at all, feeling lost after booting up, even not knowing how to find files. This is not an issue, as its design philosophy is completely different from the well-known Windows. For programmers, once you adapt to the Linux system, you may not even want to return to Windows. For learning basic Linux operations, I recommend “鸟哥的linux私房菜”, which introduces the Linux system from shallow to deep, covering not only basic operations but also how to reinstall the Linux system, Linux file management, shell scripts, etc. This book primarily targets Linux system administrators, but the first 13 chapters are an excellent choice for beginners in the Linux system.

3. C Language Fundamentals

As mentioned earlier, BSP engineers mainly deal with low-level hardware and systems, so C is the primary programming language. For learning C, I strongly recommend the work of “the father of C language,” Dennis Ritchie—“The C Programming Language”. This book is only a little over 200 pages, with just over 100 pages after removing the appendix, but every word is valuable, and even the example programs in the text are directly from the libc library functions, far more classic than the calculator example in some famous C textbooks in China!

4. Linux Operating System

The Linux system mentioned here is entirely different from the Linux operations above. The Linux operations discussed above refer to your work computer running a Linux system where you need to download, modify, compile, and debug code. Here, the Linux system refers to the Linux system running on your target development board. As a BSP engineer, you need to understand the entire process from powering on the hardware to initializing the Linux system and starting the init process. Of course, this involves a lot of knowledge, so I suggest beginners start with Linux device drivers. The so-called drivers are modules within the Linux system that have a unified framework, where developers only need to fill in C program code to control the corresponding hardware. By learning Linux drivers, you gradually understand the framework of driver programs, principles of concurrent access, and the layered design of Linux, making it much easier to expand to learning other modules or even the entire Linux system. For learning Linux device drivers, I highly recommend “Linux Device Drivers” (translated as “Linux设备驱动”), which takes a small segment of memory to simulate a Linux device and implements a corresponding character device driver, using it as an example to explain common knowledge points in device drivers.

After mastering Linux device drivers, you should have a preliminary understanding and outline of the Linux operating system. The next step should be to systematically understand Linux. Of course, if you have strong willpower, directly reading the Linux source code is also an option. However, I believe it is more important to combine the Linux concepts extracted from driver programs and gain an overall understanding of the Linux system, which brings us to another classic book—“Linux Kernel Development” (translated as “Linux内核设计与实现”). This book omits a lot of details, rarely listing large sections of code, but outlines the principles of Linux design and implementation.

After grasping the principles as a whole, we still lack the specific details of Linux implementation. “Professional Linux Kernel Architecture” (translated as “深入Linux内核架构”) is a good choice, as can be seen from the page count. The original version has 1337 pages, while the Chinese version has 1055 pages.

7. Reading Recommendations

  • When reading the above books, it is recommended to sit in front of the computer and perform every operation mentioned in the book to see if the results match those in the book. This not only deepens understanding but also reinforces memory.

  • Except for “鸟哥的linux私房菜”, the above books are basically in English, and I have provided their Chinese versions. If you are capable, I recommend reading the original versions, as many times the Chinese versions do not accurately convey the author’s meaning. If it is really difficult, you can read the Chinese version, but it is advisable to refer to the original version when encountering doubts or difficulties, as you may find that your misunderstanding is not your problem but a translation issue.

  • The books listed above are all classics. If you don’t understand certain knowledge points, it’s okay to skip them and come back to them later, as you will find many problems naturally resolve themselves. The learning process is also a spiral ascent, and classic books need to be read and re-read to truly grasp their essence.

Article sourced from:https://luomuxiaoxiao.com/?p=170

Statement:

Source “Guo Guo Xiao Shidi”, this account maintains a neutral stance on all original and reprinted articles. The articles are provided for readers’ learning and communication. The copyright of articles, images, etc. belongs to the original author. If there is any infringement, please contact for deletion.
—— The End ——
For more exciting content, please follow our WeChat video account:
How to Become an Excellent Embedded BSP Engineer?
Recommended Reading
Why Must Embedded Developers Learn RTOS?
What Exactly Is Signal Integrity? Even Beginners Can Understand!
In-Depth Article: How Does STM32 Run at the Bottom Level and Control Hardware Step by Step After Compilation?
Share 💬 Like 👍 View ❤️
Support quality content with a “three-action” approach!

Leave a Comment