Skip to main content

Aeolos OS

A little x86_64 hobby operating system built from scratch in C and Assembly.

x86_64 Architecture

Native 64-bit support with modern CPU features

Stivale2 Boot Protocol

Clean bootloader interface via Limine

Memory Management

Physical and virtual memory with paging

Multiprocessing

Symmetric multiprocessing (SMP) support

Overview

Aeolos is an educational operating system project that implements core OS functionality from the ground up. It demonstrates low-level system programming concepts including:
  • Boot Process: Uses the Stivale2 boot protocol via the Limine bootloader
  • Memory Management: Complete physical memory manager (PMM) and virtual memory manager (VMM) with paging
  • Hardware Support: ACPI, APIC, HPET timer integration
  • Multitasking: Preemptive multitasking with scheduler
  • Virtual Filesystem: Unified VFS interface with ramfs and ttyfs implementations
  • I/O: Serial port and framebuffer output with terminal emulation

Key Features

Hardware & Architecture

  • x86_64 (64-bit) architecture support
  • CPU feature detection and initialization
  • Global Descriptor Table (GDT) setup
  • Interrupt Descriptor Table (IDT) management
  • Physical Memory Manager (PMM) with buddy allocator
  • Virtual Memory Manager (VMM) with page tables
  • Bootloader memory reclamation
  • Memory mapping utilities (PHYS_TO_VIRT conversion)
  • Symmetric multiprocessing (SMP) initialization
  • Per-CPU APIC configuration
  • 16-bit real mode trampoline for AP startup
  • Multi-core scheduler support
  • ACPI table parsing (RSDP, MADT, HPET)
  • Local APIC and I/O APIC support
  • HPET (High Precision Event Timer) driver
  • Framebuffer and serial I/O

Software Features

Virtual Filesystem

Unified VFS layer with ramfs for in-memory files and ttyfs for device access

Multitasking

Preemptive scheduler with task creation and management

Initrd Support

Compressed initial ramdisk loaded at boot (SAF format)

Terminal

Text-mode terminal with serial and framebuffer output

System Initialization

The kernel follows a structured initialization sequence in kmain() at startup:
// From kernel/kmain.c
_Noreturn void kmain(stivale2_struct* info)
{
    // Convert physical bootloader address to virtual
    bootinfo = (stivale2_struct*)PHYS_TO_VIRT(info);

    klog_printf("Aeolos x86_64 (alpha)\n");
    klog_printf("Built on "__DATE__" at "__TIME__".\n\n");

    idt_init();
    cpu_features_init();

    // Memory management
    pmm_init((stv2_struct_tag_mmap*)stv2_find_struct_tag(bootinfo, STV2_STRUCT_TAG_MMAP_ID));
    vmm_init();
    gdt_init();

    // I/O initialization
    fb_init((stv2_struct_tag_fb*)stv2_find_struct_tag(bootinfo, STV2_STRUCT_TAG_FB_ID));
    serial_init();
    term_init();

    // System hardware
    acpi_init((stv2_struct_tag_rsdp*)stv2_find_struct_tag(bootinfo, STV2_STRUCT_TAG_RSDP_ID));
    hpet_init();
    apic_init();
    vfs_init();
    smp_init();

    // Reclaim bootloader memory
    pmm_reclaim_bootloader_mem();

    // Start multitasking with kinit as first task
    sched_init(kinit);

    while (true)
        ;
}
Aeolos is currently in alpha stage. Some features like usermode support, disk drivers, and keyboard/mouse input are still under development.

Project Status

Completed Features

  • ✅ x86_64 long mode with higher-half kernel
  • ✅ Stivale2 boot protocol integration
  • ✅ Physical and virtual memory management
  • ✅ SMP initialization and multi-core support
  • ✅ ACPI/APIC/HPET hardware abstraction
  • ✅ Multitasking with preemptive scheduler
  • ✅ Virtual filesystem framework
  • ✅ Serial and framebuffer output
  • ✅ Initrd loading and decompression

In Progress

  • 🚧 Usermode support (partial)
  • 🚧 Virtual filesystem (partial - ramfs and ttyfs working)
  • ⏳ Disk drivers
  • ⏳ Mouse and keyboard drivers

Next Steps

Try Aeolos

Download and run Aeolos in QEMU

Build from Source

Compile the OS yourself

Build docs developers (and LLMs) love