With only 2K lines of code, egos-2000 implements boot loader, microSD driver, tty driver, memory paging, address translation, interrupt handling, process scheduling and messaging, system call, file system, shell, 7 user commands and the mkfs/mkrom
tools.
It runs on a $129 small development board.
# Count lines of code excluding references and README.md
> cloc egos-2000 --exclude-ext=md
......
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 33 449 464 1564
C/C++ Header 11 75 104 314
Assembly 3 6 24 68
make 1 11 0 54
-------------------------------------------------------------------------------
SUM: 48 541 592 2000 << exactly 2000!
-------------------------------------------------------------------------------
egos-2000 and egos are the teaching operating systems we use at Cornell. They have the same architecture.
- The earth layer implements hardware-specific abstractions.
- tty and disk device interfaces
- cpu interrupt and memory management interfaces
- The grass layer implements hardware-independent abstractions.
- processes, system calls and inter-process communication
- The application layer implements file system, shell and user commands.
The definitions of struct earth
and struct grass
in egos.h specify the interfaces between different layers.
- an Artix-7 35T Arty FPGA development board
- a microUSB cable (e.g., microUSB-to-USB or microUSB-to-USB-C)
- [optional] a microSD Pmod, a microSD reader and a microSD card (e.g., Sandisk, Samsung or PNY)
- SiFive freedom riscv-gcc compiler
- Vivado lab solutions or any edition with the hardware manager
- a software to connect with ttyUSB (e.g., screen for Linux/Mac or PuTTY for Windows)
- [optional] a software to program a disk image file to the microSD card (e.g., dd or balena Etcher)
For compiling and running egos-2000, please read USAGES.md. This document further introduces the teaching plans, architecture and development history of egos-2000.
The RISC-V instruction set manual introduces the privileged registers used by egos-2000. The SiFive FE310 manual introduces the processor used by egos-2000, especially the GPIO, UART and SPI bus controllers.
For any questions, please contact Yunhao Zhang. Many thanks to Robbert van Renesse and Lorenzo Alvisi for their support. This project is also supported by a Facebook fellowship.