An attempt to make a CLI operating system
version notation: x.y.z (x=major_release ; y=minor_features ; z=patch)
Steps to making it: (each step should be its own commit, or a tag (if it is more complex and achieves a milestone)) (The Engineering Methodology is Incremental)
- Make a dockerfile to setup cross-compile build environment
- PoC bootable loop program with a message
- Create makefile that builds the PoC into image (tag: 0.0.0)
- From the Bootloader, load the kernel into memory and jump there
- Bootloader transitions to protected mode before jumping to kernel
- Change kernel from assembly to C program
- IDt
- Build Infrastructure to Run Unit & Integration Tests in intended ISA from Qemu (in a regular OS such as debian)
- Link emulated OS std:in/std:err with hosts std:in/std:err, to streamline testing
- Run Systems Tests from Qemu
docker build -t nos-buildenv .
docker run --rm -it -v $(pwd):/root/env nos-buildenv
or
docker run --cpus="15" -m 10g --rm -v $(pwd):/root/env -w /root/env nos-buildenv make
qemu-system-x86_64 -drive format=raw,file=build/nos.img -display curses
To exit qemu: ALT-2 then type quit
- build kernel
- assemble kernel_start.asm
- compile kernel.cpp
- link them
- assemble bootloader
- concatenate bootloader with kernel and truncate the result