Skip to content

thomasloven/mittos64

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MITTOS64

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).

Building

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.

Generating and iso file

A cdrom ISO file can be built by the command

d mkiso

Running the emulator

The project can be run in a qemu virtual machine inside the docker container by the command

d emul

Running the debugger

The gdb debugger can be run inside the docker container by the command

d dbg

This assumes that a qemu session is already running.

Debugger commands

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.

Bypassing the docker container

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.