Skip to content

Pear0/rustos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RustOS

This OS started as a class project for CS 3210 at Georgia Tech, but I have continued developing new features.

Class Pieces:

  • Bootloader
  • GPIO
  • UART Shell
  • FAT32
  • Exception Handlers
  • Preemptive Scheduling
  • Virtual Memory Management
  • Loading user-space processes

Pieces I developed:

  • Multi-core support (boot the other 3 cores on the RPi 3)*
  • Suspend/Resume, process affinity, process scheduling statistics
  • Ethernet (using USPi)*
  • Custom network stack including ARP, IPv4, TCP and ICMP echo
  • Telnet Shell
  • Interface to the RPi DMA devices
  • Initializing the frame buffer and mirroring shell to screen
  • Hypervisor using the ARMv8 virtualization exception level
  • Virtualized interrupt controllers timers, and UART for the hypervisor guests
  • Virtualized NIC and fork of USPi that enables pass-through of MAC addresses so that hypervisor guests can act as different network devices
  • Lock registry to enable runtime inspection of locks and statistics tracking
  • Timer-based profiling of kernel/hypervisor and guest
  • Symbolification of kernel/hypervisor when viewing profiling results by processing DWARF symbols using gimli
  • (very early stages) Support for Khadas VIM3, a Pi-like board but much more powerful

* Items with an asterisk were added to the CS 3210 course curriculum after I had added the features

Building

Cap'n Proto is required for lib/tracing. On Ubuntu, this can be installed with apt install capnproto libcapnp-dev.

The build scripts use elftools which can be installed with pip install pyelftools.

kern/set-nightly.sh will configure rustup to use an appropriate nightly for this project.