Операционная система для RISC-V (OC2r / Milk-V Duo S). Монолитное ядро на Rust, загрузчик на C++, userspace shell на Rust, собственный C-компилятор.
| Компонент | Язык | Описание | Статус |
|---|---|---|---|
| OnyxBoot | C++20 | Загрузчик: FDT, VirtIO, SDHCI, FAT32/ext4, GPT, boot menu | v0.4 |
| OnyxKernel | Rust | Монолитное ядро: MM (Sv39), SMP, VFS, TCP/IP, драйверы, 77 syscalls | active |
| OnyxShell | Rust | Шелл: 20 команд, табы, история, пайпы/редиректы, globbing | v0.3 |
| OnyxCompiller | C99 | C → RV64 → .onx, single-pass, самокомпиляция в процессе |
MVP |
| OnyxOS | — | Документация, скрипты, интеграция | meta |
# 1. Установить зависимости
sudo pacman -S cmake base-devel curl libarchive # Arch
sudo apt install cmake build-essential libcurl4-openssl-dev libarchive-dev # Deb
# 2. Скачать все Onyx-репозитории
./.vent/vent -j 4 Onyx.vent
# 3. Собрать всё
bash scripts/build-all.sh
# 4. Запустить в QEMU
bash scripts/run-qemu.shOnyxOS/
├── Onyx.vent # Dependency-файл для Vent
├── .vent/
│ ├── vent # Vent binary
│ └── repos/ # Стянутые репозитории (после запуска Vent)
├── scripts/
│ ├── bootstrap.sh # Установка Vent + клонирование репозиториев
│ ├── build-all.sh # Сборка всех компонентов
│ └── run-qemu.sh # Запуск QEMU (OnyxBoot + OnyxKernel)
├── docs/ # Документация
│ ├── architecture/ # Архитектура: boot, memory, privilege modes
│ ├── dev/ # Разработка: building, contributing, roadmap
│ ├── hardware/ # Железо: UART, PLIC, CLINT, VirtIO
│ ├── internals/ # Внутренности: coding style, error handling
│ ├── kernel/ # Ядро: процессы, MM, прерывания
│ ├── shell/ # Шелл: команды, internals
│ └── lore/ # Фольклор
├── Makefile # Skeleton (WIP)
└── README.md
cd .vent/repos/OnyxKernel
cargo build --releasecd .vent/repos/OnyxBoot
make -j$(nproc)cd .vent/repos/OnyxShell
bash build.shcd .vent/repos/OnyxCompiller
make host # нативный бинар для Linux
make onyx # кросс-компиляция в .onxМод OC2R умеет скачивать прошивку компьютера из GitHub-репозитория по манифесту
oc2r-firmware.json в корне репозитория. Мод читает его, берёт ссылку image
и заливает flash-образ в виртуальную машину.
{
"name": "OnyxOS",
"version": "0.3.0",
"layout": "minux",
"image": "https://github.com/loki5512344/OnyxOS/releases/latest/download/onyx-flash.img"
}| Поле | Значение | Описание |
|---|---|---|
name |
OnyxOS |
Название прошивки |
version |
0.3.0 |
Версия из Cargo.toml воркспейса OnyxKernel |
layout |
minux |
Схема раскладки flash (см. ниже) |
image |
прямая ссылка на onyx-flash.img |
Цельный flash-образ, прикреплённый к GitHub Release |
Раскладка minux (flash ровно 15 МБ):
| Offset | Размер | Содержимое |
|---|---|---|
0x000000 (0) |
— | fw_jump.bin — OpenSBI (файл из мода OC2R: src/main/scripts/firmware_files/fw_jump.bin) |
0x200000 (2 МБ) |
— | Образ ядра OnyxKernel (ELF, собранный cargo) |
| до 15 МБ | — | Нули |
# 1. Разрешить зависимости — vent клонирует репозитории в .vent/repos/
make deps
# 2. Собрать bootloader и ядро
make -C .vent/repos/OnyxBoot
cargo build --release -p onyx_kernel --target riscv64gc-unknown-none-elf \
--manifest-path .vent/repos/OnyxKernel/Cargo.toml
# 3. Положить настоящий OpenSBI как firmware/fw_jump.bin
# (берётся из мода OC2R: src/main/scripts/firmware_files/fw_jump.bin)
# 4. Склеить образ ровно 15 МБ по схеме minux
dd if=/dev/zero of=onyx-flash.img bs=1M count=15
dd if=firmware/fw_jump.bin of=onyx-flash.img conv=notrunc
dd if=.vent/repos/OnyxKernel/target/riscv64gc-unknown-none-elf/release/onyx-kernel \
of=onyx-flash.img bs=1M seek=2 conv=notrunc.github/workflows/release.yml при пуше git-тега (например v0.3.0):
- Собирает все компоненты (
make deps→ vent клонирует OnyxKernel/OnyxBoot/OnyxShell/OnyxCompiller); - Склеивает
onyx-flash.img(15 МБ, layoutminux); - Создаёт GitHub Release и прикрепляет образ.
Ссылка image в манифесте указывает на /releases/latest/download/onyx-flash.img —
GitHub сам отдаёт ассет последнего релиза по тегу.
Для рабочего релиза нужно:
- Положить настоящий
fw_jump.bin(OpenSBI) вfirmware/fw_jump.binрепозитория либо задать переменную репозиторияOC2R_FW_JUMP_URL(если файла нет, CI соберёт образ с заглушкой — он не загрузится); - Создать тег
v0.3.0и запушить — CI соберёт и зальёт образ.
На каждый пуш в main workflow дополнительно публикует превью-образ как
artifact (без создания Release).
| Область | Что делаем |
|---|---|
| OnyxKernel | FAT32 read, USB URB, symlink, chmod, 32-bit порт, unit-тесты |
| OnyxCompiller | Самокомпиляция, multi-file linking, C++ |
| CI/CD | GitHub Actions, автотесты в QEMU |
| Железо | Проверка на Milk-V Duo S |
Подробнее — docs/dev/roadmap.md и todo.md.
GPL-3.0-or-later