How friedrichosdev/nanoos works
NanoOS is an experimental x86_64 hobby operating system. Its principal workflow begins with Multiboot2 boot information, initializes kernel CPU and memory facilities, discovers platform hardware, and starts scheduling across available CPUs. Separate branches provide input and graphical output. The README documents the boot sequence and capabilities; source excerpts confirm selected implementation links, but many listed subsystems were not sampled, so their internal connections are not inferred.
Main entry points: init.c Kernel Initialization · apic.c APIC and Timers · smp.c SMP Startup · acpi.c ACPI
Components 24
Boot and Core
- Multiboot2
src/kernel/arch/x86_64/boot/multiboot2.c - Kernel Initialization
src/kernel/core/init.c - GDT
src/kernel/arch/x86_64/gdt/gdt.c - Interrupt Handling
src/kernel/arch/x86_64/idt/handler.c
Memory Management
- Physical Memory
src/kernel/arch/x86_64/mm/pmm.c - Virtual Memory
src/kernel/arch/x86_64/mm/vmm.c - Kernel Heap
src/kernel/arch/x86_64/mm/heap.c
Platform Hardware
- ACPI
src/kernel/arch/x86_64/acpi/acpi.c - APIC and Timers
src/kernel/arch/x86_64/apic/apic.c - PCI Enumeration
src/kernel/arch/x86_64/drivers/pci.c - RTC
src/kernel/arch/x86_64/drivers/rtc.c - Serial Driver
src/kernel/arch/x86_64/drivers/serial.c
Multitasking
- Scheduler
src/kernel/sched/sched.c - Threads and Processes
src/kernel/sched/thread.c - SMP Startup
src/kernel/arch/x86_64/smp/smp.c
Input and Graphics
- PS/2 Controller
src/kernel/drivers/hid/ps2/i8042.c - Input Events
src/kernel/drivers/hid/input.c - HID Interface
src/kernel/drivers/hid/hid.c - Framebuffer Driver
src/kernel/drivers/gfx/framebuffer/fb_driver.c - Graphics Abstraction
src/kernel/drivers/gfx/gfx.c - 2D Compositor
src/kernel/drivers/gfx/compositor/compositor.c - Version Splash
src/kernel/drivers/gfx/version_splash/version_splash.c
Kernel Runtime
- Math Library
src/kernel/lib/math/__rem_pio2_large.c
Other components
- UEFI / GRUB
Connections 24
- UEFI / GRUB → Multiboot2: loads kernel
README.md - Multiboot2 → Kernel Initialization: passes boot data
README.md - Kernel Initialization → GDT: initializes CPU
README.md - Kernel Initialization → Interrupt Handling: initializes interrupts
README.md - Kernel Initialization → Physical Memory: initializes memory
README.md - Kernel Initialization → Virtual Memory: initializes memory
README.md - Virtual Memory → Physical Memory: allocates pages
src/kernel/arch/x86_64/mm/vmm.c - Kernel Initialization → ACPI: initializes platform
README.md - Kernel Initialization → APIC and Timers: initializes platform
README.md - Kernel Initialization → PCI Enumeration: initializes platform
README.md - APIC and Timers → ACPI: reads tables
src/kernel/arch/x86_64/apic/apic.c - PCI Enumeration → ACPI: reads tables
src/kernel/arch/x86_64/drivers/pci.c - Kernel Initialization → Scheduler: starts scheduling
README.md - Kernel Initialization → SMP Startup: starts SMP
README.md - SMP Startup → APIC and Timers: starts CPUs
src/kernel/arch/x86_64/smp/smp.c - SMP Startup → GDT: loads descriptors
src/kernel/arch/x86_64/smp/smp.c - Interrupt Handling → APIC and Timers: acknowledges IRQ
src/kernel/arch/x86_64/idt/handler.c - Kernel Initialization → PS/2 Controller: initializes input
README.md - PS/2 Controller → Input Events: delivers events
- Input Events → HID Interface: provides events
- Kernel Initialization → Framebuffer Driver: initializes graphics
README.md - Framebuffer Driver → Graphics Abstraction: provides video
- Graphics Abstraction → 2D Compositor: renders layers
- 2D Compositor → Version Splash: renders splash