yggdrasil-kernel
Rust Unix-like operating system.
Main features
- Architecture support: aarch64 and 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 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 (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, 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:
-
Install the prerequisite software
### 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.
-
Clone this repo
$ git clone https://git.alnyan.me/alnyan/yggdrasil $ cd yggdrasil # Optionally, checkout a release/snapshot branch
-
Run
cargo xtask toolchain
to fetch, build and link the toolchain -
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
- Userspace:
/userspace
- ABI definitions:
/lib/abi-def
Description
Languages
Rust
97.4%
Assembly
1.1%
C
1.1%
Shell
0.3%