x86-64 SMP enabled microkernel hobbyist OS
“Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn.
In his house at R'lyeh dead Cthulhu waits dreaming.” ― H.P. Lovecraft, The Call of Cthulhu
Cthulhu OS is minimalistic hobbyist OS. It uses it's own libc (KCLib). Its long term goal is to support user space applications.
Cthulhu OS uses Azathoth as its main kernel, which will be microkernel.
The point is to have fun making a complete OS and then use it as replacement to current OSes.
At the moment, Cthulhu OS only supports x86-64 architecture. Should work on both Intel and AMD, however, it was only tested on Intel. So far it was only tested on qemu/bochs, I do not recommend putting it on real hardware yet (not that it can do anything at the moment).
Cthulhu OS is under heavy development. So far it has working long mode, paging memory, interrupt handling, symmetrical multiprocessing, interprocessor communication. What needs to be done (and probably more):
Compiling Cthulhu OS requires Unix-like environment (was not tested on windows, but will probably require cygwin).
Cthulhu OS requires it's own toolchain (x86-64-fhtagn-*). To compile one, these components are required to be present at these locations
build-toolchain/sources/binutils/binutils-2.24
build-toolchain/sources/gcc/gcc-5.1.0
To build/rebuild toolchain, execute shell script build-toolchain/create-toolchain.sh
in build-toolchain
directory. After the compilation is done, you should have working C environment
in toolchain
directory and user-space clib in osroot
directory.
Simply invoke make kernel
in projects root directory. You need to have path to toolchain/usr/bin
in
your path for compiler to find x86_64-fhtagn-gcc
and x86_64-fhtagn-as
. Your environment has to provide
nasm
assembler (http://www.nasm.us) and working shell.
After compilation is done, you should have azathoth.img
in build
directory.
libnyarlathotep
is library used by daemons and other system components. You can create it by invoking
make nyarlathotep
.
After compilation is done, you should have libnyarlathotep.a
and nyarlathotep.h
in build/libnyarlathotep
directory.
Cthulhu OS can be run on qemu
(recommended version 2.5.0, as it was tested on it), bochs
or real
hardware (not recommended).
Cthulhu OS's kernel Azatoth requires initrd
in its own file format. You can use provided python script mkfs.py
to create initrd
. This script is located in disk
directory. mkfs.py
requires python 2.7
. To use mkfs.py
you have to provide input directory and output file. Input directory's content will be packed
into initrd
output file, which should have name rlyeh
.
Cthulhu OS requires GRUB 2
as its bootloader (since it is mixed 16-32-64bit elf) with multiboot support
.
If you do not have GRUB 2
to create new image, you may create 64MB empty disk file and then use bspatch
to
patch that empty disk file with disk.img.patch
. Then you have to mount that image with offset 1048576
.
For more information check disk/update_image.sh
.
Sample grub configuration is in directory boot
, which you can copy into your boot partition.
initrd
contentsinitrd
input directory must contain init
directory containing init
init file and directory
init/daemons
containing daemons to be loaded initially.
Simply invoke qemu-system-x86_64 -hdc <yourdiskimagefile> -m 128 -s -smp cores=<numbercores>,threads=<numberthreads>,sockets=<numsockets> -cpu Haswell,+pdpe1gb
For more information check debug.sh
.