How to Transition from Mechanical Automation to Embedded Linux?

Recently, many students majoring in mechanical automation have come to ask me how to transition to embedded systems after graduation, specifically how to learn and find jobs. Most of them are recent graduates or about to graduate students who have been exposed to C language during their studies, and many have self-studied microcontrollers and ARM. Some have even done some project designs, but they have limited knowledge about embedded hardware, system development, and Linux driver principles. Although they have studied, they often find it difficult to understand and remember the foundational knowledge taught by their instructors.

Here, I want to say that embedded systems is a highly practical discipline that encompasses a wide range of knowledge. Only through hands-on practice, programming, debugging, extensive reading, and critical thinking can one truly master embedded development technology.

How to Transition from Mechanical Automation to Embedded Linux?

For beginners, even if they are learning embedded systems independently, they often don’t know where to start amidst the plethora of tutorials and textbooks, nor do they know which knowledge points are essential, leading to confusion. After months of effort, they may still find themselves lost and unable to enter the field of embedded development.

So, how can one start learning embedded development from scratch? Based on my own learning experiences and years of teaching embedded Linux, I would like to share some thoughts and suggestions on learning embedded systems, hoping to be of help.

01

Master the Basics

Embedded systems is a comprehensive discipline that integrates computer hardware technology, software technology, and electronic circuit technology. The knowledge involved is extensive, including digital circuits, analog circuits, computer architecture, microcontroller fundamentals, C language basics, operating systems, data structures, compiler principles, computer control, and computer networks.

Before truly learning embedded development, one should be able to independently write and debug a program of 300 to 500 lines in C, understand the basic syntax rules and usage of C, and grasp the concept of pointers and their flexible use.

In terms of computer architecture, one should understand the major components that make up a computer system, the structure of the computer system, the system bus, and the relationship between the processor and peripheral devices. It is important to understand how the processor and peripherals coordinate to complete a task, and how software controls hardware through registers.

For digital and analog circuits, one should understand their basic principles and concepts and be able to interpret simple circuit diagrams. Understanding the concepts of registers and timing in digital circuits is also crucial, as is being able to read chip manuals and timing diagrams. For other foundational courses, it is essential to grasp basic concepts and their applications.

For students in electronics, automation, communication, and computer-related majors, most of the aforementioned courses are typically included in the foundational or specialized courses offered during the second and third years. Students from other majors, such as mechanical automation design, should also supplement their studies with these courses. Although they may not have deep practical experience, they should still have a basic understanding of key concepts and knowledge. By strengthening their learning in weaker areas, they can establish a solid foundation for learning embedded development. During this foundational phase, the most important subjects are C language and microcontroller basics. Ideally, one should be able to develop a small microcontroller program in C, such as implementing serial communication between a microcontroller and a PC or controlling an LED display. During this period, the essential learning tool is a microcontroller development board.

02

Embedded Linux Application Development

After completing the foundational knowledge in embedded development, you will have a certain level of competence and can start designing embedded systems based on microcontrollers. Microcontroller programming is indeed a form of embedded programming, but here we consider it a foundational step rather than the true essence of embedded system development. Our focus is on application and driver development on embedded platforms with operating systems, particularly on embedded Linux.

While microcontroller development was once very popular, it is still widely used in simpler systems today. As hardware costs continue to decrease, more complex embedded devices generally adopt embedded Linux operating systems. Developing on an embedded Linux platform greatly enhances development efficiency and improves system stability and reliability while reducing costs.

Since Linux is an open-source operating system, you can understand the kernel’s implementation mechanisms by studying the Linux kernel. If needed, you can even modify the kernel source code to improve system performance. Moreover, the global community involved in Linux development is vast, and there is a wealth of embedded Linux development resources and source code available online. Many functionalities you need can be found in related source code online, which can significantly enhance your work efficiency and technical skills.

In recent years, with increasing participation in Linux development, the stability and real-time capabilities of Linux systems have improved significantly. Linux systems are now widely used on both servers and embedded device platforms. Major communication giants like Huawei, ZTE, and Lucent have started migrating their underlying platforms from VxWorks to Linux, making embedded Linux a significant direction in the development of embedded technology. For these reasons, my recommendation is to focus on embedded Linux development. Compared to other embedded platforms like Windows CE, you can truly learn more and grasp the essence of embedded technology while aligning with the industry’s development direction, making it less likely to be obsolete due to rapid technological advancements.

With a foundational understanding of embedded development and knowledge of why we should learn embedded Linux development, we can now start the hands-on learning process. But how do we begin learning embedded Linux development, and where should we start?

03

Common Misconceptions in Learning Embedded Linux

Many students at this point start buying Linux books, borrowing a pile of books from the library such as “Basic Linux Usage Tutorial,” “Deep Analysis of Linux Source Code,” “Linux Scenario Analysis,” and “Advanced Linux Usage Guide,” etc. After holding these books for 10 days to half a month, they still feel lost. The initial enthusiasm for learning gradually fades, and they end up giving up without entering the field of embedded development. The root cause is that they have not found the right method for learning embedded development. There are methods to follow for everything, and finding the right learning method often leads to better results; otherwise, it may result in wasted effort.

How to Transition from Mechanical Automation to Embedded Linux?

Mistake 1: Fully Immersing in Learning Desktop or Server Version of Linux

Many students who want to learn embedded Linux often ask me how to learn embedded Linux development without knowing Linux. They spend a lot of time and energy studying desktop versions of Linux, such as Red Hat, Fedora, Ubuntu, etc., and become familiar with Linux configuration and commands, thinking that this is sufficient for learning embedded Linux development. In reality, this is a misconception.

The desktop Linux environment is merely a development tool for embedded Linux. Our goal is not to master the configuration and usage of Linux servers; advanced configurations and usage of Linux servers belong to a different domain and are not part of embedded Linux discussions. In embedded Linux development, we use the desktop environment simply as a tool to run embedded Linux development tools, such as the gcc compiler and make tools, to develop our embedded Linux applications. For embedded developers, there is no need to spend excessive time studying desktop and server applications; just understanding the basic operations is sufficient. Modern desktop Linux systems have user-friendly graphical interfaces that offer ease of use comparable to Windows. For example, many operations in Ubuntu can be completed through a graphical interface, eliminating the need to memorize every Linux command. Familiarizing oneself with the desktop system’s basic operations can be achieved in just 1-2 days.

Mistake 2: Directly Reading the Linux Kernel Source Code

Many students eager to learn Linux attempt to read the Linux kernel source code without having any understanding of what Linux is. They spend a lot of time on books like “Deep Analysis of Linux Source Code” and “Linux Scenario Analysis,” but end up confused and unable to make sense of it all, eventually giving up. This is another common misconception in learning embedded Linux. After acquiring a certain level of embedded Linux development knowledge, reading the Linux source code with a specific purpose can significantly enhance your technical skills. However, attempting to read the kernel source code without any foundational knowledge is futile and can lead to frustration.

04

How to Correctly Learn Embedded Linux Development?

Having analyzed two common misconceptions in learning embedded Linux development, how can we correctly approach this learning process?

Learning embedded Linux should begin with developing embedded Linux applications, without initially worrying about the embedded hardware platform or the underlying Linux drivers. Focus on designing and developing embedded Linux applications on existing platforms. Learning embedded Linux development is not merely about reading books; it requires extensive practice, programming, and debugging. Unlike typical PC or server application development, embedded applications must be burned onto embedded boards or development boards for execution, so the first step is to acquire a development board.

Once you have the development board, you can start learning about setting up the embedded Linux development environment, the embedded Linux development model, kernel porting and file systems, application porting, multi-process and multi-threaded application design, and network programming. If you are interested in embedded databases or graphical software development, you can further explore embedded Linux database development or QT-based graphical application design. After each chapter, you should conduct relevant experiments to validate what you learned from the books while improving your coding and debugging skills. Depending on the learner’s background, this process may take 1 to 2 months.

Upon completing these courses, you will have the ability to design and develop applications on existing embedded Linux platforms and can work in embedded software companies, handling upper-level application development tasks. However, at this stage, you may not yet have the skills to develop embedded Linux systems and drivers, meaning you can only work on pre-built embedded Linux platforms. To gain the capability to reconstruct an embedded Linux hardware and software platform based on specific needs, you will need to progress to the next stage of learning: embedded Linux system and driver development.

05

Embedded Linux System and Driver Development

With a foundation in developing applications on embedded Linux platforms, you will have a certain understanding of Linux functionalities, the interfaces and system calls it provides for applications, and how to utilize device drivers in application design. With this knowledge, you can delve deeper into Linux system principles and driver development, kernel customization, file system construction, bootloaders, and other low-level knowledge.

To further study embedded Linux system and driver development, you will need to cover a vast array of topics, including software, hardware, and operating system knowledge. Recommended learning paths include ARM architecture, S3C2440 microprocessor interface design, clock systems, LCD interface, storage controllers, and memory allocation, NAND FLASH and NOR FLASH interfaces, etc. Upon mastering these topics and validating them through experiments, you will be well-equipped for embedded Linux system and driver development, capable of handling most driver development tasks based on Linux platforms. Depending on individual circumstances, this phase of learning may take three months to half a year. After this stage, you will have a solid foundation in embedded Linux development and will no longer be considered a beginner, but rather an advanced practitioner in this field.

06

Elevating Your Skills

Having gained a deep understanding of embedded kernels and driver development, writing drivers will no longer pose challenges for you. Basic issues during development will not stump you. You may want to optimize system performance, such as improving real-time capabilities, enhancing system startup speed, or optimizing memory management mechanisms. To achieve a profound understanding of kernel mechanisms, you will need to study the Linux kernel source code in detail, referring to books like “Deep Analysis of Linux Source Code” and “Linux Scenario Analysis” to grasp the implementation mechanisms and principles of various Linux components, as well as any potential issues. Only by thoroughly understanding existing code and mechanisms can you propose better improvement plans. If you reach this level, you will be among the top experts in the field.

Above are some methods and steps for learning embedded systems based on my experiences and teaching in embedded training. These are merely my views on learning embedded systems, hoping to assist those interested in learning embedded Linux but unsure where to start. Of course, each individual’s foundation and circumstances differ, and everyone has their own suitable learning methods. The learning methods and ideas summarized in this article are for reference only, and I hope everyone can find a suitable way to learn embedded development and soon enter the field of embedded development.

If you still do not understand the techniques and methods for learning embedded Linux after reading the above, or are unsure of your next steps in the learning process, you can sign up for a live class on August 19 (Wednesday) at 8 PM, where I will share my technical experiences on transitioning from mechanical automation to embedded systems for recent graduates. This will help everyone with zero foundation to get started in embedded systems and navigate the confusion of job hunting, leading everyone to master continuous professional growth, obtain high-paying positions, and enhance personal competitiveness.

Live Class Topic: Helping Mechanical Engineering Graduates Transition to Embedded Systems (Special Session)

Live Guest: Wei Dongshan, Senior Embedded Mentor with 10+ Years of Experience

Live Time:August 19, 2020 (Wednesday) at 8 PM

Scan the QR code to register for the live class!

How to Transition from Mechanical Automation to Embedded Linux?

Why Hold This Live Class?

To assist students majoring in mechanical design and manufacturing, materials engineering, control engineering, industrial design, and equipment automation, providing 0 foundation entry into embedded systems through more than 10 years of industry experience sharing, guiding students through the confusion of learning embedded systems, achieving personal workplace value, and obtaining high salaries.

This live class features Teacher Wei Dongshan’s first live appearance, which occurs only once a year. If missed, you will have to wait another year! If you are looking to enter the embedded field, don’t miss out!

Live Class Knowledge Points:

1. How to learn embedded Linux 2. The difference between microcontrollers and embedded Linux 3. What is the order of learning embedded systems 4. Is assembly language knowledge necessary for learning embedded systems?

Guest Profile:

Wei Dongshan, graduated from the University of Science and Technology of China, with dual degrees in physics and software, author of the bestselling book “Complete Manual of Embedded Linux Application Development,” with over 10 years of experience in the embedded Linux industry.

Early registration for the live class will entitle you to receive a copy of the original electronic book “Embedded Linux Application Development Manual” by Teacher Wei Dongshan!

Scan the QR code to join the group and register immediately!

How to Transition from Mechanical Automation to Embedded Linux?

How to Transition from Mechanical Automation to Embedded Linux?

Leave a Comment