ors is an experimental x86_64 OS implementation with Rust.
# Rust nightly required at the moment
rustup default nightly
# Build ors-loader.efi and ors-kernel.elf
make
# Run on QEMU
make qemu
# ... is equivalent to
./qemu/make_and_run_image.sh \
target/x86_64-unknown-uefi/debug/ors-loader.efi \
target/x86_64-unknown-none-ors/debug/ors-kernel.elf
ors is based on MikanOS, blog_os (Second Edition), and xv6.
ors | MikanOS | blog_os | xv6 | |
---|---|---|---|---|
Target | x86_64 | x86_64 | x86_64 | x86 1 |
Written in | Rust | C++ | Rust | C |
Boot by | UEFI BIOS | UEFI BIOS | Legacy BIOS 2 | Legacy BIOS |
Screen Rendering | GOP by UEFI | GOP by UEFI | VGA Text Mode | VGA Text Mode |
Serial Port | 16550 UART | - | 16650 UART | 16650 UART |
Hardware Interrupts | APIC | APIC | 8259 PIC | APIC |
Keyboard Support | PS/2 | USB (xHCI) | PS/2 | PS/2 |
Mouse Support | - | USB (xHCI) | - | - |
Block Support | VirtIO over PCI | - 3 | - | IDE 4 |
Timers | APIC + ACPI PM | APIC + ACPI PM | 8259 PIC | APIC |
Multitasking | Preemptive | Preemptive | WIP 5 | Preemptive |
File System | FAT | FAT 6 | - | original 7 |
- Complete ゼロからの OS 自作入門
- Chapter 0-3: Boot loader
- Chapter 4-5: Screen rendering
- Chapter 6, 12: User inputs
- Chapter 7: Interrupts
- Chapter 8: Physical memory management
- Chapter 9-10 (skipped)
- Chapter 11: Timers
- Chapter 13-14: Multitasking
- Chapter 15-16: Terminal and comamnds
- Chapter 17: File system
- Chapter 18: User applications
- Chapter 19: Paging
- Chapter 20: System calls
- TBD
- Chapter 27: Application memory management
- TBD
- Complete Writing an OS in Rust (second edition)
- Bare Bones
- Interrupts
- Memory Management
- Multitasking (Incomplete)
- Compare with xv6
- Enable multicore
- Try to implement TCP protocol stack
- ors uses Tamzen font.
- ors uses One Monokai Theme as a color scheme of the terminal.
Footnotes
-
Maintaining the x86 version have stopped, and switched to the RISC-V version ↩
-
Supports only very limited reading (by UEFI Block I/O) ↩
-
RISC-V version of xv6 supports VirtIO over MMIO ↩
-
blog_os supports Cooperative Multitasking at the moment ↩
-
Read-only support ↩
-
Simpler but similar to modern UNIX file systems, including crash recovering ↩