{"id":19296776,"url":"https://github.com/umanovskis/baremetal-arm","last_synced_at":"2026-02-12T09:10:11.893Z","repository":{"id":42020187,"uuid":"160116344","full_name":"umanovskis/baremetal-arm","owner":"umanovskis","description":"An ebook about bare-metal programming for ARM","archived":false,"fork":false,"pushed_at":"2021-05-07T20:55:28.000Z","size":12270,"stargazers_count":713,"open_issues_count":20,"forks_count":138,"subscribers_count":28,"default_branch":"master","last_synced_at":"2025-04-22T08:43:31.641Z","etag":null,"topics":["arm","bare-metal","baremetal","c","embedded","tutorial"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/umanovskis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-CC-BY-SA.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-12-03T01:39:36.000Z","updated_at":"2025-04-19T21:08:37.000Z","dependencies_parsed_at":"2022-08-20T08:10:52.572Z","dependency_job_id":null,"html_url":"https://github.com/umanovskis/baremetal-arm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/umanovskis/baremetal-arm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umanovskis%2Fbaremetal-arm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umanovskis%2Fbaremetal-arm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umanovskis%2Fbaremetal-arm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umanovskis%2Fbaremetal-arm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/umanovskis","download_url":"https://codeload.github.com/umanovskis/baremetal-arm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umanovskis%2Fbaremetal-arm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29362258,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arm","bare-metal","baremetal","c","embedded","tutorial"],"created_at":"2024-11-09T23:00:32.444Z","updated_at":"2026-02-12T09:10:11.876Z","avatar_url":"https://github.com/umanovskis.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"# Bare-metal C programming on ARM\n\nThis 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.\n\n## Table of Contents\n\nAn up-to-date PDF version is [also available](http://umanovskis.se/files/arm-baremetal-ebook.pdf).\n\nThe 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.\n\n* [Chapter 0](doc/00_introduction.md): Introduction. A brief intro to the subject and the ebook.\n* [Chapter 1](doc/01_setup.md): Setup. A short chapter dealing with preparing a Linux environment for further development.\n* [Chapter 2](doc/02_first_boot.md): The first boot. Basic use of QEMU and the cross-compiler toolchain, getting the simplest possible code to run.\n* [Chapter 3](doc/03_bootloader.md): Adding a bootloader. Building the highly popular U-Boot bootloader, and getting it to boot our own code.\n* [Chapter 4](doc/04_cenv.md): Preparing a C environment. This chapter deals with the necessary work for getting from startup in assembly code to C code.\n* [Chapter 5](doc/05_cmake.md): Build \u0026 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.\n* [Chapter 6](doc/06_uart.md): UART driver development. In this chapter, a device driver for a UART gets written.\n* [Chapter 7](doc/07_interrupts.md): 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.\n* [Chapter 8 - WIP](doc/08_scheduling.md): Scheduling. Work in progress.\n\n## Repository structure\n\nThe 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](src/04_cenv) contains the source code as it looks after completing Chapter 4.\n\nAdditionally, the `src` folder has some shared things. `src/common_uboot` holds a stripped-down version of U-Boot used in the examples.\n\nHave fun, and feel free to tweak and experiment, that being a great way to learn!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumanovskis%2Fbaremetal-arm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fumanovskis%2Fbaremetal-arm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumanovskis%2Fbaremetal-arm/lists"}