KeprOS — минимальное 32-битное x86 ядро операционной системы,
написанное на C и Assembly с нуля, с собственной файловой системой и shell.
KeprOS — это учебно-экспериментальное ядро ОС для архитектуры i386. Проект включает загрузчик (Multiboot), драйверы VGA, клавиатуры PS/2 и ATA PATA, две файловые системы (оперативную и дисковую), а также интерактивный shell с базовым набором команд.
Ядро загружается через GRUB (Multiboot-совместимо) и может быть запущено в эмуляторе QEMU или на реальном железе.
- 🖥️ Multiboot-загрузчик — GRUB-совместимый (0x1BADB002)
- 📟 VGA Text Mode — 80×25, цветной вывод, скроллинг
- ⌨️ PS/2 Keyboard Driver — Shift, Caps Lock, Ctrl, Alt
- 💾 ATA PATA Driver — LBA28, чтение/запись секторов
- 📁 RAM File System — до 3 файлов по 512 байт
- 🗄️ Disk File System — блочная ФС (2048 блоков, bitmap)
- 🖩 Shell — 8 встроенных команд
- 📀 ISO-образ — загрузка с CD/DVD через GRUB
# Ubuntu/Debian
sudo apt install build-essential nasm qemu-system-x86 grub-pc-bin xorriso
# Arch Linux
sudo pacman -S base-devel nasm qemu-system-x86 grub libisoburngit clone https://github.com/kempedron/KeprOS.git
cd KeprOS
# Сборка ядра
make
# Запуск в QEMU
make run
# Создание и запуск ISO
make iso
make run-iso| Target | Description |
|---|---|
all / kernel |
Сборка ядра (kernel ELF) |
clean |
Очистка артефактов сборки |
run |
Запуск в QEMU (-kernel) |
iso |
Создание загрузочного ISO |
run-iso |
Запуск ISO в QEMU |
После загрузки вас встретит приглашение root@keprOS>. Доступные команды:
| Command | Usage | Description |
|---|---|---|
help |
help |
Список доступных команд |
clear |
clear |
Очистка экрана |
echo |
echo <text> |
Вывод текста |
touch |
touch <filename> |
Создание файла |
write |
write <filename> <content> |
Запись в файл |
cat |
cat <filename> |
Чтение файла |
ls |
ls |
Список файлов |
rm |
rm <filename> |
Удаление файла |
KeprOS/
├── boot.asm # Multiboot-загрузчик (NASM)
├── kernel.c # Ядро: драйверы, ФС, shell (844 строки)
├── io.h # Port I/O функции (inb/outb)
├── types.h # Стандартные типы (uint8_t, size_t, ...)
├── link.ld # Linker script (i386, 1MB base)
├── Makefile # Система сборки
├── LICENSE # MIT License
└── kernel # Скомпилированное ядро (ELF32)
0x00100000 ┌─────────────────────┐ ← Kernel entry point
│ .text │ Код ядра
├─────────────────────┤
│ .rodata │ Константы
├─────────────────────┤
│ .data │ Инициализированные данные
├─────────────────────┤
│ .bss │ Неинициализированные данные
├─────────────────────┤
│ .bootstrap_stack │ Стек (16 KB)
└─────────────────────┘
0x000B8000 ┌─────────────────────┐
│ VGA Text Buffer │ Видеопамять (80×25)
└─────────────────────┘
| Setting | Value |
|---|---|
| Compiler | gcc -m32 -ffreestanding -nostdlib |
| Assembler | nasm -f elf32 |
| Linker | ld -m elf_i386 -T link.ld -nostdlib |
| Entry | start (boot.asm → calls os_main()) |
| Magic | 0x1BADB002 (Multiboot) |
| Subsystem | Lines | Description |
|---|---|---|
| VGA Driver | ~100 | Прямая запись в 0xB8000, скроллинг, курсор |
| PS/2 Driver | ~70 | Scan code decoding, модификаторы |
| ATA Driver | ~110 | LBA28 R/W, 0x1F0-0x1F7, MBR check |
| RAM FS | ~90 | 3 файла × 512B, create/delete/read/write |
| Disk FS | ~60 | Блочная структура, bitmap allocation |
| Shell | ~160 | Tokenizer (with quotes), command dispatch |
┌─────────────────────────────────────────────────────────┐
│ │
│ ╔═══════════════════════════╗ │
│ ║ KeprOS v0.1 ║ │
│ ╚═══════════════════════════╝ │
│ │
│ ATA init: OK │
│ MBR signature: 0xAA55 │
│ Disk FS: 2048 blocks available │
│ │
│ ───────────────────────────────────────── │
│ │
│ root@keprOS> help │
│ > clear - Clear screen │
│ > echo - Print text │
│ > touch - Create file │
│ > write - Write to file │
│ > cat - Read file │
│ > ls - List files │
│ > rm - Delete file │
│ > help - This help │
│ │
│ root@keprOS> _ │
│ │
└─────────────────────────────────────────────────────────┘
Распространяется под лицензией MIT. См. файл LICENSE для получения дополнительной информации.
MIT License
Copyright (c) 2026 kempedron
Made with ❤️ by kempedron