Xenon-OS — это проект операционной системы с нуля, созданный в учебных и эксперементальных целях.
Проект подразумевает поэтапное расширение функционала, что позволит внедрять уникальные особенности и улучшения по мере углубления знаний в области разработки ОС. /
...
- Корневая директория
Makefile,make.sh,make_clear.sh: Скрипты сборки и управления проектомREADME.md: Документация верхнего уровня
- Архитектурно-зависимый код (arch/i386/)
arch
└── i386
├── boot.S - Точка входа (ассемблерная загрузка)
├── crti.S - Начало CRT (C Runtime)
├── crtn.S - Окончание CRT
├── io.S - Низкоуровневые операции ввода/вывода
├── linker.ld - Скрипт линковщика (расположение секций)
├── tty.c - Драйвер текстового терминала
└── vga.h - Заголовок для работы с видеобуфером
- Позволяет поддерживать несколько архитектур (x86, ARM, RISC-V). При добавлении новой архитектуры просто создаёте аналогичную директорию.
- Конфигурации (configs/)
configs
└── grub.cfg - Конфигурация загрузчика GRUB
- Отделяет конфигурацию от кода, упрощает управление разными средами (debug/release).
- Документация (docs/)
docs
├── project.md - Общее описание проекта
├── tech.md - Технические детали реализации
└── tools.md - Инструменты разработки
- Соблюдает принцип разделения кода и документации.
- Драйверы устройств (drivers/)
drivers
├── io.h - Интерфейс ввода/вывода
├── serial.c - Драйвер последовательного порта
├── serial.h - Заголовок для UART
└── vga.c - Драйвер видеоконтроллера
- Изоляция аппаратно-зависимого кода
- Упрощает добавление новых драйверов
- Позволяет загружать драйверы как модули (в будущем)
- Системные заголовки (include/kernel/)
include
└── kernel
└── tty.h - Интерфейс терминала
- Чёткое разделение публичных и приватных заголовков
- Эмулирует структуру системных заголовков (#include <kernel/tty.h>)
- Упрощает распространение SDK для разработчиков
- Ядро ОС (kernel/)
kernel
└── kernel.c - Основной код ядра (инициализация, главный цикл)
- Центральный компонент системы, должен быть легко находимым.
- Стандартная библиотека (libc/)
libc
├── include - Системные заголовки
│ ├── stdio.h
│ ├── stdlib.h
│ ├── string.h
│ └── sys
│ └── cdefs.h
├── stdio - Реализация stdio
│ ├── printf.c
│ ├── putchar.c
│ └── puts.c
├── stdlib - Реализация stdlib
│ └── abort.c
└── string - Реализация string
├── memcmp.c
├── memcpy.c
├── memmove.c
├── memset.c
└── strlen.c
- Изолирует пользовательское пространство от ядра
- Позволяет использовать разные реализации libc
- Соответствует POSIX-совместимой структуре
- Упрощает портирование существующего ПО
...
-
Clone the project:
git clone https://github.com/singl3focus/xenon-os -
Change dir and run scripts:
./make_clear.sh && ./make.sh
TODO (ignore it now):
### Makefile
Make command form:
[command]
1. For collect ISO and start it to Bochs emulator: \
```make run```
- Start OS with emulation:
- QEMU:
qemu-system-i386 -cdrom xenon-os.iso - BOCHS:
TODO
- QEMU:
Use it!
-
Иерархия веток:
-
main←develop←feature/*/bugfix/* -
Каждая функция или исправление изолированы в своей ветке.
-
Связанность:
- Feature-ветки интегрируются через Pull Requests в
developпосле code review. - Bugfix-ветки для
mainвыпускаются как патчи, а дляdevelop— как улучшения. - Релизы из
developвmainпомечаются тегами (v0.1.0, v0.2.0 и т.д.).
- Feature-ветки интегрируются через Pull Requests в
-
Пример:
- Разработка драйвера USB:
- Создана ветка
feature-usb-driverизdevelop. - После завершения — PR в
develop. - Тестирование в
develop→ слияние вmainпри релизе.
-
-
Commits
| Обозначение | Описание |
|---|---|
| major | Добавление блока, который значительно меняет поведение ПО |
| feat | Новая функциональность (например, добавление драйвера VGA) |
| fix | Исправление ошибки (например, устранение зависания при обработке прерываний) |
| chore | Незначительные изменения, к примеру, обновление в документации |
- Anton Smirnov (ascom8)
- Imran Tursunov (singl3focus)