Skip to content

whzinformatik/baremetal-arm

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.

Hinweise

Unter Ubuntu/Debian muss vor dem Erstellen eines Programms (z. B. mit build.sh) das Kernel-Modul ndb manuell geladen werden: sudo modprobe nbd

Table of Contents

An up-to-date PDF version is also available.

The following chapters can be thought of as the first edition of the ebook, providing a complete path from getting started to a working program that uses hardware features.

  • 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.
  • Chapter 8 - WIP: Scheduling. Work in progress.

Repository structure

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.

Additionally, the 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!

About

An ebook about bare-metal programming for ARM

Resources

License

Unknown and 2 other licenses found

Licenses found

Unknown
LICENSE.md
CC-BY-SA-4.0
LICENSE-CC-BY-SA.md
MIT
LICENSE-MIT.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 93.3%
  • Python 3.5%
  • Perl 1.2%
  • Makefile 0.8%
  • Assembly 0.5%
  • Shell 0.3%
  • Other 0.4%