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.h
support - 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
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