Update README.md

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

204
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:**
```bash
git clone https://git.inotfail.com/INotFail/Elyz.git
cd elyz
```
* **Сборка ядра** **Ubuntu/Debian:**
```bash ```bash
cd kernel sudo apt install make rustc xorriso gdisk mtools qemu-system-x86
make all rustup toolchain install nightly --component rust-src
cd ../ ```
```
* **Запуск (основные способы)** **Arch Linux:**
```bash ```bash
make run-bios sudo pacman -S make rust xorriso gdisk mtools qemu-desktop
``` rustup toolchain install nightly --component rust-src
или ```
```bash
make run
```
или
```bash
make run-uefi
```
## Building and Running
`make all` скомпилирует ядро (из kernel/), а затем сгенерирует загрузочный ISO-образ. ### Preparation
```bash
git clone https://git.inotfail.com/INotFail/Elyz.git
cd Elyz
rustup override set nightly
```
`make run` соберет ядро и загрузочный ISO-образ (эквивалент команды make all), а затем запустит его с помощью команды qemu (если установлено). ### Main Makefile Targets
`make all-hdd` скомпилирует ядро, а затем сгенерирует исходный образ, подходящий для записи на USB-накопитель или жесткий диск/SSD. | Target | Description | Result |
|--------|-------------|--------|
| `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 | — |
`make run-hdd` соберет ядро и необработанный образ жесткого диска (эквивалентно созданию образа для всех жестких дисков), а затем запустит его с помощью qemu (если установлено). **Run examples:**
```bash
# BIOS with auto-build
make run
`run-uefi` и `run-hdd-uefi` цели эквивалентны своим нецелевым `-uefi` аналогам, за исключением того, что они загружаются `qemu` с использованием прошивки, совместимой с UEFI. # UEFI mode
make run-uefi
# USB/HDD image
make all-hdd
```
## 🏗 Поддерживаемые архитектуры ## Supported Architectures
Переменная `KARCH` определяет целевую архитектуру. По умолчанию используется `x86_64`. The `KARCH` environment variable sets the target architecture (default: `x86_64`).
Вы можете изменить архитектуру при вызове `make`: | Architecture | `KARCH` value | Status |
|--------------|---------------|--------|
| x86_64 | `x86_64` | Full support |
| AArch64 | `aarch64` | Experimental |
| RISC-V 64 | `riscv64` | Experimental |
| LoongArch 64 | `loongarch64` | Experimental |
**Running other architecture:**
```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
```bash
make clean
```
* **Логи:** Ядро выводит данные в консоль QEMU.
## 🔗 Ccылки | 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 |
- Репозиторий: https://git.inotfail.com/INotFail/Elyz ## Development Plan (TODO)
- Трекер задач: https://git.inotfail.com/INotFail/Elyz/issues
- Связанные проекты:
- Оригинальный шаблон с загрузчиком: https://github.com/jasondyoungberg/limine-rust-template
## 📔 Лицензия ### Detailed Task List
Код данного проекта распространяется по лицензии Apache-2.0. | # | 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
# Serial port for logs
make run QEMU_FLAGS="-serial stdio"
# GDB debugging
make run QEMU_FLAGS="-s -S"
```
**Cleanup:**
```bash
make clean # Remove all artifacts
make distclean # + git clean
```
## Kernel Architecture