Click “Ke Yan Achievements” to follow, select “Set as Star“ to avoid getting lost
Hello everyone, I am Ke Yan, I haven’t gone missing,
I just took a trip back in time, just returned from the year 2021, to see the industry development at that time. I can responsibly tell everyone that by 2021, our embedded industry has not been eliminated.
We embedded engineers were still doing our old jobs at that time, new knowledge and new concepts emerged endlessly, but the core hasn’t changed. So everyone can rest assured to learn, our job can last until 2021, isn’t that great?
So is it competitive? Yes, it is very competitive, even more so than the current internet, but don’t worry, those who read this article will definitely outpace those who haven’t.
Why? Because I interviewed a very authoritative old engineer in 2021, and he taught me all his secrets to success, which I will share with you without reservation at the end of the article.
In the previous article, we discussed the learning path for microcontrollers, and this time we will talk about Linux.
As usual, I will present it to you with a mind map.
The article will explain all the content in the mind map. If you want to save a copy to your computer or phone to gather dust, you can follow the public account “Ke Yan Achievements” and reply “Linux” to download it.
Without further ado, let’s get started.
Beginner
Those who have read the following article on the learning path for microcontrollers must know why we are only discussing “Linux” this time.
From Novice to Expert in Microcontrollers
Embedded systems is a very vague concept. Some friends have been learning embedded systems for so long and still can’t explain what embedded systems are.
Let’s clarify the concept first: what exactly is embedded?
Embedded systems actually emerged to distinguish from our PC, personal computer, which is a computer.
Currently, when you build a computer, you need a motherboard, memory, hard drive, CPU, and then buy a power supply, chassis, monitor, keyboard, and mouse to complete it.
Every computer is made up of these standard components. The same motherboard can work with a different model of CPU, and the same CPU can run with different brands of memory.
They can install standard operating systems like Apple, Linux, or Windows, and do the same things: processing text, watching videos, playing games.
But what about embedded systems? It is actually a customization or tailoring of standard computing devices.
It is a computing device used for specific functions.
For example, the smartwatch Aiwachi has a CPU, memory, hard drive, and touchscreen, but it has no keyboard or mouse.
Routers have a CPU, memory, hard drive, and a Wifi module, with one or two buttons, but no screen, keyboard, or mouse.
Package lockers in communities have a CPU, memory, disk, touchscreen, and modules to control locks, but they also lack keyboards and mice.
For these devices, if you change the CPU (MCU) without changing the main control board, it might still work with the same brand and model, but most of them won’t work directly because they are not standard components.
So, embedded systems are tailored computing devices that must have a CPU, memory, and disk. The rest, whether to connect to a monitor or a touchscreen, or whether to connect to a mouse or a game controller, depends on the specific functions or business scenarios.
So what exactly is embedded?
It is embedding a computing-capable main control board inside mechanical or electrical devices to control these devices.
Our task as embedded engineers is to complete the design of hardware and software that customizes and embeds the internal main control board.
Our design goal is usually to achieve usability and reliability while keeping costs as low as possible.
As mentioned in the previous article, products customized with microcontrollers are generally cheaper, while those customized with Linux tend to be more expensive.
What functions does Linux offer, what technology stacks does it have, what businesses can it achieve, and what specific scenarios can it be used in?
Let’s start from four stages.
First is the beginner.
Basic concepts.
First, you need to understand what a computer is: it is a machine composed of digital circuits that can perform calculations, processing text, sound, images, and other data. It generally uses standardized CPU, memory, hard drive, and some external devices.
So what is embedded? As mentioned earlier, it is a computer tailored for a specific purpose.
Then there is the operating system; we commonly use operating systems like Windows, Linux, Mac, Android, and iOS. You need to have a concept of these operating systems. Each operating system has processes and threads, which perform scheduling and handle files, and as a programmer, you should know this.
Next, regarding programs, you should know that a program is essentially a set of instructions that runs on a certain chip, generally installed on the operating system through compilation, downloading, and execution.
As for programming software, you can choose whichever you prefer.
Next, in the internet age, it is essential to understand networks. You need to understand common network protocols and their functions; I have listed some very common protocols in the image, and you should know what they do, although beginners can skip how they work.
Finally, I think the character of an embedded engineer can be summed up in eight words: practical and lovable.
However, I also admit that sometimes I feel good about myself and always think that my code won’t have issues, and if there are issues, it’s someone else’s bug.
Then there is the standard outfit: black-rimmed glasses, plaid shirt, or a black backpack, which I also mentioned in the previous article.
Next is the girlfriend; who needs a girlfriend when you can draw schematics? (Who needs a girlfriend when you can draw schematics…)
Next, we will learn Linux system commands.
As an embedded Linux engineer, you must be proficient in using Linux.
Common commands include directory files, user permissions, system, network, programs, and some other commands. It doesn’t mean you need to learn all of them as a beginner; mastering most of them is sufficient, and you can learn the rest as needed.
The commands I have listed are the essentials that I use almost every day at work.
I remember back in school, my teacher taught Red Flag Linux; I don’t know which one you used in school. To learn, I even took a class to get a certification, the Red Hat RHCT, which is this certification,
In March 2011, exactly 10 years ago, I checked, and it seems that this certification has been renamed. It can comprehensively teach you practical Linux system commands. If you’re interested, you can explore it further.
Next, just learning to use system commands is not enough; we also need to learn some operations for configuring Linux systems, mostly changing configuration files.
For example, configuring environment variables, changing dynamic IP to static, or setting up common services.
Finally, the beginner stage involves the basics of C language, still referencing our C language path diagram, so that beginners can get started with Linux.
The C language learning path can refer to this article:
C Language: From Novice to Expert
It also has four stages: beginner, novice, advanced, and expert. Follow the public account Ke Yan Achievements and reply with C Language to obtain this mind map.
The beginner stage of C language means knowing the basic syntax, constants, variables, expressions, functions, branches, loops, arrays, structures, pointers, and the standard library of C.
Once you master these, you can write programs on Linux.
That’s all for the beginner stage; the main focus is on learning how to use the Linux operating system and the process of writing and running programs on Linux. I wonder if you have reached this level?
If you haven’t reached the beginner level, don’t know C language, and don’t understand operating systems, I can give you one word: “Rush”.
What does it mean? It means you must not linger in the beginner stage; you should rush through it.
If I had to give a time frame, it would be two weeks. Master the basic syntax of C language and Linux system within two weeks. Don’t worry about the complex stuff like multidimensional arrays, function pointers, or polymorphism in C; you can learn them later when needed.
You must not linger in the beginner stage because it can easily lead to a loss of interest in learning. The material learned during this stage is relatively dry; even if you master it, you won’t be able to create anything interesting, spending all day printing Pascal’s triangle, drawing stars, or finding the maximum of ten numbers, which is quite boring.
Give yourself some pressure and quickly pass this stage.
Novice
Next, let’s look at the novice stage.
First is the advancement in C language.
Writing code must adhere to certain specifications; good companies have their own coding standards, including indentation, comments, and naming conventions. You can’t write randomly; you must write code that others can understand so that it is easier to maintain.
Next, data structures remain the same four types. You must master algorithms for sorting and searching, understanding what structures and algorithms to use in what scenarios; I won’t elaborate on this further.
Next, you need to learn how to use code management tools. Scientific code management can improve efficiency and ensure quality, such as git and svn; these are essential skills.
Next, you will learn Linux system programming, which involves file handling, using multiple processes and threads, including synchronization and sharing interfaces.
Then there is network programming, which involves the socket set.
Next is the IO model, including blocking, non-blocking, multiplexing, and signal-driven models that you need to be familiar with.
Once you master the Linux system programming interface, theoretically, you can do any development based on Linux. However, to work more efficiently and complete more complex applications, you need to learn to stand on the shoulders of giants, which means learning to use third-party libraries.
You can install third-party libraries directly via the network, using commands like yum or apt-get.
Another way is to download the source code, configure, compile, and install the source code, and finally use the command -v to check its version to determine if the installation was successful. Both installation methods need to be mastered.
I have listed some commonly used third-party libraries, including unit testing, memory leak checking, database, security, and networking; these libraries are also very commonly used.
Once you learn to install and use third-party libraries, you will have the ability to stand on others’ shoulders.
Next, you need to learn cross-compilation, as embedded Linux needs to be ported to different hardware platforms.
You need to understand what cross-compilation is. It means compiling programs for other processors on your computer; it’s not difficult, just download a toolchain and configure an environment variable, and you’re good to go.
Finally, here’s a practice suggestion: write a network chat program. You can purchase a cloud server from Alibaba Cloud to serve as the server and use your local Linux as the client.
Make a dedicated client for your goddess; from now on, you won’t need WeChat. Let this chat program become proof of your love; does that motivate you?
I haven’t found a particularly suitable network chat program for us to learn with, so if this article gets over 100 likes, I will write one myself and share it with everyone.
The novice stage primarily covers advancement in C language, Linux system programming, and installation and usage of third-party libraries.
If you haven’t reached the novice level yet, I will also give you one word: “Steady”.
What does it mean? The Linux system programming interfaces are very classic interfaces; understanding their parameters, return values, calling methods, and usage precautions is crucial. We must learn step by step, progressing steadily, without rushing, as there is still much to master. This will greatly help you become an advanced engineer and expert.
With a solid foundation, you can build higher structures; the novice stage typically takes about 1 to 3 years.
Advanced Engineer
Next is the advanced engineer stage.
I divide the advanced engineer stage into two parts: one part is called “general skills,” which are applicable across nearly all industries; mastering these skills allows you to adapt to changes; the other part is called “specialized skills,” referring to professional technical knowledge in a specific field, which ensures you won’t have to worry about unemployment.
Let’s first look at general skills.
First, learn source code. I have listed some network-related source codes, including TCP, UDP, HTTP, as well as high-performance servers and storage systems. These well-tested and widely used source codes can provide a lot of inspiration for our work; some code snippets can be directly referenced.
At the back of the image are the addresses of these codes; you can download and learn them.
Next is code performance optimization; performance optimization is relatively important in low-performance microcontroller fields, but as high-performance chips become faster, performance optimization is generally not as critical.
A code written by a fresh graduate might run at a speed that is only a fraction of what an experienced engineer’s code would, but as long as it works functionally, it’s acceptable.
However, we also need to know how to optimize, so we can grow and write high-quality code.
Next is code portability, which involves four points: unified data types, memory and structure alignment, attention to endianness, and frequent use of library functions.
If you have read a lot of source code and learned to use it, writing portable code will become your habit.
Next, learn some other programming languages or scripting languages, such as Python, Shell, Lua, R, PHP, and even Makefile, etc.
It goes without saying that an excellent programmer should always learn new programming languages. The most important thing is not the programming language itself, but the design ideas of the language and the scenarios it applies to. The more languages you learn, the more you will know which language can achieve your goals quickly and efficiently when designing technical solutions.
Once you master high-level languages, you can dive deeper and learn ARM assembly instructions.
Most ARM chips running Linux are Cortex-A cores, so you should know the 37 registers and some key instructions, and be able to write simple assembly programs.
Next, learn some knowledge about computer architecture, including buses, memory, I/O, and CPUs. This architectural knowledge is purely theoretical; I found my old textbook on computer organization, which was quite boring back then.
But looking at it now, I can tell you that this book is amazing. It discusses what computers do: computing, storage, and communication, and it encapsulates the essence of these three functions, which are key and core.
However, most people won’t need this knowledge in their work unless they are doing the most fundamental jobs, such as designing CPUs or hard drives. But I still recommend you learn it so you at least know what it covers; if you ever need it, you can find it quickly.
OK, that’s all for learning general skills. These skills are useful across all industries, and mastering them will put you ahead of a large portion of people.
Next, let’s look at specialized skills, and we will continue with a top-down explanation.
First is graphical user interface programming, which is well known as QT. To learn QT, you first need to learn object-oriented programming and C++, then QT’s signal and slot mechanism, drawing, file handling, threading, database, and network interface usage, and finally, QT’s porting on different hardware platforms; these are all skills a QT engineer should master.
I don’t know QT, but I know that QT’s C++ source code is written beautifully. If you spend time learning QT’s source code and understand its architecture and mechanisms, you could practically put on your resume that you “mastered QT’s design mechanism” and “proficient in C++”.
Yes, you read that right; learning QT can also help you become proficient in C++, isn’t that great?
Next is streaming media, which involves making cameras, live streaming, etc. You need to understand various streaming media protocols, such as RTP, RTSP, etc., how they handshake, interact, play, pause, and you definitely need to study the transmission protocols in depth.
Then there are encoding and decoding encapsulation protocols, application frameworks, and some national standards that you need to master.
Next is artificial intelligence, which is very popular now. I have found some frameworks or codes that I recommend everyone learn, which can be ported to our embedded devices, as shown in the image.
First, deep learning; the TensorFlow framework is sufficient for this, collecting data, processing features, training learning models, etc., all have ready-made interfaces that are easy to use and widely used, with plenty of resources available.
Then there is voice semantic recognition, which means that when I finish speaking, the computer can convert it into text, but it still doesn’t know what I said; there are also ready-made frameworks for this.
Next is natural language processing, where machines can understand what I say. I have not found any frameworks or codes that can be ported to embedded devices; they should still be done in the cloud, but I mention it just to inform everyone of this branch.
Image recognition using OpenCV is a must-learn image processing library.
Also, robotics involves learning the ROS system.
You might ask why learning artificial intelligence seems unrelated to embedded systems. In fact, many companies have similar projects that push the AI algorithms from the cloud to the front-end devices for computation.
Just think, if all the remaining computing power of cameras, routers, switches, and even package lockers worldwide could be utilized, the computational power of human society would take a giant leap. Computational power is productivity!
Those who understand cloud computing and AI algorithms might not understand embedded systems; they are either uninterested in porting or are cross-disciplinary, and certainly won’t be as fast as us embedded engineers in porting, so considering the migration of these frameworks and algorithms to hardware is a potential career direction.
Next, we have the Internet of Things and vehicle networking, where you need to understand technologies such as sensors, wireless communication, bus communication, network protocols, and common applications of IoT.
Applications such as rule engines, which trigger actions like turning on the air conditioner when the temperature exceeds a certain degree, or performing remote OTA upgrades for devices. The technical details involved in OTA upgrades are also quite extensive, and everyone interested can do detailed research.
Next is edge computing, where big companies like Amazon and Microsoft, along with others, provide frameworks that move some cloud computing tasks to embedded devices. This is currently widely used in industrial IoT because industrial IoT connects various devices with complex protocols.
It can support a wide range of device-side protocols, such as Bluetooth, ZigBee, MQTT, Modbus, and others, allowing different protocols and devices to be uniformly managed, including unified encoding, decoding, and data transmission. Additionally, applications like rule engines, logs, etc., can also be moved from the cloud to the device side.
Next is virtualization and container technology, which is also a direction for many major companies.
Virtualization involves creating one or more virtual cores on real chips, along with their respective memory and disks, allowing different operating systems to be installed.
Containers share the same memory and disks on a real machine while virtualizing different file systems. Virtualization has good isolation, while containers offer good performance, each with its own characteristics.
They have many advantages, such as being easy to replicate, deploy, and test. Software is definitely more flexible than hardware.
Doing virtualization requires understanding hardware like ARM architecture and software, including the kernel. Many chip manufacturers, communication companies, and major internet companies have virtualization positions related to hardware that we embedded engineers can try.
Next is the communication technology field.
This includes various network communication protocols, such as WiFi, 2G, 4G, 5G, as well as routing and switching protocols. I have listed some very common Layer 2 and Layer 3 protocols, which are necessary for working with switches, routers, and other network devices.
In communication, you also need to look at standards like IEEE and 3GPP.
Ah, I used to write 4G protocols and spent days reading 3GPP documents, which made me dizzy.
Next is the security field.
This includes cryptography, various encryption and decryption algorithms; operating system security, such as secure boot, TEE, trusted computing; network security, binary security, and domestic adaptation; many industries are not allowed to purchase foreign chips, which requires support for domestic chips.
Have you ever wondered where our phones store important privacy information like fingerprints and facial recognition? Is it in the operating system? What if hackers breach it? Of course, it’s not in the operating system; does anyone know where it is? Please share with everyone.
Next is heterogeneous computing, which involves various processors for special purposes.
CPUs can do everything: control, compute, and schedule; heterogeneous processors mainly perform calculations, and their mission is to unleash computational power, such as performing high-concurrency floating-point calculations very quickly.
As AI and autonomous driving mature, various high-performance chips are gradually emerging. To achieve fast calculations, a combination of software and hardware is needed, with algorithms needing to be ported and drivers developed; there are many opportunities here. If you want to enter this industry, you should be well acquainted with the general skills and knowledge of computer architecture, as heterogeneous computing is easy to understand if you have a good foundation.
Next, we delve into kernel knowledge. You should understand kernel theory, process and memory management, interrupt and exception mechanisms, and so on.
Then you need to trim the kernel, removing unnecessary parts. You should know how to create boot programs, kernel images, root file systems, and device trees, all of which are tasks for kernel engineers.
For the kernel, you also need to master debugging techniques because writing kernel programs can often cause the entire system to crash, so you need to know how to troubleshoot. I have listed some common techniques that you should be proficient in.
Once you learn kernel knowledge, you can move on to learning BSP, or board support packages, which requires knowledge of electronics, including voltage, current, resistance, capacitance, and semiconductor gate circuits.
Then you need to be familiar with common tools like multimeters, oscilloscopes, and logic analyzers. Sometimes, the code might seem correct, but the actual output is unexpected, and you will need to check the waveform to troubleshoot.
You also need to understand hardware schematics, focusing on memory, peripherals, interfaces, and pins.
For different chips, you need to read the chip manuals, which are essential for understanding timing diagrams, memory mapping, and the functions of specific registers.
With the above foundation, you can start developing drivers.
First, you need to understand the framework of driver programs; you can’t write them randomly.
Drivers can be broadly categorized into character devices, block devices, and network devices. You can look at what types of devices are listed in the image and learn step by step; writing simple drivers first will make it easier to tackle more complex ones.
This concludes the skills to master at the advanced engineer stage.
General skills are essential for any field or technology; these are your core competencies.
Specialized skills can serve as your competitive edge. I recommend that you deeply research at least one area to become an expert in that technology.
Whether it’s general skills or specialized skills, you can evaluate whether you have reached this stage.
If you haven’t reached the advanced engineer level yet, I’ll give you another word: “Long”.
This means you need to be persistent and patient. Don’t rush; don’t be anxious. While you can get started on these technologies in the short term, mastering them will take at least 5, 8, or even 10 years.
The advanced engineer stage is a long-term battle. What level should you ultimately reach?
You should be able to create new interfaces and products based on existing technology and interfaces, combined with your company’s business and customer needs.
Expert
Still divided into four parts.
Technology, management, industry, and company.
Horizontal technical expansion means you can learn engineering tools from other disciplines, such as upper computer, testing, Matlab, PCB, industrial design, and structural design. However, to be honest, after starting work, it’s hard to have the energy to engage in these unless you have a strong interest.
Management skills include team management, project management, demand analysis, supply chain, and cost control, among others. Experts leverage their teams and companies to complete product development and implementation.
Next is industry knowledge; you need to become an expert in a specific field.
Assuming you have mastered the general skills and specialized skills from the advanced engineer stage, your technical level can be exceptional. However, I must tell you that even if you can create any product, you might not know what products to create.
For example, with QT, you can handle any interface interaction and port various chips, but if I ask you to create a patient and medication management system for hospitals, how would you do it? Even if you manage to create it, then I would ask you, how do you sell it? To whom? What is the right price? Who handles issues that arise?
For instance, with facial recognition, you can recognize every face as easily as your right hand, but the requirements for recognition at airports or train stations might differ from those for banks or community access control. After recognition, what will you do? Compare with police information? Link with ID cards? Or just open a door?
These are specific industry knowledge requirements. Consider your company leaders and their superiors; they likely have a deep understanding of the business and industry. Without industry-savvy experts, a company cannot operate for even a day.
You can refer to the various products in different industries shown in the image and see what interests you for your future development.
Consumer electronics are self-explanatory;
Automotive electronics are filled with chips, offering many positions;
The power industry is currently promoting smart grids, which is worth exploring;
And in the security industry, there are firewalls, network gateways, WAF bastion hosts; I wonder if everyone has heard of these.
Finally, understand your company. I have outlined the entire electronic industry supply chain:
From the top chip manufacturers down to sensors, operating systems, cloud platforms, carriers, and finally to B-end or C-end hardware manufacturers, or integrators and distributors.
You need to know what type your company belongs to, who you collaborate with, who your competitors are, how other companies in your industry are doing, and what businesses they are pursuing and why.
That’s the capability experts should possess.
If you have reached this stage, congratulations!
If you are not yet an expert, don’t worry; I’ll give you another word: “Deep”.
To become an expert, you need to deeply understand your industry and company, spending more time in this area. When you encounter problems, think deeper, treating the company’s matters as your own.
That’s how workplace dynamics work; the deeper your understanding of the business and industry, the more influence you will have. Engage with experts, flatter them a bit, let them boast, and hopefully, they will take you along.
This concludes the entire mind map content. Everyone, keep it up!
Summary
When I traveled to 2021, I saw IoT devices everywhere, making humans lazier.
I saw electric vehicles that could travel 10,000 kilometers on a single charge, with fully autonomous driving being standard in every vehicle.
I saw AI applied across various industries, with nearly every computing-capable device capable of self-learning and self-decision-making, calling AI algorithms as easily as we currently transmit data over serial ports.
Do you remember I mentioned interviewing an old engineer? I asked him for the secret to success, and to my surprise, what he told me was identical to what I read in a book ten years ago.
I will share this secret with everyone:
Those who learn and those who do not may seem indistinguishable on a daily basis; even over a month, the difference is minuscule; over a year, the gap is apparent but seems insignificant; but when viewed over five years, it may represent a vast chasm of knowledge and wealth. By the time you look back after ten years, it could be the difference between one life and another.
The secret to becoming an expert lies in the ordinary days you spend; progress a little each day, and trust me, quantitative changes will lead to qualitative changes.
How times develop, the essence remains unchanged.
Finally, I’d like to share a couplet with everyone:
Always remember the four-word motto, persist for ten years.
Share, collect, like, and watch, earn ten thousand a month.
I am Ke Yan, see you next time.
Oh, wait!
The hidden Easter egg in this article has been discovered by those of you with patience!
That is, “Ke Yan Achievements Planet”!
This is a planet that pursues “progressing a little every day”. Here, you will see Ke Yan’s daily thoughts, how public account articles are written step by step, and how many hardworking partners grow from novices to experts.
There are no “quick fixes” or “secrets” here; only the daily efforts and accumulation.
Any technical or learning issues, such as embedded systems, IoT, microcontrollers (including C language, data structures, ARM architecture, RTOS, computer networks, Linux, operating systems, esp8266, organization principles, circuits, etc.);
Or issues related to the embedded and IoT industries, such as industry outlook analysis, company evaluation;
Or career advice, such as offer selection, career planning, resume optimization, and interview skills.
You can consult Ke Yan and partners in the planet.
If you are interested, hurry up and scan the code to join!
—————END—————
The article ends here.
Welcome to follow “Ke Yan Achievements”~~~O(∩_∩)O~