Update README.md

This commit is contained in:
2026-03-30 14:22:37 +03:00
parent d9e43aedbe
commit 927b0979b6

202
README.md
View File

@@ -1,98 +1,166 @@
<h1 align="center"><img width="512" src="https://git.inotfail.com/ami-chuu/Elyz/raw/commit/3831cfd967afb60efe108a7579a767ec2309631b/logo.png" alt="Elyz"></h1> <h1 align="center">
<p align="center"><b>Микроядерная операционная система</b></p> <img width="512" src="https://git.inotfail.com/ami-chuu/Elyz/raw/commit/3831cfd967afb60efe108a7579a767ec2309631b/logo.png" alt="Elyz">
</h1>
## 📂 Структура проекта <p align="center">
<b>H2O</b>
</p>
* `kernel/` — Исходный код ядра на. Elyz is a microkernel operating system written in Rust. The project uses the Limine bootloader and supports multiple architectures. The current implementation includes basic kernel initialization, physical memory management, paging, and graphical output via framebuffer.
* `limine/` — Файлы загрузчика Limine.
* `ovmf/` — Файлы прошивки для поддержки загрузки через UEFI.
* `limine.conf` — Конфигурация меню загрузки.
* `GNUmakefile` — Основной сценарий сборки и запуска.
## 🛠 Требования ## Project Structure
Для работы со сборкой понадобятся следующие инструменты: | Directory/File | Description |
|----------------|-------------|
| `kernel/` | Kernel source code (Rust) |
| `limine/` | Limine bootloader |
| `ovmf/` | UEFI firmware for emulation |
| `limine.conf` | Boot menu configuration |
| `GNUmakefile` | Main Makefile for building and running |
| Инструмент | Описание | ## System Requirements
| :--- | :--- |
| **GNU Make** | Утилита для сборки (`make`). |
| **Rust** | Nightly версия, включая `rust-src`. |
| **xorriso** | Необходим для создания загрузочных ISO-образов. |
| **sgdisk & mtools** | Необходимы для создания образов жесткого диска (HDD/USB). |
| **QEMU** | Эмулятор для тестирования ядра. |
## 🚀 Запуск и отладка | Tool | Version/Requirements | Purpose |
|------|---------------------|---------|
| GNU Make | ≥ 4.0 | Project building |
| Rust | Nightly with `rust-src` | Kernel compilation |
| xorriso | Any | ISO image creation |
| sgdisk | Any | Disk image creation |
| mtools | Any | Disk image handling |
| QEMU | ≥ 6.0 | Emulation |
* **Склонируйте репозиторий** **Installing dependencies:**
**Ubuntu/Debian:**
```bash
sudo apt install make rustc xorriso gdisk mtools qemu-system-x86
rustup toolchain install nightly --component rust-src
```
**Arch Linux:**
```bash
sudo pacman -S make rust xorriso gdisk mtools qemu-desktop
rustup toolchain install nightly --component rust-src
```
## Building and Running
### Preparation
```bash ```bash
git clone https://git.inotfail.com/INotFail/Elyz.git git clone https://git.inotfail.com/INotFail/Elyz.git
cd elyz cd Elyz
rustup override set nightly
``` ```
* **Сборка ядра** ### Main Makefile Targets
```bash
cd kernel
make all
cd ../
```
* **Запуск (основные способы)** | Target | Description | Result |
```bash |--------|-------------|--------|
make run-bios | `make all` | Kernel compilation + ISO creation | `Elyz.iso` |
``` | `make run` | Full build + QEMU launch (BIOS) | BIOS emulation |
или | `make run-bios` | Run existing image (BIOS) | BIOS emulation |
| `make run-uefi` | Full build + QEMU launch (UEFI) | UEFI emulation |
| `make all-hdd` | Compilation + HDD/USB image | `Elyz.hdd` |
| `make run-hdd` | Build HDD + QEMU launch | HDD emulation |
| `make clean` | Clean build artifacts | — |
**Run examples:**
```bash ```bash
# BIOS with auto-build
make run make run
```
или # UEFI mode
```bash
make run-uefi make run-uefi
# USB/HDD image
make all-hdd
``` ```
## Supported Architectures
`make all` скомпилирует ядро (из kernel/), а затем сгенерирует загрузочный ISO-образ. The `KARCH` environment variable sets the target architecture (default: `x86_64`).
`make run` соберет ядро и загрузочный ISO-образ (эквивалент команды make all), а затем запустит его с помощью команды qemu (если установлено). | Architecture | `KARCH` value | Status |
|--------------|---------------|--------|
| x86_64 | `x86_64` | Full support |
| AArch64 | `aarch64` | Experimental |
| RISC-V 64 | `riscv64` | Experimental |
| LoongArch 64 | `loongarch64` | Experimental |
`make all-hdd` скомпилирует ядро, а затем сгенерирует исходный образ, подходящий для записи на USB-накопитель или жесткий диск/SSD. **Running other architecture:**
`make run-hdd` соберет ядро и необработанный образ жесткого диска (эквивалентно созданию образа для всех жестких дисков), а затем запустит его с помощью qemu (если установлено).
`run-uefi` и `run-hdd-uefi` цели эквивалентны своим нецелевым `-uefi` аналогам, за исключением того, что они загружаются `qemu` с использованием прошивки, совместимой с UEFI.
## 🏗 Поддерживаемые архитектуры
Переменная `KARCH` определяет целевую архитектуру. По умолчанию используется `x86_64`.
Вы можете изменить архитектуру при вызове `make`:
```bash ```bash
make run KARCH=aarch64 make run KARCH=aarch64
``` ```
**Доступные варианты:** > For non-x86_64 architectures, `kernel/rust-toolchain.toml` setup is required.
* `x86_64` (Default)
* `aarch64`
* `riscv64`
* `loongarch64`
> Для архитектур, отличных от x86, потребуется настройка соответствующих целевых платформ в `kernel/rust-toolchain.toml`. ## Current Functionality
## 📝 Важное | Component | Status | Description |
|-----------|--------|-------------|
| Limine Bootloader | ✅ Done | BIOS/UEFI support |
| Physical MM (Bitmap) | ✅ Done | Page bitmap |
| Page Tables (x86_64) | ✅ Done | 4-level addressing |
| Global Allocator | ✅ Done | Bump allocator (8MB) |
| Framebuffer | ✅ Done | Graphical output |
| Console | ✅ Done | Text output with scrolling |
* **Очистка проекта:** Чтобы удалить все артефакты сборки и скомпилированные файлы, выполните: ## Memory System Development Status
| Task | Status | Note |
|------|--------|------|
| **Basic initialization** | ✅ Ready | Limine, MMU, PMM |
| **Physical allocator** | ✅ Ready | BitmapPMM working |
| **Paging** | ✅ Ready | P4->P1 mapping |
| **Global heap** | ✅ Ready | 8MB bump allocator |
| **Descriptor memory model** | ⏳ Not Started | Planned |
| **Processes and spaces** | ⏳ Not Started | No scheduler |
| **Memory syscalls** | ⏳ Not Started | allocate/clone/transfer |
| **Weak references** | ⏳ Not Started | borrow/release |
| **Process auto-cleanup** | ⏳ Not Started | On exit |
## Development Plan (TODO)
### Detailed Task List
| # | Task | Subtasks | Priority | Dependencies |
|---|------|----------|----------|--------------|
| 1 | **Descriptor memory model** | | High | PMM, VMM |
| | | 1.1. `MemoryObject` structure | | |
| | | 1.2. Descriptor table per process | | |
| | | 1.3. Refcounting (strong/weak) | | |
| | | 1.4. Syscalls: `allocate`, `clone` | | |
| 2 | **Processes** | | High | Descriptors |
| | | 2.1. PCB structure | | |
| | | 2.2. Descriptor Table per process | | |
| | | 2.3. Auto-cleanup on exit | | |
| 3 | **Syscalls API** | | Medium | Processes |
| | | 3.1. `transfer(desc, target)` | | |
| | | 3.2. `borrow(desc, duration)` | | |
| | | 3.3. `release(desc)` | | |
| 4 | **MMU Integration** | | Medium | Syscalls |
| | | 4.1. Page table per process | | |
| | | 4.2. Mapping by descriptors | | |
| | | 4.3. Unmapping on release | | |
| 5 | **Circular references** | | Low | All above |
## Debugging
**Logs are output to QEMU console.** Panic output via serial port (COM1).
**Useful QEMU options:**
```bash ```bash
make clean # Serial port for logs
make run QEMU_FLAGS="-serial stdio"
# GDB debugging
make run QEMU_FLAGS="-s -S"
``` ```
* **Логи:** Ядро выводит данные в консоль QEMU.
## 🔗 Ccылки **Cleanup:**
```bash
make clean # Remove all artifacts
make distclean # + git clean
```
- Репозиторий: https://git.inotfail.com/INotFail/Elyz ## Kernel Architecture
- Трекер задач: https://git.inotfail.com/INotFail/Elyz/issues
- Связанные проекты:
- Оригинальный шаблон с загрузчиком: https://github.com/jasondyoungberg/limine-rust-template
## 📔 Лицензия
Код данного проекта распространяется по лицензии Apache-2.0.