XukutOS installation instructions

Here's how you can install XukutOS on your computer:

Obtain a Raspberry Pi 4 or qemu-system-aarch64

At the moment, XukutOS is being developed only on those two systems.

A Raspberry Pi 3 will probably also work, since qemu is supposed to emulate that computer.

If you would like to use another system, please see the contributing instructions instead. :-)

QEMU home page

Raspberry Pi home page

Obtain binaries or compile them yourself

There are no official binaries yet, you can contact me if you want them though.

Getting a cross-compiler

If you want to compile XukutOS for aarch64, make sure you have binutils (GCC and GDB are recommended too) for aarch64-elf. You'll also need a recent version of Python to run the Lisp-to-assembly converter.

Here's a quick guide to obtaining a cross-compiler for aarch64 on a Unix-y system. For our purposes, not needing a C compiler, we'll only make binutils and GDB. Because we use a couple of coding tricks, it's a specially patched version of binutils, available as a git repository here:

ssh://git@vierkantor.com:21224/binutils-gdb

These steps are a summary of the guide on the OSDev wiki. If any step gives you an error, the OSDev wiki should give you a lot more information.

https://wiki.osdev.org/GCC_Cross-Compiler

First, ensure you have everything required to compile binutils. The OSDev wiki has a nice table. Basically, if you have a recent version of Python 3 (including development libraries!) and you can already compile stuff using `configure; make; sudo make install', you'll have enough to build binutils.

Now we'll obtain the patched version of the binutils-gdb repository (helpfully bundled for us!) Please don't hurt my server by downloading the whole version history, only get the latest commit as follows:

git clone --depth 1 ssh://git@vierkantor.com:21224/binutils-gdb

Make a new folder next to `binutils-gdb' to put the build artifacts in:

mkdir binutils-gdb-build
cd binutils-gdb-build

Next step is to configure the build scripts, in order to produce object files for the correct machines. The OSDev wiki suggests to set a `PREFIX' environment variable too, but we'll assume that you have the ability to install binaries to `/usr/local' (and that you trust the Makefile won't screw up the system).

export TARGET=aarch64-elf
# export PREFIX="$HOME/.local" # Default is `/usr/local'.
# Uncomment the above line (and modify if needed) if you don't have the ability to install binaries to `/usr/local'.
# In any case, make sure "$PREFIX/bin" is on your PATH.

../binutils-gdb/configure --target=$TARGET # --prefix="$PREFIX"
# Uncomment the end of the previous line if you uncommented the `export PREFIX=' line above.

The final step is to compile binutils and gdb. This will take a few minutes (or many minutes, if your computer is not so fast).

make # When I tried parallel compilation with `make -j', there were stuck processes that ate all memory.
make install # or `sudo make install' if needed

Check that everything got installed correctly:

hash -r
type aarch64-elf-as # output should look like `aarch64-elf-as is /usr/local/bin/aarch64-elf-as'
type aarch64-elf-gdb # output should look like `aarch64-elf-gdb is /usr/local/bin/aarch64-elf-gdb'
# If it worked correctly, the non-cross compilers should not be replaced:
type as # output should look like `as is /usr/bin/as'

Getting the source code and compiling it

Get the source from the official git repository:

ssh://git@vierkantor.com:21224/xukut

Running `make' will build XukutOS and launch it in QEMU. To prepare binaries for using in a Raspberry Pi, run `make kernel8.img'.

Starting XukutOS in QEMU

The simplest way to start XukutOS in QEMU is simply to run the `make' command in the source folder. More precisely, make `kernel8.elf' and run `qemu-system-aarch64 -machine raspi3 -cpu cortex-a72 -kernel kernel8.elf'.

Debugging is similar: run the `make kever' command in the source folder, or add `-S -s' to the `qemu-system-aarch64' command; then start `aarch64-elf-gdb -x gdb-os'. `gdb-os' is a file with commands that make GDB communicate with QEMU during debugging.

Starting XukutOS on a Raspberry Pi

Copy the following files from a RasPi boot disk to the root directory of a new SD card: (You probably only need a subset of these files, but this works for me at least.)

bcm2708-rpi-b.dtb
bcm2708-rpi-b-plus.dtb
bcm2708-rpi-cm.dtb
bcm2708-rpi-zero.dtb
bcm2708-rpi-zero-w.dtb
bcm2709-rpi-2-b.dtb
bcm2710-rpi-2-b.dtb
bcm2710-rpi-3-b.dtb
bcm2710-rpi-3-b-plus.dtb
bcm2710-rpi-cm3.dtb
bcm2711-rpi-4-b.dtb
bootcode.bin
fixup4cd.dat
fixup4.dat
fixup4db.dat
fixup4x.dat
fixup_cd.dat
fixup.dat
fixup_db.dat
fixup_x.dat
start4cd.elf
start4db.elf
start4.elf
start4x.elf
start_cd.elf
start_db.elf
start.elf
start_x.elf

Make `kernel8.img' as described above and add it to the SD card. Put it in your RasPi and boot, and it should start.

What now?

Not much actually, you will just get a monocolored screen if everything went well.

User interface is still under development.

See the manual for further information on using XukutOS.

XukutOS main page