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).