A hobby multikernel inspired by Barrelfish1 and seL42. It only supports x86_64 QEMU at the moment.
This project is loosely based on the Pitchfork Layout:
apps/: user-mode programs that can be run by the operating system. Each subdirectory contains an individual application, which may be linked against one or more libraries.build/: not checked into the repository, but generated at build-time. Contains intermediate artifacts and final binaries, as well as the ISO file to launch QEMU with.docs/: contains datasheets, technical documentation, and generated Doxygen documentation.drivers/: generally user-mode programs which interface with the core driver for the current architecture in order to manage a specific hardware device via system calls. This directory also contains the architecture-specific core drivers, which run in supervisor mode. Each subdirectory contains one or more drivers; for example, thedrivers/coredirectory contains a subdirectory with a driver for each supported processor architecture.libs/: static libraries that apps or drivers can link against and use. Each subdirectory contains an individual library.tests/: contains therun.shtest script for running QEMU.tools/: contains the build/test environment configure script, Dockerfile, and Doxygen configuration file.
The tools/Dockerfile defines a complete build and test environment in a
Debian-stable Docker container. The container has the following software
installed, which is required to build and test the OS:
- clang++ 13.0.0 or newer
- Doxygen 1.9.1 or newer
- GDB 10.1.90.20210103-git or newer
- Git 2.30.2 or newer
- Graphviz 2.42.2-5 or newer
- Grub-common 2.04-20 or newer
- Grub-pc-bin 2.04-20 or newer
- less 551 or newer
- Meson 0.59.1 or newer
- nasm 2.15.05 or newer
- Ninja 1.10.2 or newer
- Pip 20.3.4 or newer
- Python 3.9.2 or newer
- QEMU 5.2.0 or newer
- Xorriso 1.5.2 or newer
Normal debug build:
> meson build/ --buildtype debug --cross-file x64.ini
> ninja -C build/Release build:
> meson build/ --buildtype release --cross-file x64.ini
> ninja -C build/Generating Doxygen documentation (output to docs/doxygen):
> meson build/ --cross-file x64.ini
> ninja -C build/ docsRunning QEMU with standard options and serial port output:
> tests/run.shRunning QEMU with interrupt debugging turned on and logged to
~/qemu.log:
> tests/run.sh --debugRunning QEMU with interrupt debugging turned on and logged to
~/qemu.log, and GDB remote debugging:
> tests/run.sh --gdb
> gdb -q
(gdb) source src/debug/gdb_pre_script
(gdb) continueNOTE: GDB remote debugging will pause on startup. When you connect to QEMU via
GDB, issue a continue at the GDB prompt to continue.