2025-01-03 06:23 AM - last edited on 2025-01-03 07:11 AM by Andrew Neil
Hi everyone,
I’ve been working in IT for a while, focusing mainly on cloud computing and Linux environments. However, I’ve recently become really interested in embedded systems and the potential for integrating hardware and software solutions.
I came across some resources and training focused on Linux, which I think might give me a good foundation for the embedded systems world. But now I’m a bit stuck. I’m not sure how to apply that knowledge in a more hardware-specific domain.
I’m curious about how others here have transitioned to embedded systems development. Were there any specific tools, frameworks, or projects that helped you get started? Also, if you have any advice on combining Linux knowledge with real-time operating systems or hardware-level programming, I’d love to hear it.
Thanks in advance for your guidance!
2025-01-03 06:38 AM - edited 2025-01-03 06:43 AM
Hello @choco4321 and welcome to the community,
Not clear.
You need to find a specific ST MCU product where especially you can use embedded Linux? or you need to learn the embedded development in general?
Just to focus on ST products:
- If you need to use embedded LINUX I suggest STM32MPx products (microprocessor products). See the wiki.
- If you need to start from scratch I suggest to use STM32 MCU (microcontroller products). I may suggest STM32F4. You can purchase a board like STM32F4 Discovery. ST offers many tools for developers: STM32CubeMx: as code generator tool. STM32CubeIDE as compiler/debugger.
2025-01-03 07:12 AM
That rather depends on what you mean by, "embedded systems" here - it is a very wide field!
You've posted in the MCU (micro-controllers) section, but you're talking about Linux.
So are you looking to get into embedded Linux, or are you looking to get into embedded microcontrollers?
For embedded Linux, you should be in the MPU (micro-processors) section ...
2025-01-03 07:36 PM
"Embedded Systems" is really a very imprecise term. It means often: "to deal with very hardware centric components, like MCU and board features, how to connect, initialize and use HW extensions (such as sensors) and Firmware (FW)".
An embedded system can run different types (or none) of Operating Systems:
What is important to know for you (when you want to start with "Embedded Systems"):
"Embedded Systems" require a pretty deep understanding of HW, of the MCU chip, the board you want to use. It can end up in tiny details like:
When you come from Linux system development: BSP might be a very helpful experience. But forget all high-level Linux application development (not applicable on "Embedded Systems"). The highest level you could expect is "MicroPython" - Python environments on MCUs (e.g. PYNQ), but not full blown Python (with all the LIBs possible, still hardware-centric).
On an embedded system you have to bring up all higher layer features "yourself", e.g. a mass storage (such as SD Cards, external SPI/QSPI flash memories, external SRAM), add stacks like a File System (fatFS), network support (lwIP)...
And all requires deep understanding of the MCU, the HW, the board (e.g. configuring clocks, power and pins) and the libraries to use (RTOS, fatFS, lwIP, USB stack, ...).
You might have a good understanding about kernel and user space (often not really available on embedded systems), BSP, HAL, processes (tasks and threads) but you have to learn everything again for a different, very HW centric environment (what is an RTOS task compared to a Linux user process - completely different "beasts" - in principle the same approach, in details just very different "how", often you have just a MPU (not a MMU)).
My suggestion:
At the end it is "just" to study manuals, data sheets, application notes, reference manuals, programming manuals and to get familiar with the IDE you want to use. C/C++ knowledge is very helpful (you should have) but with a stronger focus on HW (e.g. why and when is a volatile needed, what is a LinkerScript, what is a memory image, how to flash code and data into memories (e.g. internal ROM flash, external SPI/QSPI flash), how to initialize devices (e.g. SDCard, external RAM controller).
Not magic, just "back to the roots" (and dealing with stuff on a very low level basis).
Start with a "simple" MCU, e.g. single core, as ARM CM0, CM4 or CM7. There are also dual-core MCUs out there up to multi-core application processors (MPUs, ARM A). The "obstacle" for you might be to get familiar "how to deal with HW and MCU features?".
Good luck!
2025-01-04 01:48 AM - edited 2025-01-04 02:15 AM
@tjaekel wrote:
- some boards (larger and more complex MCUs) can also run a full Linux (e.g. Raspberry Pi, PYNQ (FPGA) board)
They would not (generally) be called MCUs but, rather, MPUs - or "Application processors"
Cortex-M = Microcontrollers;
Cortex-A = Application processors:
@tjaekel wrote:
- even Raspberry Pi: there is full-blown Linux with RPi 5, smaller as RPi Zero and very small as RPi Pico
RPi Pico is a microcontroller (Cortex-M0+) - the other RPis are Cortex-A
2025-01-04 02:51 PM - edited 2025-01-04 03:22 PM
Hi!
> But now I’m a bit stuck. I’m not sure how to apply that knowledge in a more hardware-specific domain.
General software development culture and background will be very welcome and helpful: Unix/Linux scripting, version control, CI, editors and various tools. Experience with C and make - wonderful. Experience in unit testing - wonderful. Linux kernel, modules, device tree - brilliant.
Otherwise, IT, Linux, cloud and system admin experience is not directly applicable.
> I’m curious about how others here have transitioned to embedded systems development.
Most of these stories are ancient and not useful anymore. This is like you want to see the Cats on the Broadway, but it's no more.
IMHO the best way to get there is to get involved (hired) into a multidisciplinary project with embedded parts, as a Linux, devops, tooling person - then gradually move to the embedded direction. Another variant: join a "consulting" type company that takes various kinds of projects; help co-workers that do embedded projects (that is the only viable path for 40+ folks).
2025-01-17 07:40 PM
Hello, how are you? I've been through what you're going through. I used to work in the IT sector, working in everything from basic maintenance to servers, networks and programming, and now I work with embedded systems.
My transition process began around 2010. I discovered Arduino and saw a huge potential market for training, so I started giving programming classes and consulting on projects using it. At the time, I practically went through all the Arduinos: Uno, Leonardo, Nano, Micro, Mega and DUE. I also used other similar ones like Mapple. With DUE, I came into contact with the ARM architecture and began to study the Cortex-M family in depth. I struggled a bit with all the letters and architecture names. Understanding how they were related and whether or not there was a hierarchy was a bit difficult at first, but I kept going.
In 2016, I had to pause my journey in embedded systems, and I returned in 2022 during the pandemic. I took the opportunity to dedicate myself to FPGAs. Then I discovered RISC-V and made a small RISC-V core. It was a wonderful world that opened my mind. At the end of 2024, I started studying Cortex-M again and discovered the Raspberry Pi RP2350, which was Cortex-M and Risc-V on the same chip. It was great for me, two architectures to study in a single embedded system. But then on Black Friday, I received some promotions for courses on STM32. I couldn't miss the opportunity. I bought a dozen courses.
When I least expected it, when I announced that I was looking for an opportunity with STM32, a company contacted me to work with it and port an embedded system from ESP32 to STM32H7. It was everything I wanted. I didn't hesitate, and we closed the deal. It was the perfect match.
Now I'm studying ESP32 and STM32, and preparing for software portability, studying Design Patterns in Embedded Systems to improve Software Engineering and Architecture, studying TinyML to discover new possibilities with AI, and so little letters like IoT, IIoT and AIoT have become my daily routine.
Dive in, it's undoubtedly a fun and enjoyable universe, which sometimes gives you a big headache, but the result of seeing your code come to life on hardware is wonderful.