Crate twizzler_abi

source ·
Expand description

This library provides a common interface for applications that want to talk to the Twizzler kernel, and defines that interface for both applications and the kernel to follow. It’s made of several parts:

  1. The Runtime – see [runtime].
  2. System Calls – see syscall and arch::syscall.
  3. Other Application-Kernel ABI definitions (e.g. pager queue entries).

Should I use these APIs?

All of these interfaces are potentially unstable and should not be used directly by most programs.


  • Architecture-dependent code, will include submodules for the appropriate arch that expose the _start symbol and the raw_syscall symbol.
  • When running a new program (and thus, initializing a new runtime), the new program expects to receive some information about how it was started, including arguments, env vars, etc. These are passed to the new program through the _start function as an array of AuxEntries as its only argument.
  • APIs for accessing the device tree and device representation objects.
  • Functions to deal with Kernel State Objects (KSOs). These are objects created by the kernel to describe the running state of the system and expose device memory to userspace.
  • Marker traits used to indicate safety for storing data in objects and using a struct as a base type.
  • Types that make up object metadata.
  • Low-level object APIs, mostly around IDs and basic things like protection definitions and metadata.
  • Manage slots in the address space. Currently not finished.
  • Wrapper functions around for raw_syscall, providing a typed and safer way to interact with the kernel.
  • Functions for manipulating threads.
  • Functions for handling upcalls from the kernel.