universalisos/kernel
2026-07-12 21:06:39 +01:00
..
.aurelio feat: implement core IPC, resource partitioning, health management, and RISC-V architecture parity enhancements. 2026-07-09 21:04:10 +01:00
config fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
docs fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
dtb fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
include/universalisos fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
pkg fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
src feat(kernel/mm): page store backing layer 2026-07-12 21:06:39 +01:00
a.out fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
add_doxygen.py fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
clean_dox.py fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
generate_doxygen.py fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
linker.ld feat: implement core IPC, resource partitioning, health management, and RISC-V architecture parity enhancements. 2026-07-09 21:04:10 +01:00
Makefile feat(testing): add kernel coverage integration — Phase 3 complete 2026-07-12 17:13:51 +01:00
README.md feat(phase-a): complete PikeOS 5.0 context switching implementation 2026-07-07 23:44:30 +01:00
stubs.txt fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00
uos-check.sh fix(kernel): resolve armv7 linker errors, fix exceptions vector base address, and remove untracked conflicting files 2026-07-12 16:40:24 +01:00

Universalisos Kernel — Stage 1 Bare-Metal Skeleton (C++)

This is the first bootable type-1 hypervisor milestone for Universalisos: a minimal bare-metal kernel written in C++ that runs on QEMU's ARM virt machine and prints to the PL011 UART.

Status: Stage 1 COMPLETE — Bare-metal C++ skeleton operational Overall Progress: ~15-20% of PikeOS 5.0 functionality (framework foundations) Next Milestone: Stage 2 — Exception handling and system calls (6-8 weeks)

Building

Requires arm-none-eabi-gcc and qemu-system-arm.

cd kernel
make

Outputs:

  • kernel.elf — ELF image for debugging
  • kernel.bin — raw binary for QEMU -kernel

Running in QEMU

make run

This runs qemu-system-arm with the ELF image so that QEMU loads the kernel at the address specified in the linker script.

Expected output:

Universalisos type-1 hypervisor booted.
Stage 1: bare-metal C++ skeleton running on QEMU ARM virt.

Press Ctrl+A then X to exit QEMU.

Inspecting the binary

make dump

Layout

File Purpose
arch/arm/boot.S Assembly entry point, stack/BSS setup
arch/arm/linker.ld Memory layout for QEMU virt (load at 0x40000000)
arch/arm/uart.cpp PL011 UART driver
arch/arm/uart.h UART interface
kernel.cpp kernel_main() entry point
Makefile Build configuration with AUTOSAR C++ flags

Development Stages

Universalisos progresses through defined stages toward PikeOS 5.0 compatibility:

Stage 1: Bare-Metal C++ Skeleton (CURRENT)

  • ARMv7 boot sequence and exception vectors
  • PL011 UART driver for debugging output
  • Basic C++ runtime environment
  • Identity-mapped memory with MMU
  • Status: COMPLETE
  • Implementation: 5% of PikeOS functionality

🔄 Stage 2: Exception Handling & System Calls (Next)

  • Enhanced exception handlers (data abort, prefetch abort)
  • SVC-based system call framework
  • Priority-based scheduler foundation
  • Task creation and lifecycle management
  • Timeline: 6-8 weeks
  • Target Implementation: 10-15% of PikeOS functionality

📋 Stage 3: Memory Management & Context Switching

  • ARMv7 MMU with proper page tables
  • TLB management and invalidation
  • VM context switching implementation
  • Memory protection and domains
  • Timeline: 8-12 weeks
  • Target Implementation: 20-25% of PikeOS functionality

📋 Stage 4: Interrupt Handling & Device Virtualization

  • ARMv7 GIC interrupt controller
  • Virtual interrupt injection to VMs
  • Device framework and MMIO emulation
  • Basic device drivers (UART, Timer)
  • Timeline: 12-16 weeks
  • Target Implementation: 30-35% of PikeOS functionality

📋 Stage 5: Guest OS Boot & I/O Virtualization

  • Guest OS boot protocol framework
  • I/O request handling and routing
  • Basic virtio device emulation
  • Simple guest OS (bare-metal apps)
  • Timeline: 16-20 weeks
  • Target Implementation: 40-45% of PikeOS functionality

Technical Specifications

ARMv7 Architecture Compliance

  • Exception Levels: PL1 (Privileged) for hypervisor mode
  • Page Table Format: Long descriptor (4 KiB pages, 3-level translation)
  • Exception Vectors: 16-byte aligned vector table at 0x00000000
  • System Calls: SVC instruction with immediate parameter encoding

Memory Management

  • Virtual Address Space: 32-bit (4 GiB theoretical, 512 MiB identity-mapped)
  • Physical Memory: QEMU virt machine with 1 GiB RAM
  • Page Size: 4 KiB standard pages
  • Memory Domains: 16 ARMv7 memory domains for isolation

UART Configuration

  • Device: ARM PL011 UART
  • Base Address: 0x09000000 (QEMU virt platform)
  • Baud Rate: 115200 (default QEMU setting)
  • Features: TX/RX FIFOs, interrupt support (Stage 4)

Safety-Critical Compliance

  • C++ Standard: C++17 with AUTOSAR compliance
  • Coding Guidelines: MISRA C++ 2023 enforcement
  • Safety Levels: ASIL-QM through ASIL-D framework
  • Memory Safety: No dynamic allocation, compile-time verification

Build System

Compiler Configuration

arm-none-eabi-g++ \
  -march=armv7-a \
  -mtune=cortex-a15 \
  -mfpu=neon-vfpv4 \
  -mfloat-abi=hard \
  -ffreestanding \
  -nostdlib \
  -fno-exceptions \
  -fno-rtti \
  -fno-threadsafe-statics \
  -fno-use-cxa-atexit \
  -Werror

AUTOSAR C++ Flags

  • MISRA C++: Enabled via compiler warnings
  • Static Analysis: Compile-time verification
  • Runtime Safety: No exceptions, no RTTI
  • Memory Safety: Static allocation only

Linker Script Features

  • Section Layout: .text, .rodata, .data, .bss, .stack
  • Alignment: 16-byte alignment for exception vectors
  • Symbol Export: kernel_start, kernel_end for debugging
  • Load Address: 0x40000000 (QEMU virt RAM base)

Debugging

Serial Console Output

# Monitor UART output in QEMU
make run

# Expected output:
# Universalisos type-1 hypervisor booted.
# Stage 1: bare-metal C++ skeleton running on QEMU ARM virt.

Binary Inspection

# Check ELF sections and symbols
arm-none-eabi-readelf -h kernel.elf

# Disassemble the kernel
arm-none-eabi-objdump -d kernel.elf > kernel.disasm

# Examine the raw binary
hexdump -C kernel.bin | head -20

QEMU Debugging

# Run QEMU with GDB server
qemu-system-arm -M virt -m 1G \
  -kernel kernel.elf -nographic \
  -serial mon:stdio -s -S

# Connect with GDB in another terminal
arm-none-eabi-gdb kernel.elf
(gdb) target remote localhost:1234
(gdb) break kernel_main
(gdb) continue

Platform Information

QEMU ARM Virt Machine

  • CPU: ARM Cortex-A15 (v7-A)
  • RAM: 1 GiB (configurable)
  • Boot Method: Direct kernel loading
  • Serial: PL011 UART at 0x09000000
  • Interrupt Controller: ARM GIC at 0x08000000
  • Timer: ARMv7 generic timer

Device Tree

While Stage 1 doesn't use device tree, future stages will:

  • Stage 3: Memory layout from DTB
  • Stage 4: Device discovery from DTB
  • Stage 5: Guest OS DTB generation

Performance Characteristics

Current Stage 1 Metrics

  • Boot Time: <100ms to UART output
  • Memory Footprint: ~64 KiB kernel image
  • Interrupt Latency: N/A (interrupts disabled)
  • Context Switch Time: N/A (no context switching)

Expected Stage 2-5 Targets

  • Interrupt Latency: <10μs (Stage 4)
  • Context Switch Time: <50μs (Stage 3)
  • Scheduler Overhead: <5% CPU time (Stage 2)
  • Guest Boot Time: <500ms for minimal Linux (Stage 5)

Integration Points

Universalisos Ecosystem

  • Aurelio: Cyber-physical brain platform integration
  • nervura-electrica: Infrastructure and hosting support
  • replica-omnisciente: Agent orchestration foundation

PikeOS Codebase Integration

  • Source Reference: PikeOS 5.0 source code in ../src/
  • Documentation: Complete PikeOS manuals in ../docs/
  • XSD Schemas: Configuration schemas in ../xsd/
  • Build Tools: Eclipse IDE sources in ../ide/

Design notes

Memory Layout

  • The kernel is loaded by QEMU at RAM base 0x40000000.
  • A 64 KiB stack is reserved immediately after the BSS section.
  • Total memory identity-mapped: 512 MiB for QEMU virt machine.
  • Page tables use ARMv7 long descriptor format (4 KiB pages).

Boot Process

  1. Boot.S entry point sets up VBAR, stacks, and clears BSS
  2. C++ runtime initialization (constructors for global objects)
  3. UART driver initialization (PL01 UART at 0x09000000)
  4. kernel_main() entry point prints status message and halts

ARMv7-Specific Implementation

  • Exception Level: Runs at PL1 (Privileged Level 1)
  • MMU Configuration: Identity-mapped page tables for simplicity
  • Interrupts: Disabled in boot stub, uses wfi for idle
  • System Calls: SVC-based syscall framework (Stage 2)

Relationship to PikeOS Architecture

This Stage 1 implementation follows PikeOS hypervisor patterns:

  • Type-1 Hypervisor Design: Direct hardware access, no host OS
  • ARM Architecture Support: Native ARMv7 implementation
  • Safety-Critical Foundation: MISRA C++ compliant structure
  • Virtualization Framework: VM structures and lifecycle management

Current Implementation: Framework foundations matching PikeOS architecture patterns Remaining Work: Complete virtualization features, device drivers, guest OS support

See ../UNIVERSALISOS_VS_PIKEOS_5.0.md for detailed comparison analysis.