Skip to content

rafalmiel/cykusz-rs

Repository files navigation

CI CI

cykusz-rs

Intro

cykusz-rs is a toy operating system written in Rust programming language.

cykusz-screen0.webm

Kernel

  • 64bit higher-half kernel
  • VESA fb output
  • Physical memory allocator
  • Paging
  • Kernel heap
  • Interrupt handlers
  • ACPI support (ioapic, lapic, acpica)
  • SMP
  • Per-CPU-Storage using thread_local
  • Preemptive per-cpu scheduler
  • PS2/Keyboard driver
  • Tty with ansi escape codes
  • Virtual File System
  • Page/Inode/Directory cache
  • Memory mapped files (mmap interface)
  • Pipes
  • Storage (ide, ahci)
  • Filesystem (ext2)
  • Network Stack (e1000, ETH, ARP, IP, UDP, TCP, ICMP, DHCP, DNS)

Userspace

  • Bash shell
  • libc (mlibc port)
  • Exec/fork
  • Threads
  • Thread local storage
  • Fs mount/umount
  • Posix signals
  • Futexes
  • Shared libs

Ports

Libs

Apps

Building OS

You will need following packages to compile and run the os:

  • rust (rustup)
  • nasm
  • qemu
  • grub2
  • parted
  • docker (for userspace docker build)

Building:

git clone https://github.com/rafalmiel/cykusz-rs.git
git submodule update --init --recursive

rustup override set nightly
rustup component add rust-src
make

./disk-scripts/create_disk.sh

Building Userspace

It is recommended to use docker for building userspace for stable environment.

Using docker

./sysroot/make_docker_image.sh
./sysroot/toolchain_docker.sh

Using host

./sysroot/toolchain.sh

Running

qemu

make run

bochs

make bochs

VirtualBox

# Run only once to import the image into VirtualBox
./create_vbox_image.sh

make vbox