umanovskis/baremetal-arm
FreeAn ebook about bare-metal programming for ARM
FreeFree tier
About umanovskis/baremetal-arm
A comprehensive tutorial ebook on bare-metal C programming for ARM systems, specifically targeting the ARMv7A Versatile Express platform emulated via QEMU. The ebook guides readers through setting up a development environment, writing a bootloader (U-Boot), preparing a C environment, building a debug system with CMake, developing a UART driver, and handling interrupts with the Generic Interrupt Controller. Each chapter includes corresponding source code in the repository. The first edition covers chapters 0–7, with chapter 8 (scheduling) as work in progress.
Key Features
Step-by-step tutorial from basic setup to advanced topics like interrupt handling
Covers ARMv7A architecture using QEMU emulation
Includes U-Boot bootloader integration
CMake-based build system and GDB debugging setup
UART driver development with interrupt adaptation
Generic Interrupt Controller (GIC) configuration
Source code for each chapter available in src folder
Licensed under MIT (code) and CC-BY-SA (documentation)
Pros & Cons
Pros
- Free and open source
- Well-structured with clear progression
- Practical examples with downloadable source code
- Covers both assembly and C aspects
- Emulates hardware via QEMU, no physical board required
Cons
- Limited to ARMv7A Versatile Express platform
- Requires a Linux development environment
- Chapter 8 (scheduling) is still work in progress
Best For
Learning bare-metal ARM programming from scratchEmbedded systems education and practiceUnderstanding bootloader and device driver developmentExploring interrupt handling and low-level debugging
FAQ
What is this repository?
It is a tutorial ebook for bare-metal ARM programming using QEMU, covering topics from setup to interrupts and debugging.
What are the prerequisites?
A Linux environment, a cross-compiler toolchain, and QEMU for emulation.
Is the ebook complete?
The first edition covers chapters 0–7; chapter 8 on scheduling is a work in progress.
What licenses apply?
The source code is under the MIT license, and the documentation is under CC-BY-SA 4.0.