2.7 KiB
2.7 KiB
yggdrasil-kernel
Rust Unix-like operating system kernel.
See also:
- ABI for kernel-user communication
- Rust fork to use with the kernel
- Userspace programs
- yboot — x86-64 UEFI bootloader
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
- 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 (no plans for legacy boot)
- PCIe, with plans to extend to aarch64 as well
- 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
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 codesrc/device
— device driver implementationsbus
— bus devices like USB, PCIe etc.display
— everything related to graphic displayspower
— power and reset controllersserial
— serial transceiver driversdevtree.rs
— stuff related to ARM DeviceTreetty.rs
— Unix-style terminal driver implementation
src/fs
— in-kernel filesystems (sysfs/devfs)src/mem
— memory managementsrc/proc
— process information managementsrc/syscall
— system call handlingsrc/task
— kernel and userspace tasks, processes and threadssrc/util
— utilities used within the kernelsrc/init.rs
— kernel init thread impl.