WINIX OS
Winix is a minimal, hobbyist, educational and UNIX-style Operating System for the Waikato RISC Architecture Microprocessor (WRAMP). It is a hybrid kernel with usability and performance in mind. Winix is mainly inspired by Minix1, which is the OS I learnt when I was in university.
Winix includes full-featured kernel with process and memory management, in-memory file system, exception control and user space bourne shell with interactive command line. Yes, you can even play snake on it by typing snake
in the command line
Demo
Playing Snake
Using Pipe in bash
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.h
support - Stacktrace dump, segfault analysis
Supported Commands
How to Run
Download the latest Rexsimulator from Here
N.B. mono
is required to run in Linux 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
Prerequisite
Linux / WSL
sudo apt-get install xutils-dev gcc
Clone and Compile
git clone https://github.com/halfer53/winix.git
cd winix
export PATH=`pwd`/tools/bin:$PATH
make
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 bash 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
- csleep
- getppid
- signal
- sbrk
- statfs
- getcwd
- tfork