6.1 KiB
MetalOS - Implementation Summary
Project Overview
MetalOS is a minimal, from-scratch operating system designed to boot directly into a single QT6 Hello World application on AMD64 hardware with a Radeon RX 6600 GPU via UEFI.
Key Philosophy:
- Minimal implementation - only what's needed for QT6
- No command line or shell - boots directly to the app
- Creative freedom for OS components, precision for hardware drivers
- Single application focus
Current Status: Phase 1 Complete ✅
What's Been Implemented
1. Project Structure
MetalOS/
├── bootloader/ # UEFI bootloader (skeleton)
├── kernel/ # Minimal kernel (skeleton)
├── userspace/apps/ # QT6 Hello World application
├── docs/ # Comprehensive documentation
└── scripts/ # Build and utility scripts
2. Documentation (7 files, ~1400 lines)
- README.md: Project introduction and quick start
- ARCHITECTURE.md: System design and component overview
- BUILD.md: Build instructions and prerequisites
- DEVELOPMENT.md: Development workflow and coding standards
- ROADMAP.md: Detailed phase-by-phase implementation plan
- COMPONENTS.md: Component checklist and TODO tracking
- CONTRIBUTING.md: Contribution guidelines
3. Bootloader Skeleton
- Files: 3 source files, 2 headers
- Features:
- UEFI type definitions
- Boot information structure
- Entry point stub (efi_main)
- Linker script for UEFI
- Makefile for building
TODO: Implement actual UEFI protocol calls, graphics init, kernel loading
4. Kernel Skeleton
- Files: 2 source files, 2 headers
- Features:
- Kernel entry point (kernel_main)
- Basic framebuffer console with text output
- Boot info structure
- Linker script for kernel
- Makefile for building
TODO: Memory management, interrupts, drivers, scheduler
5. QT6 Application Template
- Files: hello_world.cpp, hello_world.pro
- Features:
- Full-screen QT6 Hello World app
- Simple label-based UI
- Ready for porting to MetalOS
TODO: Port QT6 to MetalOS, create QPA plugin
6. Build System
- Files: 4 Makefiles, 1 shell script
- Features:
- Separate builds for bootloader and kernel
- Main Makefile orchestrates everything
- Image creation script (requires xorriso)
- QEMU testing targets
TODO: Create actual bootable image when components are ready
Statistics
- Total Lines: ~2187
- Source Files: 8 (C/C++/headers)
- Documentation: 7 markdown files
- Build Files: 5
- Directories: 19
Design Highlights
1. Single Application Boot
The system boots directly into the QT6 Hello World app with no shell or init process:
UEFI → Bootloader → Kernel → QT6 App (full screen)
No command line interface is provided or needed.
2. Minimal Everything
- No file system (app embedded in boot image)
- No networking
- No multi-user support
- No POSIX compatibility
- Single core, single process
- Static linking only
3. Hardware Specific
Optimized for:
- CPU: AMD64 (x86-64)
- GPU: Radeon RX 6600 (Navi 23)
- Boot: UEFI only (no legacy BIOS)
4. Clear Separation
- Creative OS Design: Memory management, scheduling, etc. - custom implementations
- Precise Hardware Drivers: GPU, PCI, USB - must follow actual hardware specs
Next Steps (Phase 2)
Immediate Priorities:
-
UEFI Bootloader Implementation
- Console I/O for debugging
- Graphics Output Protocol
- File system access
- Kernel loading
- Memory map retrieval
-
Kernel Improvements
- GDT/IDT setup
- Basic interrupt handling
- Physical memory allocator
- Improved console output
-
Testing Infrastructure
- Ensure code compiles with cross-compiler
- Test in QEMU with OVMF
- Add debug logging
Long-term Goals:
- Phase 3-4: Complete kernel and HAL (especially GPU driver)
- Phase 5-6: System calls and user space support
- Phase 7: QT6 port (biggest challenge)
- Phase 8: Integration and testing on real hardware
Technical Challenges Ahead
Major Challenges:
-
GPU Driver: Radeon RX 6600 initialization is complex
- Need to study Linux amdgpu driver
- Register programming must be precise
- Display pipeline configuration
-
QT6 Port: Significant work required
- QT Platform Abstraction (QPA) plugin
- Dependencies (zlib, freetype, libpng, etc.)
- Event loop integration
- Input handling
-
Memory Management: Need working virtual memory
- Page table setup
- Kernel/user space separation
- Memory allocators
-
USB Stack: For keyboard/mouse input
- XHCI controller (modern USB)
- HID class drivers
- Or fallback to PS/2
Mitigation:
- Incremental development and testing
- Use QEMU extensively before hardware
- Reference (but don't copy) Linux kernel
- Keep scope minimal at each phase
Resources Required
Development Tools:
- GCC cross-compiler (x86_64-elf-gcc)
- NASM assembler
- GNU Make
- QEMU with UEFI support (OVMF)
- GDB for debugging
Hardware (for final testing):
- AMD64 system
- Radeon RX 6600 GPU
- USB keyboard/mouse
- USB drive for booting
Knowledge Areas:
- UEFI specification
- x86-64 architecture (GDT, IDT, paging)
- PCI/PCIe bus
- AMD GPU architecture
- USB protocol (XHCI/HID)
- QT6 internals and QPA
Success Criteria
Minimal Success:
- ✅ Boots from UEFI
- ✅ Displays text via GPU
- ✅ Loads and runs QT6 app
- ✅ Responds to keyboard input
Full Success:
- ✅ Reliable boot on target hardware
- ✅ Full HD (1920x1080) rendering
- ✅ Smooth QT6 widget rendering
- ✅ Responsive mouse/keyboard input
- ✅ Boot time under 10 seconds
- ✅ Clean, professional appearance
Conclusion
Phase 1 is complete with a solid foundation:
- ✅ Clear architecture and design
- ✅ Project structure in place
- ✅ Comprehensive documentation
- ✅ Skeleton code for all major components
- ✅ Build system framework
The project is ready for Phase 2 (UEFI Bootloader implementation) and beyond.
MetalOS - Proving that a minimal, purpose-built OS can run modern GUI applications.