An experimental microkernel inspired by seL4. Work in progress.
Supports:
We meet in the #helios channel on irc.libera.chat.
First, install the necessary dependencies for your target.
Dependencies common to all targets:
Additional dependencies (aarch64):
Additional dependencies (x86_64):
Additional dependencies (debugging):
To build Helios, copy config.def.mk to config.mk and edit according to your needs. The defaults are suitable for building an x86_64 kernel from an x86_64 host. To cross compile, update the names of AS, LD, and OBJCOPY accordingly (e.g. AS=aarch64-none-elf-as), and consider setting GDB to gdb-multiarch for debugging.
Run make
to build the kernel and the bootloader for your target. The kernel is
always written to ./helios.
Default build targets (aarch64)
make
produces boot/+aarch64/bootaa64.efi, which is an EFI-compatible
bootloader. After setting up an EFI environment on your target (e.g. via edk2),
place boot/+aarch64/bootaa64.efi at /EFI/boot/bootaa64.efi on your boot media,
and place Helios at /helios. Optionally, place a device tree at /helios.dtb if
the EFI environment does not provide one automatically. Additional boot modules
are loaded from /modules/* in alphabetical order; the first one should be the
init program.
Default build targets (x86_64)
make
produces boot/+x86_64/boot.bin, which is a multiboot compatible
bootloader that can be booted with e.g. syslinux or grub. ./boot.iso is also
produced, which may be written to a USB stick and booted on hardware. The
bootloader expects the kernel as the first multiboot module, and the init
program as the second. See boot/+x86_64/syslinux.cfg for an example syslinux
configuration to boot Helios on x86_64.
Helios must be paired with a userspace to be useful. The kernel tree includes a simple userspace for testing the kernel, vulcan, which can be booted with the following methods:
Running Helios in a virtual machine
Run make nographic
to boot Helios in qemu with a serial console attached to
stdin/stdout. make nographic-gdb
will run the same configuration but pause for
the gdb debugger to attach to the virtual machine; make gdbc
in a second
terminal will perform this step. make run
will boot a virtual machine with a
display attached; this is not supported by all architectures.
Running the test suite
make check
will build and run the Vulcan test suite.