Skip to content

yubrot/ors

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ors

ors is an experimental x86_64 OS implementation with Rust.

Setup

# 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

Comparison

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

Roadmap

  • 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

Resources

Footnotes

  1. Maintaining the x86 version have stopped, and switched to the RISC-V version

  2. UEFI is planned

  3. Supports only very limited reading (by UEFI Block I/O)

  4. RISC-V version of xv6 supports VirtIO over MMIO

  5. blog_os supports Cooperative Multitasking at the moment

  6. Read-only support

  7. Simpler but similar to modern UNIX file systems, including crash recovering

About

An experimental OS implementation with Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages