Hobby Operating System
Go to file
Drew Galbraith a1e1e1c2d8 [Zion] Enable SSE instructions at the start of boot.
These aren't ready to be used yet as we need to save them on task
switch.
2023-11-20 16:40:07 -08:00
lib [Mammoth] Load non aligned ELF program sections properly. 2023-11-19 22:52:32 -08:00
scripts [Build] Add a way to start qemu in debug mode with new script. 2023-11-16 22:11:35 -08:00
sys [Yellowstone] Release init caps after loading. 2023-11-19 22:54:26 -08:00
sysroot Hide sysroot/bin from git. 2023-11-14 21:47:24 -08:00
toolchain Build GCC/Binutils toolchain in tree. (#1) 2023-06-15 18:39:14 -04:00
yunq [Glacier] Update String to be non-copyable by default. 2023-11-19 19:14:37 -08:00
zion [Zion] Enable SSE instructions at the start of boot. 2023-11-20 16:40:07 -08:00
.ccls Specify our target in .ccls 2023-06-16 23:15:41 -07:00
.clang-format Add a clang format spec 2023-05-17 20:30:15 -07:00
.gdbinit Add a kernel ELF module and load it in a new process. 2023-05-29 00:32:54 -07:00
.gitignore Hide sysroot/bin from git. 2023-11-14 21:47:24 -08:00
CMakeLists.txt Move qemu startup to its own script. 2023-11-15 16:39:36 -08:00
LICENSE Add LICENSE and README 2023-05-31 00:03:44 -07:00
README.md Update READMEs and TODOs 2023-10-24 22:56:45 -07:00
init-dbg.sh [Zion] Enable SSE instructions at the start of boot. 2023-11-20 16:40:07 -08:00

README.md

AcadiaOS

AcadiaOS is a hobby operating system I use to explore and learn about OS development.

It is built on top of a small capability-based microkernel that provides memory management, process scheduling, and hardware access.

Directory Structure

The subdirectories of the project are as follows:

  • zion: Contains kernel code as well as a couple headers that user space uses to interface with the kernel.
  • lib: Library code used by the kernel and user space.
  • sys: System services.
  • sysroot: Files that are copied to the root filesystem.
  • toolchain and scripts: Contain tooling for the cross-compile environment.
  • yunq: Contains the El Yunque IDL used for IPC between processes in userspace.

Where available, further documentation about each of these components can be found in the README files in each respective subdirectory.

Building AcadiaOS

Run ./scripts/build_toolchain.sh to build a gcc cross-compile toolchain for the project. (Takes a long time.)

Change into the build-dbg directory.

Run ninja qemu to build and run AcadiaOS in a VM.

System Dependencies

TODO

Boot Process

AcadiaOS uses the limine bootloader to enter into a 64-bit kernel in the negative 2GB address space (mcmodel kernel).

The Zion kernel then sets up interrupts, scheduling, and memory management before passing off control to the Yellowstone process.

The kernel passes capabilities to the Denali and VictoriaFalls binaries to the Yellowstone process to allow it to manage the rest of the boot process.

The Yellowstone, Denali, and VictoriaFalls processes are all passed at boot using limine modules, however any subsequent processes will be loaded off disk.