MOROS: Obscure Rust Operating System 🦉
Go to file
Vincent Ollivier ac390fb863 Update gitignore 2020-07-03 23:49:58 +02:00
.cargo Start MOROS project 2019-12-28 18:37:49 +01:00
doc Add editor doc 2020-02-16 20:06:29 +01:00
dsk Bump version number 2020-07-03 23:46:25 +02:00
run Update ATA driver (#41) 2020-04-13 11:36:04 +02:00
src Handle RTC interrupts (#71) 2020-07-03 22:25:03 +02:00
.gitignore Update gitignore 2020-07-03 23:49:58 +02:00
CHANGELOG.md Update changelog 2020-07-03 22:38:27 +02:00
Cargo.lock Bump version number 2020-07-03 23:46:25 +02:00
Cargo.toml Bump version number 2020-07-03 23:46:25 +02:00
LICENSE Add license 2019-12-29 11:19:29 +01:00
Makefile Improve filesystem (#24) 2020-02-13 09:42:22 +01:00
README.md Use hard drive instead of disk in doc 2020-02-15 10:52:49 +01:00
rust-toolchain Start MOROS project 2019-12-28 18:37:49 +01:00
screenshot.png Add screenshot to readme 2020-02-14 21:01:30 +01:00
x86_64-moros.json Add password hashing 2020-01-03 22:01:48 +01:00

README.md

MOROS: Obscure Rust Operating System

MOROS is a toy operating system written in Rust for the x86 architecture.

This project started from the seventh post of the second edition of Writing an OS in Rust by Philipp Oppermann and by reading the OSDev wiki along with many open source kernels.

screenshot

Features

  • External bootloader (using bootloader)
  • x86 CPU support (using x86_64)
  • Hardware interrupts (using pic8259_simple)
  • PS/2 Keyboard (using pc-keyboard)
  • VGA Text mode output
  • Serial output (using uart_16550)
  • Paging
  • Heap allocation (using linked_list_allocator)
  • RTC clock
  • PCI enumeration
  • ATA PIO mode
  • Random number generator
  • RTL8139 network card
  • DHCP/IP/TCP/UDP/DNS/HTTP protocols (using smoltcp)
  • Basic filesystem
  • Basic shell
  • Basic text editor
  • Basic file and network commands
  • A LOT OF SHORTCUTS TO GET EVERYTHING WORKING
  • HERE BE DRAGONS
  • Processes
  • Multitasking
  • A real userspace

Setup

Install tools:

curl https://sh.rustup.rs -sSf | sh
rustup install nightly
rustup default nightly
rustup component add rust-src
rustup component add llvm-tools-preview
cargo install cargo-xbuild bootimage

Usage

Build image:

make image output=vga keyboard=qwerty

Run on QEMU:

make qemu output=vga

MOROS will open a console in diskless mode after boot if no filesystem is detected. Use mkfs /dev/ata/0/0 to create a filesystem on the ATA hard drive that will be used on the next boot.

Run on a native x86 computer by copying the bootloader and kernel to a hard drive or USB stick (but there is currently no USB driver so the filesystem will not be available):

sudo dd if=target/x86_64-moros/release/bootimage-moros.bin of=/dev/sdx && sync

Be careful not to overwrite the hard drive of your OS when using dd inside your OS or mkfs inside MOROS.

LICENSE

MOROS is released under MIT.