This project is my attempt at a modern kernel.
Differences from my earlier kernels include
- 64 bit
- symmetric multiprocessing
- docker-based build chain
- unit tests
I meant to write very extensive documentation of the development process, but with two kids I have realized that will probably never happen, so now I'm releasing as is.
Also take a look at mittos64-old which is a previous version of this that got a bit further (processes, c-library (JIT-patching of musl), ATA).
This project is set up to be built inside a Docker container.
The container can be built by running the d
script in the projects root directory - provided Docker is installed on your computer.
When the docker container is built, commands can be run inside it through the d
script. The script will run any arguments passed to it as commands inside the container.
E.g:
d ls
If a previous command is running, the next command will be run inside the same container. Otherwise a new container will be started.
A cdrom ISO file can be built by the command
d mkiso
The project can be run in a qemu virtual machine inside the docker container by the command
d emul
The gdb debugger can be run inside the docker container by the command
d dbg
This assumes that a qemu session is already running.
Gdb is configured with a few special commands
(gdb) q
Stops the qemu emulator and closes the debugger.
(gdb) reset
Reboots the qemu virtual machine.
(gdb) reg
Displays information about cpu register contents from the emulator. Note that this is slightly different from the built-in gdb command info registers
.
Most scripts and makefiles in the project will check for wether they are run inside the container by looking for the environment variable $MITTOS64. If not present, execution will stop.
If you know what you're doing, this check can be bypassed by defining the environment variable MITTOS64. I really don't recommend it, though.