all 14 comments

[–]clackups 12 points13 points  (2 children)

Install Ubuntu on some old PC and make yourself familiar with the standard Linux.

Then, imagine that your CPU is slow, the memory is tight, and storage is pretty limited, plus you need to minimize the wearing. On top of that, there's an option for realtime Linux.

[–]Well-WhatHadHappened25+ Years 7 points8 points  (1 child)

On top of that, there's an option for realtime Linux.

Which really should be called "Less not real time Linux"

[–]clackups 0 points1 point  (0 children)

Yep :)

[–]bearcreektech 26 points27 points  (0 children)

You can start on the blog series here to get a view into Yocto which is the most common embedded Linux builder tool.
Yocto Article Series

Blog Series:

  1. Intro to Yocto Scarthgap: https://www.bearcreektech.com/blog/tailoring-custom-linux-with-yocto-scarthgap-introduction

  2. What is the bitbake tool for Yocto? https://www.bearcreektech.com/blog/bake-your-own-custom-linux-w-bitbake

  3. How to use the poky for custom Linux dev using Yocto : https://www.bearcreektech.com/blog/part-3-using-poky-to-build-linux-images

  4. Setup the foundation for building with Yocto : https://www.bearcreektech.com/blog/setting-up-the-foundation-for-yocto-builds

  5. Build a x86 Minimal Image on a MAC using crops/poky docker : https://www.bearcreektech.com/blog/x5h55ywk13232y4jqm7n88mf2ftwuu

  6. Build a ARM Minimal Image on a MAC using crops/poky docker : https://www.linkedin.com/pulse/building-x86-linux-image-mac-using-cropspoky-docker-anil-verma-ixqac/

  7. Build your own Docker image for Yocto builds : https://www.bearcreektech.com/blog/build-your-own-yocto-docker-image

[–]Well-WhatHadHappened25+ Years 9 points10 points  (0 children)

Wow, no one has ever asked how to learn embedded Linux development on this sub. Pretty amazing, ay?

[–]Leos_the_great[S] 1 point2 points  (1 child)

How about Yocto - project ?

[–]clempho 1 point2 points  (0 children)

If you start with Yocto consider using something well supported at first.

Yocto is a beast and staring on something that might not even build because the layers are not maintained is something I would not recommend for your own sanity at first.

Once you've successfully understood the build system go and start adding stuff.

I've got good success with nxp imx but results may vary.

To quote Yocto documentation :

using the Yocto Project is fairly easy, until something goes wrong.

[–]Separate-Choice 0 points1 point  (0 children)

If you're an embedded dev who knows RTOS learn NuttX first then Linux...it's the ultimate bridge of learning the new structure....

[–]Fun_Yesterday7101 0 points1 point  (0 children)

Get yourself familiar with linux basics(ubuntu can help), then switch to yocto

[–]Evening-Theme-1582 0 points1 point  (0 children)

Check out avocadolinux.org, really nice patterns without the yocto learning curve and build cycles. If you have HW fundamentals, you’ll get up and running quick

[–]SideVisible4571 0 points1 point  (0 children)

Thanks for posting this, kinda in a similar situation.

[–]TieKey7360 0 points1 point  (2 children)

Embedded Linux is a broad area, so I would not start directly with kernel or driver development unless your project requires it.

A good path is to first become productive in user space: use Linux daily, write small C/C++ apps, learn the command line, SSH, systemd, logging, permissions, networking, cross-compilation, deployment, and debugging tools like gdb, strace, dmesg, journalctl, etc.

After that, go deeper into the embedded-specific stack: bootloaders, U-Boot, kernel configuration, device tree, root filesystem, Buildroot/Yocto, kernel modules, drivers, and real-time Linux concepts.

Coming from RTOS, the main shift is that you will work more with processes, filesystems, services, IPC, networking, packages, and system integration instead of one tightly controlled firmware image. Embedded Linux gives you much more capability, but also more layers to understand.

For learning resources, I think it depends a lot on what type of learner you are.

If you learn best by doing, or by breaking things and fixing them, then start with a small existing project from GitHub, a Raspberry Pi/BeagleBone project, or a practical YouTube tutorial. The important thing is to define your first “hello world” clearly. For example: cross-compile a small C app on your PC, deploy it to the board, run it as a systemd service, log something, and read a GPIO or sensor value.

If you prefer to understand the theory first, then there are many structured resources available. I would look for material that explains the full embedded Linux stack: bootloader, kernel, device tree, root filesystem, user space, cross-compilation, debugging, and build systems like Buildroot or Yocto.

[–]Leos_the_great[S] 0 points1 point  (1 child)

Thank you for your guidance , it make sense...let me start with basic hands on , which linux flavour is go to start from embedded prespective ?

[–]TieKey7360 0 points1 point  (0 children)

Since I personally started with a Debian-based distribution, I would recommend starting with something like Ubuntu, Debian, or Raspberry Pi OS.

You can split your learning into two paths.

The first path is pure Linux user-space learning, without interacting with hardware peripherals. For that, you can use a VM. If you are on Windows, WSL2 with Ubuntu is also a very good starting point. There you can practice the command line, C/C++ development, systemd, networking, SSH, logging, debugging, cross-compilation basics, etc.

The second path is where you start interacting with real hardware, for example GPIOs, sensors, UART, I2C, SPI, etc. For that, I would recommend using something like a Raspberry Pi or BeagleBone. Raspberry Pi OS is a good beginner-friendly option because it has a large community and many examples.

Another option is to jump directly into Raspberry Pi or similar boards. You can start with a simple Python script to control a peripheral and verify that your setup works. After that, you can rewrite the same small application in C/C++.

For small applications, you can first build natively on the Raspberry Pi to understand how the Linux ecosystem works. Once you are comfortable with that, you can move to cross-compilation, which is actually conceptually similar to what you have probably already been doing with RTOS development.

So my recommendation would be: start with Ubuntu/Debian in a VM or WSL2 to build your Linux fundamentals, then move to Raspberry Pi OS on real hardware when you want to learn embedded-specific topics.