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
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.