Bare-metal C programming on ARM
This repository contains a tutorial ebook concerning programming a bare-metal ARM system. More specifically it deals with a ARMv7A version of the ARM Versatile Express platform, emulated on a regular PC through QEMU. You can explore the repository, or read things in order.
Table of Contents
An up-to-date PDF version is also available.
This is still a work in progress. Currently available:
- Chapter 0: Introduction. A brief intro to the subject and the ebook.
- Chapter 1: Setup. A short chapter dealing with preparing a Linux environment for further development.
- Chapter 2: The first boot. Basic use of QEMU and the cross-compiler toolchain, getting the simplest possible code to run.
- Chapter 3: Adding a bootloader. Building the highly popular U-Boot bootloader, and getting it to boot our own code.
- Chapter 4: Preparing a C environment. This chapter deals with the necessary work for getting from startup in assembly code to C code.
- Chapter 5: Build & debug system. Here we show how the work can be streamlined by adding a CMake-based build system, and how the bare-metal program can be debugged.
- Chapter 6: UART driver development. In this chapter, a device driver for a UART gets written.
- Chapter 7: Interrupts. The chapter goes through setting up the ARM Generic Interrupt Controller, using it to receive and respond to interrupts. Also the UART driver gets adapted to use interrupts.
The repository consists of two top-level folders. The
doc folder contains the actual tutorial chapters. The
src folder contains the source code corresponding to each chapter. So, for instance, src/04_cenv contains the source code as it looks after completing Chapter 4.
src folder has some shared things.
src/common_uboot holds a stripped-down version of U-Boot used in the examples.
Have fun, and feel free to tweak and experiment, that being a great way to learn!