ukernel-sys 0.1.0

System interface types for µKernel — a Rust microkernel with hypervisor and real-time scheduling. Defines kernel operations, submission ring layout, and subsystem registration.
Documentation
  • Coverage
  • 79.81%
    83 out of 104 items documented1 out of 15 items with examples
  • Size
  • Source code size: 22.64 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 3.13 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 1m 51s Average build duration of successful builds.
  • all releases: 1m 51s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • americankernel/ukernel-sys
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • pvinci

ukernel-sys

System interface types for µKernel — a Rust microkernel with hypervisor, container runtime, and real-time scheduling. DO-178C certification in progress.

This crate defines the ABI between userspace domains and the kernel:

  • KernelOp — ~30 primitive kernel operations (memory, VFS, network, threads, signals)
  • SubmitEntry / CompleteEntry — submission ring entry types for batched syscalls
  • SubmitRing — shared-memory ring buffer layout
  • SubsystemId — hashed identity for loadable domain types (POSIX, VMM, etc.)

Architecture

µKernel uses a vectorized syscall model inspired by io_uring. Userspace queues operations into a shared-memory ring and flushes them with a single SYS_SUBMIT syscall. The kernel processes the batch, capability-checks each operation, and writes results to the completion ring. One ring transition for N operations.

Application
    ↓ (std or no_std)
libposix / ukernel-std
    ↓ queues KernelOps
Submission Ring (shared page)
    ↓ SYS_SUBMIT (one ring transition)
µKernel (capability check + execute per op)
    ↓
Completion Ring (results)

Usage

use ukernel_sys::{KernelOp, SubmitEntry, SubsystemId};

// Define a subsystem
const MY_SUBSYSTEM: SubsystemId = SubsystemId::from_name(b"my-runtime");

// Create a submission entry
let entry = SubmitEntry::new(
    KernelOp::DebugPrint as u16,
    [buf_ptr, buf_len, 0, 0, 0],
    42, // user_data — returned in completion
);

no_std

This crate is #![no_std] with zero dependencies. It contains only type definitions and constants — no I/O, no allocation, no unsafe code.

License

MIT OR Apache-2.0

Links