Bare-metal lab logo

Bare-metal lab

Free

Bare-metal microkernel OS development examples for Raspberry Pi (ARMv6)

FreeFree tier
Type
Open Source

About Bare-metal lab

A collection of bare-metal programming examples for Raspberry Pi (ARMv6) that covers microkernel OS development. Includes labs for a simple hello world, MMU initialization, ARM interrupt handling, buddy system memory allocation, and a minimal microkernel (mimiOS) featuring system calls, round-robin scheduling, and process fork. Also includes a merged example (pi-baremetal) combining MMU, interrupts, mailbox, and ATAGs with process management. Designed for learning low-level ARM embedded programming and OS concepts.

Key Features

Bare-metal hello world example
MMU initialization and configuration
ARM interrupt handling example
Buddy system memory allocation implementation
Microkernel with system calls, round-robin scheduling, and process fork
Merged example combining MMU, interrupts, mailbox, ATAGs, and process management

Pros & Cons

Pros
  • Provides practical, hands-on examples for core bare-metal topics
  • Covers MMU, interrupts, memory allocation, and a simple microkernel in one repository
  • Includes merged code from multiple community examples for richer functionality
  • Open source with permissive Creative Commons license
  • Useful for self-study of operating system fundamentals on real hardware
Cons
  • Limited documentation beyond brief README descriptions; relies on external blog for details
  • Targets older Raspberry Pi (ARMv6) and may not work on newer models without adaptation
  • Examples are basic and may not cover advanced topics like device drivers or filesystems
  • Requires prior knowledge of ARM assembly and embedded development

Best For

Learning ARMv6 bare-metal programmingExperimentation with OS kernel concepts such as scheduling and memory managementEmbedded systems education and hobbyist projects on Raspberry PiReference for implementing low-level hardware initialization on ARM

FAQ

What is included in this repository?
It contains several bare-metal labs: hello1 (hello world), labMMU (MMU initialization), labInterrupt (ARM interrupt handling), labMem (buddy system memory allocation), mimiOS (system calls, scheduling, process fork), and pi-baremetal (merged examples with MMU, interrupts, mailbox, ATAGs, and process management).
What board is this for?
Raspberry Pi with ARMv6 processor, typically the original Raspberry Pi 1 models.
Is there additional documentation?
The author's blog is referenced at http://karosesblog.blogspot.tw/ for more details.