CheriOS has most of its non-system programs in its root directory. The nanokernel and boot code are in the boot directory. All OS related programs are in the cherios directory. The following are important:
-
boot: boot code. ALSO still contains the init program. If you want to disable/enable programs being loaded during init, see the list in /boot/src/init/init.c
-
boot/nanokernel: nanokernel code. Provides reservations, foundations, CPU contexts, and wraps access to the architecture for the kernel.
-
cherios/kernel: microkernel. Handles exceptions/interrupts, scheduling, and message-passing between activations.
-
cherios/core/namespace: provides a directory of registered activations (see /include/namespace.h)
-
cherios/core/memmgt: provides the system-wide memory map (see /include/sys.mman.h)
-
cherios/system/type_manager: Handles allocations of sealing capabilities. Manages 'Type Ownership Principles' (TOPs), in the same way the memory manager has MOPs.
-
cherios/core/proc_manager: provides the process model for c/c++ programs (see include/thread.h)
-
cherios/system/fatfs: simple FAT filesystem module (see use include/cheristd.h for wrappers)
-
cherios/system/lwip: Web stack (see include/net.h for wrappers)
-
cherios/system/libsocket: The socket library. Most processes link against this as a dynamic library for their sockets.
-
cherios/system/dylink: The dynamic linker. CheriOS dynamic linking works by dynamic libraries statically building in a dynamic-linking server.
-
libuser: all modules are linked against it. Provides several libc functions as well as cherios-related functions.
-
libuser/src/capmalloc/capmalloc_slabs.cpp The latest malloc implementation for CheriOS.
There is a simple two party messaging demo that demonstrates how to use nanokernel primitives for secure messaging between two processes.