os/bootloader/README.md

6.1 KiB

NOS UEFI Bootloader Implementation

This directory contains the UEFI bootloader implementation for the NOS operating system.

Phase 2: UEFI Implementation (Weeks 5-8)

Completed Features

UEFI 2.10 Core Protocol Support

  • System Table and Boot Services interfaces
  • Runtime Services support
  • Protocol abstraction layer
  • UEFI application entry point
  • Memory management integration

UEFI Graphics Output Protocol (GOP)

  • Framebuffer detection and initialization
  • Pixel format conversion
  • Basic drawing primitives
  • Font rendering system
  • Boot splash screen support

UEFI Memory Management

  • UEFI pool and page allocation
  • Memory map parsing and conversion
  • Dynamic memory allocation strategies
  • Memory type conversion
  • Memory statistics reporting

UEFI Secure Boot Foundation

  • Platform Key (PK) support
  • Key Exchange Key (KEK) support
  • Signature Database (db/dbx) management
  • Kernel signature verification
  • Secure Boot status reporting
  • Setup Mode detection

UEFI File System Support

  • Simple File System Protocol implementation
  • Kernel loading from EFI partition
  • EFI variable access
  • LoadOptions parsing
  • Multi-path kernel search

Architecture Support

The bootloader supports all three target architectures:

  • x86_64: Complete UEFI 2.10 support
  • AArch64: UEFI application with PE/COFF format
  • RISC-V 64: UEFI application support

Key Components

Core Modules

  • src/uefi/main.rs - UEFI application entry point
  • src/uefi/protocol.rs - UEFI protocol implementation
  • src/uefi/memory.rs - UEFI memory management
  • src/uefi/secure_boot.rs - Secure boot implementation

Supporting Modules

  • src/graphics/mod.rs - Graphics and framebuffer support
  • src/arch/x86_64.rs - x86_64-specific UEFI support
  • src/arch/aarch64.rs - AArch64-specific UEFI support
  • src/arch/riscv64.rs - RISC-V 64-specific UEFI support

Features

UEFI 2.10 Compliance

  • Full UEFI specification compliance
  • Modern boot protocol support
  • Cross-platform compatibility
  • Industry-standard interface

Security Features

  • UEFI Secure Boot implementation
  • Digital signature verification
  • Platform key management
  • Secure boot chain validation

Graphics Support

  • UEFI Graphics Output Protocol (GOP)
  • Multi-resolution framebuffer support
  • Custom boot screens and menus
  • Font rendering system

File System Support

  • EFI file system partition access
  • Kernel loading from multiple paths
  • Configuration file support
  • Command line parsing

Build Configuration

Features

  • uefi_support - Enable UEFI bootloader
  • graphics_support - Enable graphics output
  • secure_boot_support - Enable secure boot
  • network_support - Enable network booting

Build Targets

  • x86_64-unknown-uefi - x86_64 UEFI target
  • aarch64-unknown-uefi - AArch64 UEFI target
  • riscv64-unknown-uefi - RISC-V 64 UEFI target

Usage

Building for UEFI

# Build for x86_64 UEFI
cargo build --release --target x86_64-unknown-uefi

# Build for AArch64 UEFI
cargo build --release --target aarch64-unknown-uefi

# Build for RISC-V UEFI
cargo build --release --target riscv64-unknown-uefi

Running in QEMU

# UEFI firmware required
qemu-system-x86_64 \
    -bios OVMF.fd \
    -drive if=pflash,format=raw,readonly,file=bootloader.efi \
    -serial mon:stdio \
    -nographic

qemu-system-aarch64 \
    -bios QEMU_EFI.fd \
    -drive if=pflash,format=raw,readonly=file=bootloader.efi \
    -serial mon:stdio

Testing

UEFI Compatibility Testing

  • Test with different UEFI firmware versions
  • Validate UEFI specification compliance
  • Test secure boot functionality
  • Verify graphics output support

Integration Testing

  • Test kernel loading from EFI partitions
  • Verify memory map handling
  • Test boot parameter passing
  • Validate graphics initialization

Dependencies

Core Dependencies

  • uefi - UEFI 2.10 specification implementation
  • uefi-services - High-level UEFI services
  • uefi-macros - UEFI utility macros

Optional Dependencies

  • embedded-graphics - Graphics rendering
  • tinybmp - BMP image support
  • smoltcp - Network stack support

Architecture Details

Boot Flow

  1. UEFI firmware loads bootloader as EFI application
  2. Bootloader initializes UEFI services
  3. Bootloader detects system capabilities
  4. Optional: Display boot menu or splash screen
  5. Bootloader loads kernel from EFI partition
  6. Bootloader verifies kernel signature (if secure boot)
  7. Bootloader exits UEFI boot services
  8. Bootloader transfers control to kernel

Memory Layout

  • UEFI memory pool allocation for bootloader data
  • Page allocation for kernel image
  • Dynamic memory map handling
  • Runtime services preservation

Protocol Integration

  • System table access for UEFI services
  • Boot services for early boot operations
  • Runtime services for persistent operations
  • Protocol abstraction for cross-platform support

Next Steps

Phase 3: BIOS/Multiboot2 Implementation

  • Traditional BIOS interrupt services
  • Multiboot2 specification support
  • Legacy VGA graphics support
  • BIOS bootloader implementation

Phase 4: Advanced Features

  • Interactive boot menu system
  • Network boot (PXE/iPXE) support
  • Recovery mode implementation
  • Configuration management

Phase 5: Integration and Testing

  • Complete system integration
  • Comprehensive testing suite
  • Performance optimization
  • Production deployment

Standards Compliance

UEFI 2.10 Specification

  • Full compliance with UEFI 2.10
  • Industry-standard boot protocol support
  • Cross-vendor compatibility

Security Standards

  • UEFI Secure Boot 2.4 compliance
  • Digital signature verification
  • Certificate chain validation

Contributing

Development Guidelines

  • Follow UEFI specification guidelines
  • Maintain cross-platform compatibility
  • Implement comprehensive error handling
  • Add thorough documentation

Code Style

  • Use Rust #![no_std] environment
  • Implement proper error handling
  • Follow memory safety guidelines
  • Add comprehensive comments

This implementation represents a significant milestone in making NOS a modern, production-ready operating system with full UEFI support.