doc: update README.md
This commit is contained in:
parent
f3249c500d
commit
9b71caa103
84
README.md
84
README.md
@ -8,22 +8,38 @@ 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:
|
||||
* Architecture support:
|
||||
* [aarch64](/kernel/src/arch/aarch64)
|
||||
* [x86_64](/kernel/src/arch/x86_64)
|
||||
* [i686](/kernel/src/arch/i686) (Pentium Pro and later)
|
||||
* Core features:
|
||||
* Kernel/userspace preemptive multithreading
|
||||
* Kernel-space multitasking with `async`/`await` runtime
|
||||
* Symmetric Multiprocessing
|
||||
* Rust-style interfaces for most of the stuff like memory management, devices etc.
|
||||
* Filesystem features:
|
||||
* 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
|
||||
* In-memory read-write filesystem for tar-based initrd
|
||||
* sysfs
|
||||
* devfs
|
||||
* ext2
|
||||
* Userspace features:
|
||||
* [Kernel-user ABI](/lib/abi-def/yggdrasil.abi) generated from a rust-like description language
|
||||
* Sanitized system calls better suited for use in Rust
|
||||
* Binary formats: ELF + `#!/...` shebangs
|
||||
* C compatibility through a [custom Rust libc](/userspace/lib/ygglibc)
|
||||
* Userspace multithreading
|
||||
* Synchronization primitives through futex-like interface
|
||||
* Unix-like signals and exceptions
|
||||
* [Dynamic loader](/userspace/dyn-loader) for linking with shared libraries
|
||||
* Hardware features:
|
||||
* PCI Express devices
|
||||
* NVMe drive support (read/write, currently x86_64 only, due to lack of MSI-X support on aarch64/i686).
|
||||
* AHCI SATA drive support (read/write)
|
||||
* xHCI USB host controller
|
||||
* VirtIO Network + GPU framebuffer support
|
||||
* USB HID keyboards
|
||||
|
||||
aarch64-specific:
|
||||
|
||||
@ -32,28 +48,21 @@ aarch64-specific:
|
||||
* ARM generic timer as system/monotonic timer
|
||||
* GICv2 IRQ controller
|
||||
|
||||
x86_64-specific:
|
||||
x86-specific:
|
||||
|
||||
* UEFI boot through [yboot](https://git.alnyan.me/yggdrasil/yboot)
|
||||
(no plans for legacy boot)
|
||||
* Boot options:
|
||||
* x86_64: UEFI [yboot](https://git.alnyan.me/yggdrasil/yboot)
|
||||
* i686: multiboot/grub
|
||||
* 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)
|
||||
* HPET for x86_64
|
||||
* i8253-based timer for i686 or as a fallback timer
|
||||
* COM ports
|
||||
* ACPI, [work in progress](https://github.com/rust-osdev/acpi), mostly broken
|
||||
on real hardware
|
||||
on real hardware, so currently disabled
|
||||
* 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
|
||||
---------------
|
||||
@ -61,7 +70,7 @@ Building the OS
|
||||
Prerequisites:
|
||||
|
||||
* Decent CPU and a sizable amount of RAM
|
||||
* ~20G of free disk space
|
||||
* ~40G of free disk space for a full build
|
||||
* Patience
|
||||
|
||||
**NOTE** Full OS build requires you to build the `*-unknown-yggdrasil`
|
||||
@ -94,6 +103,11 @@ Steps:
|
||||
```
|
||||
|
||||
2. Run `cargo xtask toolchain` to fetch, build and link the toolchain
|
||||
|
||||
**NOTE** if toolchain fetch fails for some reason, try cloning directly
|
||||
from `https://git.alnyan.me/yggdrasil/yggdrasil-rust.git` with appropriate
|
||||
branch.
|
||||
|
||||
3. Run `cargo xtask` to build the OS.
|
||||
|
||||
Once the OS has been built, you can run it in QEMU by executing
|
||||
@ -102,9 +116,13 @@ Once the OS has been built, you can run it in QEMU by executing
|
||||
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...
|
||||
1. Get it running on more real hardware
|
||||
2. Get a full LLVM build to work
|
||||
3. Get rustc to work
|
||||
4. Get self-hosted
|
||||
5. Run doom (?)
|
||||
|
||||
In addition to eternal code cleanup, I've been doing quite a lazy job at that lately...
|
||||
|
||||
Navigation
|
||||
----------
|
||||
|
Loading…
x
Reference in New Issue
Block a user