Winix
A UNIX-style Operating System for the Waikato RISC Architecture Microprocessor (WRAMP)
Install / Use
/learn @halfer53/WinixREADME
WINIX OS
Winix is a minimal, hobbyistic, educational and UNIX-style Operating System for the Waikato RISC Architecture Microprocessor (WRAMP).
Inspired by the Minix1 operating system, Winix includes a full-featured kernel with features such as process and memory management, in-memory file system, exception control, and a user space bourne shell with interactive command line. And, for a bit of fun, you can even play the classic game of snake by simply typing snake in the command line.
Demo
Playing Snake

Using Pipe in shell

Features
- Kernel Memory Management: virtual memory, page mapping
- Process Management: Kernel thread, process creation
- Exception control and interrupt handler
- In-memory file system that supports most of the POSIX api
- A Bourne shell supporting multiple pipes and redirection
- User memory management: malloc() free()
- User coroutine with
ucontext.hsupport - Stacktrace dump, segfault analysis
Supported Commands
Unit Test
How to Run
Download the latest Rexsimulator from Here
N.B. mono is required to run in Linux/MacOS environment, Download Instruction
Download the latest WINIX binary winix.srec from Here
Run Rexsimulator.exe
Click Quick Load, select winix.srec
Loading Winix

How to Compile
N.B. Linux environment is required for compilation
Prerequisite
Debian / Ubuntu
sudo apt-get install xutils-dev gcc libbsd-dev
Clone and Compile
git clone https://github.com/halfer53/winix.git
cd winix
make -j$((`nproc`+2))
Debug tips
Debug Makefile
Similar to linux kbuild, Winix supports verbose option, you can debug Makefile by setting verbose to 1
make V=1
Debug Kernel
kprintf(): is your friend.
trace: type trace in shell to print all the syscalls in serial port 2
Supported System Call
- times
- exit
- fork
- vfork
- execve
- brk
- alarm
- sigaction
- sigret
- waitpid
- kill
- getpid
- winfo
- strerror
- dprintf
- sysconf
- sigsuspend
- sigpending
- sigprocmask
- setpgid
- getpgid
- open
- read
- write
- close
- creat
- pipe
- mknod
- chdir
- chown
- chmod
- stat
- fstat
- dup
- dup2
- link
- unlink
- getdent
- access
- mkdir
- sync
- lseek
- umask
- fcntl
- ioctl
- setsid
- nanosleep
- getppid
- signal
- sbrk
- statfs
- getcwd
- tfork
- setitimer
