This project documents the complete bring-up of the Zephyr RTOS on an ARM Cortex-M3 virtual board using QEMU. It covers SDK installation, toolchain setup, environment troubleshooting, building firmware, running it on an emulated target, and debugging the system using GDB.
The goal of this project was not just to run a sample, but to understand the real embedded workflow β from setting up the RTOS environment to debugging firmware at the instruction and source level.
- Zephyr RTOS
- ARM Cortex-M3
- Zephyr SDK
- QEMU
- arm-zephyr-eabi-gdb
- C, Python
- CMake, West, Ninja
- Installed west, Python, and CMake
- Initialized Zephyr workspace
- Verified folder structure and environment
πΈ Screenshot: west init / workspace structure
- Downloaded Zephyr SDK bundle
- Registered SDK using setup script
- Faced missing host tools & environment issues
πΈ Screenshot: SDK extract and Github
- SDK not detected initially
- Missing Python dependency (elftools)
- Fixed environment variables and installed packages
πΈ Screenshot: successful build
Commands used:
west build -b qemu_cortex_m3 zephyr/samples/hello_world west build -t run Booted Zephyr on ARM Cortex-M3 emulated board
Verified execution through QEMU console
πΈ Screenshot: App successfully running in Zephyr OS
Started QEMU in debug mode
Attached arm-zephyr-eabi-gdb
Set breakpoints at main()
Stepped through boot and execution flow
πΈ Screenshot: GDB breakpoint πΈ Screenshot: stepping into main
-
How RTOS bring-up works
-
How firmware flows from reset handler to main()
-
How embedded debugging is done using GDB
-
How to troubleshoot real toolchain issues
-
How Zephyr RTOS is structured
This project gave me hands-on exposure to embedded systems bring-up, firmware debugging, and RTOS workflows. It closely reflects real-world embedded engineering practices and Arm ecosystem development




