This is one part of the UVA-OS class (CS4414/CS6456).
OVERVIEW | LAB1 | LAB2 | LAB3 | LAB4 | LAB5
Students: see quests-lab4.md
buzz-small.mp4
The OS now includes file abstraction and file systems. Userspace is built independently of the kernel and executed via exec(). The OS implements more I/O drivers, notably USB keyboard and sound device, exposing them via /proc and /dev to userspace. Userspace comprises a simplified libc and applications including Mario, slider, shell, and a sound tester.
This OS introduces virtual memory and user/kernel separation. It provides syscalls and can run one or multiple "Mario" applications concurrently in userspace.
✅ File abstractions
✅ A filesystem (xv6)
✅ procfs, devfs
✅ More syscalls: file related (open/close/read/write/lseek...)
✅ USB keyboard (can control Mario)
✅ Sound device
⛔ No FAT32 ⛔ No actual disks ⛔ No multicore
The "simple" userspace contains a minimalist "libc".
- Support filesystem (xv6).
- Programs will be built & linked as *.elf binaries, and packed into a filesystem image (
mkfs.c) which is then packed intokernel8.imgas a ramdisk.
libc-simple/
A minimalist "libc" that provides basic C functions and syscall stubs.
LiteNES/
The NES emulator that can load ROMs (e.g., Kung Fu, md5sum: 27e5c62c6c) from the filesystem (e.g., ramdisk). Executable: nes.
sysmon/
System resource monitor.
buzz.c
Plays raw waveform included in the C header; cannot load encoded files.
sh.c
Shell.
slider.c
Slide (static images) player.
(other *.c)
Command-line utilities.
mkfs.c
An x86 program for packing all userspace into a filesystem image, which goes to the ramdisk image included in kernel8.img.
export PLAT=rpi3qemu
| Action | Command |
|---|---|
| To clean up | ./cleanall.sh |
| To build everything | ./makeall.sh |
| To run on qemu | ./run-rpi3qemu.sh |
| Launch qemu for debugging | ./dbg-rpi3qemu.sh |
export PLAT=rpi3
| Action | Command |
|---|---|
| To clean up | ./cleanall.sh |
| To build everything | ./makeall.sh |
(One time): Prepare the SD card
https://github.com/fxlin/uva-os-main/tree/main/make-sd
Copy the kernel image kernel8.img to the partition named bootfs and boot.

