refactor: move kernel readme to root

This commit is contained in:
Mark Poliakov 2024-03-13 02:17:12 +02:00
parent 55a4c89811
commit 075cbea320
2 changed files with 112 additions and 87 deletions

112
README.md Normal file
View File

@ -0,0 +1,112 @@
yggdrasil-kernel
================
Rust Unix-like operating system.
Main features
-------------
* Architecture support: [aarch64](/kernel/src/arch/aarch64) and [x86_64](/kernel/src/arch/x86_64)
* Kernel/userspace preemptive multithreading
* Kernel-space multitasking with `async`/`await` runtime
* Symmetric Multiprocessing
* Unix-like virtual filesystem:
files, directories, block/char devices, symlinks, mounts
* [Kernel-user ABI](/lib/abi-def/yggdrasil.abi) generated from a rust-like description language
* In-memory read-write filesystem for tar-based initrd
* sysfs/devfs
* Binary formats: ELF + `#!/...` shebangs
* Rust-style interfaces for most of the stuff like memory management, devices etc.
* PCI Express devices
* NVMe drive support (read/write, currently x86_64 only, due to lack of MSI-X support on aarch64).
* AHCI SATA drive support (read/write)
* xHCI USB host controller
* USB HID keyboards
aarch64-specific:
* PSCI for SMP start-up and power control
* PL011 serial port
* ARM generic timer as system/monotonic timer
* GICv2 IRQ controller
x86_64-specific:
* UEFI boot through [yboot](https://git.alnyan.me/yggdrasil/yboot)
(no plans for legacy boot)
* I/O and Local APIC IRQ controllers
* PS/2 keyboard
* i8253-based timer (got some problems with HPET on
real hw, had to revert, lol)
* COM ports
* ACPI, [work in progress](https://github.com/rust-osdev/acpi), mostly broken
on real hardware
* ACPI shutdown
* PCI IRQ pin routing
* Events like power button, etc.
* Fancy framebuffer console
Userspace features:
* Sanitized system calls better suited for Rust
* Userspace threads
* Synchronization primitives through futex-like interface
* Unix-like signals and exceptions
Building the OS
---------------
Prerequisites:
* Decent CPU and a sizable amount of RAM
* ~20G of free disk space
* Patience
**NOTE** Full OS build requires you to build the `*-unknown-yggdrasil`
Rust toolchain, which may take quite a while, so be prepared.
Steps:
0. Install the prerequisite software
```bash
### For Arch Linux based systems
# pacman -Sy cmake ninja llvm dosfstools mtools
### For MacOS
$ brew install cmake ninja llvm dosfstools mtools
$ export PATH="$PATH:/opt/homebrew/Cellar/llvm/.../bin"
```
**NOTE** Nightly Rust version and rustup are required, for details see
the [rustup page](https://rustup.rs/).
1. Clone this repo
```bash
$ git clone https://git.alnyan.me/alnyan/yggdrasil
$ cd yggdrasil
# Optionally, checkout a release/snapshot branch
```
2. Run `cargo xtask toolchain` to fetch, build and link the toolchain
3. Run `cargo xtask` to build the OS.
Once the OS has been built, you can run it in QEMU by executing
`cargo xtask qemu`. For more `xtask` commands, see `cargo xtask --help`.
General plans (in no particular order)
--------------------------------------
* Better unification of architecture code
* `async` for VFS (?)
* Code cleanup, I've been doing quite a lazy job at that lately...
Navigation
----------
* Kernel: [`/kernel`](/kernel)
* Userspace: [`/userspace`](/userspace)
* ABI definitions: [`/lib/abi-def`](/lib/abi-def)

View File

@ -1,87 +0,0 @@
yggdrasil-kernel
================
Rust Unix-like operating system kernel.
See also:
* [ABI for kernel-user communication](https://git.alnyan.me/yggdrasil-abi)
* [Rust fork to use with the kernel](https://git.alnyan.me/yggdrasil/yggdrasil-rust)
* [Userspace programs](https://git.alnyan.me/yggdrasil/yggdrasil-userspace)
* [yboot — x86-64 UEFI bootloader](https://git.alnyan.me/yggdrasil/yboot)
Main features
-------------
* Architecture support: [aarch64](/src/arch/aarch64) and [x86_64](/src/arch/x86_64)
* Kernel/userspace preemptive multithreading
* Kernel-space multitasking with `async`/`await` runtime
* Symmetric Multiprocessing
* Unix-like virtual filesystem:
files, directories, block/char devices, symlinks, mounts
* In-memory read-write filesystem for tar-based initrd
* sysfs/devfs
* Binary formats: ELF + `#!/...` shebangs
* Rust-style interfaces for most of the stuff like memory management, devices etc.
aarch64-specific:
* PSCI for SMP start-up and power control
* PL011 serial port
* ARM generic timer as system/monotonic timer
* GICv2 IRQ controller
x86_64-specific:
* UEFI boot through [yboot](https://git.alnyan.me/yggdrasil/yboot)
(no plans for legacy boot)
* PCIe, with plans to extend to aarch64 as well
* NVMe drive support (read/write)
* AHCI SATA drive support (read/write)
* I/O and Local APIC IRQ controllers
* PS/2 keyboard,
* i8253-based timer (got some problems with HPET on
real hw, had to revert, lol)
* COM ports
* ACPI, [work in progress](https://github.com/rust-osdev/acpi), mostly broken
on real hardware
* ACPI shutdown
* PCI IRQ pin routing
* Events like power button, etc.
* Fancy framebuffer console
Userspace features:
* Sanitized system calls better suited for Rust
* Userspace threads
* Synchronization primitives through futex-like interface
* Unix-like signals and exceptions
General plans (in no particular order)
--------------------------------------
* Better unification of architecture code
* `async` for VFS (?)
* PCIe NVMe block device
* PCIe SATA block device
* PCIe XHCI USB devices
* Better algorithms for memory management
Navigation
----------
* `src/arch` — architecture-specific code
* `src/device` — device driver implementations
* `bus` — bus devices like USB, PCIe etc.
* `display` — everything related to graphic displays
* `power` — power and reset controllers
* `serial` — serial transceiver drivers
* `devtree.rs` — stuff related to ARM DeviceTree
* `tty.rs` — Unix-style terminal driver implementation
* `src/fs` — in-kernel filesystems (sysfs/devfs)
* `src/mem` — memory management
* `src/proc` — process information management
* `src/syscall` — system call handling
* `src/task` — kernel and userspace tasks, processes and threads
* `src/util` — utilities used within the kernel
* `src/init.rs` — kernel init thread impl.