This project is an educational platform for step-by-step learning and development of basic operating system components. The goal is not to create a fully functional OS, but to understand how its key mechanisms work "from the inside."
-
IDT initialization and interrupt handling (CPU exceptions + IRQs).
-
PIC remapping and sending EOI.
-
PIT (timer) — initialization and handler, incrementing uptime (seconds).
-
RTC — reading the current time (accounting for BCD/12h/24h formats, timezone offset).
-
VGA console: character output, scrolling, hardware cursor.
-
Keyboard handler: scan-code → ASCII, Shift/CapsLock, Backspace, Enter, string input with prompt.
-
System call vector (
0x80) is already connected in the IDT — framework ready. -
Add a syscall for string output to the terminal (
sys_write). -
Memory allocator.
-
Add power off and reboot to kernel.
-
Multitasking.
-
Create terminal.
-
Implement a basic file system.
-
Make the terminal a separate application rather than part of the kernel.
-
Implement Long mode
-
Implement working multitasking for Long mode (x86_64)
-
Rewrite terminal to (NASM x86_64).
-
Check syscall operation (status working)
-
Build kernel in iso with GRUB
-
Added support for BIOS and UEFI (Multiboot2).
-
Added commands
ls,cd,pwd,mkdir,rmfor working with the file system and moving around directories.-
ls -
cd -
pwd -
mkdir -
rm
-
-
Added graphics mode with screen resolution support.
-
Added power off support for power modes via ACPI.
-
Added PCI driver for working with devices.
-
Added IDE driver for working with disks.
-
Support for Loading and Executing C User Programs in Kernel.
-
Added Spinlock for exclusive access.
-
Added Seqlock for frequent reading.
-
RSDP search and validation system added.
-
Added user mode.
-
Added panic.
-
Added process names.
-
Added basic sound implementation driver.
-
Added mouse driver.
-
Migrated file system storage from RAMDisk to physical disk (IDE).
-
Added kernel memory protection (per-task page tables, ring-3 isolation).
-
Added serial driver.
-
Migration of user applications from the raw binary format to the ELF format, and adding support to the kernel for launching user programs in ELF format.
To view the list of available commands, use the "help" command.
# Building the kernel and creating an ISO image
make iso
# Running in QEMU
make run| Command | Description |
|---|---|
make or make all |
Build the kernel (default) |
make iso |
Build the kernel and create a bootable ISO image |
make run |
Build, create ISO, and run in QEMU |
make debug |
Run with debug information and gdb stub |
make clean |
Remove all build artifacts |
make help |
Help for available commands |
Make sure the necessary tools are installed:
sudo apt install grub-pc-bin xorriso mtools qemu-system-x86make- All build artifacts (.o files and final binary) are placed in the
build/folder - Final binary:
build/kernel.elf
Normal Run:
make runCreates an ISO image and runs the kernel in the QEMU emulator
Run with Debugging:
make debugBuild with debug information, create ISO, and run in QEMU with serial output and gdb support
Pass options through the QEMU_OPTS variable:
# Running with gdb stub and 512 MB of RAM
make run QEMU_OPTS="-s -S -m 512"
# Debugging with gdb
make debug QEMU_OPTS="-s -S"Note: the
-s -Sflags enable gdb stub and pause the CPU until the debugger is connected
make cleanRemoves the build/ folder and all build artifacts
For a detailed list of all available commands, run:
make help