Containerized development and CI environments for embedded systems, RTOSes, robotics, and C/C++ testing.
This repository provides Docker containers — pre-configured, isolated development environments — for embedded systems programming. Instead of spending hours installing compilers, libraries, and tools on your machine, you can simply run a container that has everything ready.
| Challenge | Without Containers | With Containers |
|---|---|---|
| Setup time | Hours to days | Minutes |
| "Works on my machine" | Common problem | Eliminated |
| Multiple toolchain versions | Conflicts | Isolated per container |
| CI/CD pipelines | Complex setup | Same image locally and in CI |
| Team onboarding | Long documentation | docker run and go |
Before using these containers, you need:
-
Docker Desktop (Windows/macOS) or Docker Engine (Linux)
- Download: https://www.docker.com/products/docker-desktop
- Verify installation:
docker --version
-
Basic terminal/command-line knowledge
- Windows: PowerShell or Command Prompt
- macOS/Linux: Terminal
-
Git (optional, for cloning source code)
- Download: https://git-scm.com/
# Build and run the U-Boot development container
cd uboot/
docker build -t uboot-dev -f Dockerfile .
docker run -it --rm uboot-dev
# You're now inside a Linux environment with ARM cross-compilers ready!
aarch64-linux-gnu-gcc --version| Term | Definition |
|---|---|
| Docker | Platform for running applications in isolated containers |
| Container | Lightweight, standalone package with code, runtime, and tools |
| Image | Read-only template used to create containers |
| Dockerfile | Text file with instructions to build a Docker image |
| Cross-compiler | Compiler that runs on one architecture but produces code for another (e.g., compile on x86 PC for ARM board) |
| Toolchain | Set of tools (compiler, linker, debugger) for building software |
| U-Boot | Universal Boot Loader — starts the OS on embedded boards |
| Device Driver | Code that allows the OS to communicate with hardware |
| Kernel Module | Code that can be loaded into the Linux kernel at runtime |
| Device Tree | Data structure describing hardware to the Linux kernel |
| ARCH | Target CPU architecture (e.g., arm, arm64, riscv) |
| CROSS_COMPILE | Prefix for cross-compiler tools (e.g., arm-linux-gnueabihf-) |
This repo collects Docker/Dev Container images for:
- Firmware and OS build stacks (Yocto, Buildroot, U-Boot)
- RTOSes (Zephyr, FreeRTOS)
- Bare-metal toolchains (ARM, RISC-V, etc.)
- Embedded and host Rust toolchains
- ROS 2 and robotics frameworks
- C/C++ unit testing and analysis (Unity, GoogleTest, Catch2, GCOV, etc.)
- Hardware Debugging & Logic Analysis (OpenOCD, Sigrok, GDB, etc.)
- Virtual Hardware & Simulation (QEMU, Renode, Wokwi, etc.)
- Android AOSP build environments
common/Shared base images and helper scriptsyocto/Yocto build imagesbuildroot/Buildroot imagesuboot/U-Boot build imageszephyr/Zephyr SDK / west-based imagesfreertos/FreeRTOS build imagesbaremetal/Bare-metal toolchain imagesrust/Rust host + embedded imagesdebug-tools/Hardware interface tools (OpenOCD, J-Link, Sigrok/PulseView for Logic Analysis)simulation/Virtual hardware (QEMU, Renode, Verilator)linux_dd/Linux embedded board development (e.g. BeagleBone Black Wireless, VS Code Server based)android/Android AOSP build imagesros2/ROS 2 distributionsrobotics/Other robotics stacks and SDKstesting/C/C++ test and embedded CI imagesdocs/Documentation and usage guides
Bridging the gap between the container and physical silicon.
- On-Chip Debugging: Support for OpenOCD, pyOCD, and Segger J-Link GDB servers.
- Logic Analysis: Includes
sigrok-cliandPulseView(via X11 forwarding) for capturing and decoding digital signals (I2C, SPI, UART) using low-cost analyzers. - Terminal: Serial monitors like
minicomandpicocom.
Enabling "Hardware-less" development and automated CI testing.
- Processor Emulation: QEMU for executing ARM, RISC-V, and PPC binaries on the host.
- System Simulation: Renode for complex multi-node simulation, including peripherals and wireless connectivity.
- HDL Simulation: Verilator for FPGA/ASIC design verification.
See docs/overview.md for a more detailed description and planned image matrix.
Tailored images for silicon-specific development without a heavy OS:
- ARM: arm-none-eabi-gcc for STM32, NRF52, SAM, and more.
- RISC-V: riscv64-unknown-elf (supporting both 32 and 64-bit) for ESP32-C series, SiFive, and GD32.
- AVR (ATmega): avr-gcc and avrdude for Arduino-style hardware and industrial ATmega/ATtiny chips.
- PIC: Support for Microchip's 8-bit and 16-bit lines using XC8/XC16.
- 8051: SDCC (Small Device C Compiler) for classic 8-bit microcontrollers.
To use the tools in debug-tools/, you must pass the host USB device to the container. On Linux, this is typically handled via:
--device /dev/bus/usb:/dev/bus/usbOn Windows/macOS, usbipd-win or similar bridges are required.
| I want to... | Use this image | Folder |
|---|---|---|
| Build a bootloader for my board | uboot-dev |
uboot/ |
| Write a Linux device driver | linux-dd |
linux_dd/ |
| Build a custom Linux distro | yocto-dev |
yocto/ |
| Work with Zephyr RTOS | zephyr-dev |
zephyr/ |
| Program bare-metal (no OS) | baremetal-arm |
baremetal/ |
| Debug with JTAG/SWD | debug-tools |
debug-tools/ |
- Learn Docker basics — Read docs/docker-introduction.md
- Read docs/overview.md for the big picture
- Pick a stack from the table above
- Follow the README in that folder
- Build the Docker image
- Start developing!
| Document | Description |
|---|---|
| docs/docker-introduction.md | Start here! Complete Docker tutorial |
| docs/overview.md | Project overview and stack status |
| docs/usage/uboot.md | U-Boot bootloader development guide |
| docs/usage/linux_dd.md | Linux device driver development guide |
| linux_dd/examples/beaglebone-black-workflow.md | BeagleBone Black step-by-step workflow |
| docs/ci.md | CI/CD integration guide |
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Add/update documentation for beginners
- Submit a pull request
See LICENSE for details.