A toy kernel written in C targeting both x86 and x86_64
- GDT
- Segmentation
- ISR/IQR support
- Paging
- Heap allocated memory
- APIC support
- ACPI configuration
- PS/2 keyboard driver
- Timer driver
- Makeshift shell
- Logging
- Limine support
- Logging
- APIC support
- uACPI full mode
- PS/2 keyboard driver
- AC97 audio driver
- Pong
- Standard Library - basic stdio, stdlib, string functions
- Graphics Driver - VESA VBE framebuffer, or proper support
- Hush - Horizon Utility Shell (Basic shell)
- File System - Basic filesystem implementation (FAT32 or custom)
- System Calls - User/kernel mode interface
- Text editor - vim worsened
- User Mode - Ring 3 execution environment
- Multiprocessing w/ ACPI infrastructure
- Process Management - Task switching and scheduling
- Scheduler
- VFS - Virtual File System abstraction
- IPC Mechanisms - pipes, shared memory, message queues
- Network stack - TCP/IP implementation
- Ethernet driver
- USB driver
- ELF execution
- GUI Framework - basic windowing system
sudo apt install cmake nasm xorriso qemu-system-x86 grub-pc-bin grub-common binutils
# x86_64 cross-compiler
sudo apt install gcc-x86-64-linux-gnu binutils-x86-64-linux-gnu
# or build x86_64-elf-gcc from source: https://wiki.osdev.org/GCC_Cross-Compiler
# i386 cross-compiler
sudo apt install gcc-i686-linux-gnu binutils-i686-linux-gnu
# Limine (x86_64 only)
# See: https://github.com/limine-bootloader/limine/blob/v10.x/INSTALL.mdsudo pacman -S cmake nasm libisoburn qemu-system-x86 grub gcc binutils
# Cross-compilers and Limine (AUR)
yay -S i686-elf-gcc x86_64-elf-gcc liminebrew install cmake nasm xorriso qemu
# Cross-compilers
brew install x86_64-elf-gcc x86_64-elf-binutils # x86_64
brew install i686-elf-gcc i686-elf-binutils # i386
# Limine (x86_64 only)
# See: https://github.com/limine-bootloader/limine/blob/v10.x/INSTALL.mdUntested, YMMV
pacman -S cmake nasm mingw-w64-cross-gcc mingw-w64-cross-binutils xorriso
# Limine (x86_64 only)
# See: https://github.com/limine-bootloader/limine/blob/v10.x/INSTALL.md# i386
cmake --preset i386
cmake --build --preset i386
# x86_64
cmake --preset x86_64
cmake --build --preset x86_64
# Run with qemu
./qemu.sh # will automatically detect architectureSee CMAKE_BUILD.md for more details.