universalisos/docs/API.md

12 KiB

UniversalisOS API Reference

Kernel Hypercall Interface

Guests communicate with the hypervisor through architecture-specific trap instructions. All hypercalls return a status code in the first return register.

AArch64 HVC Interface

Guests issue hvc #0x5500 (immediate = 'UOS'). Call number in x0, arguments in x1-x4, return in x0.

Source: kernel/src/arch/aarch64/inc/uos_hv_abi.h

Call # Name Args Description
0x00 UOS_HV_PUTC char Character output
0x01 UOS_HV_PUTS IPA of NUL string String output
0x02 UOS_HV_GETTIME Get time (ticks)
0x03 UOS_HV_YIELD Yield CPU
0x04 UOS_HV_SHUTDOWN Shutdown (no return)
0x05 UOS_HV_ACK_VTIMER Acknowledge virtual timer
0x06 UOS_HV_GETC Character input (poll)
0x07 UOS_HV_IRQ_ACK Acknowledge virtual IRQ
0x08 UOS_HV_IRQ_ENABLE irq_num Enable virtual IRQ
0x09 UOS_HV_IRQ_DISABLE irq_num Disable virtual IRQ
0x0A UOS_HV_INFO Get HV identity/capabilities
0x0B UOS_HV_GET_VCPU_ID Get vCPU ID
0x0C UOS_HV_GET_PART_ID Get partition ID
0x0D UOS_HV_GET_TICK_HZ Get ticks per second
0x0E UOS_HV_PART_GET_STATUS part_id ARINC-653 partition status
0x0F UOS_HV_PART_SET_MODE part_id, mode ARINC-653 set mode
0x10 UOS_HV_ERROR_RAISE error_code ARINC-653 raise error
0x11 UOS_HV_ERROR_GET_STATUS ARINC-653 get error status
0x12 UOS_HV_SAMPLING_CREATE port_id, max_msg_size ARINC-653 sampling port create
0x13 UOS_HV_SAMPLING_WRITE port_id, msg_ptr, msg_size ARINC-653 sampling port write
0x14 UOS_HV_SAMPLING_READ port_id, msg_ptr, buf_size ARINC-653 sampling port read
0x15 UOS_HV_VIRTIO_DISCOVER VirtIO device discovery
0x17 UOS_HV_VIRTIO_GET_CONFIG dev_id, cfg_ptr VirtIO get device config
0x18 UOS_HV_CHECKPOINT slot_id Checkpoint partition
0x19 UOS_HV_VIRTIO_KICK / UOS_HV_RESTORE dev_id / slot_id VirtIO kick or restore

Return Codes (AArch64)

Code Name Description
0 UOS_HV_OK Success
-1 UOS_HV_EINVAL Bad argument
-2 UOS_HV_ENOSYS Unknown call number
-3 UOS_HV_EPERM Not permitted
-4 UOS_HV_EBUSY Resource busy
-5 UOS_HV_EAGAIN Would block / nothing pending
-6 UOS_HV_ENOMEM No resource
-7 UOS_HV_EFAULT Bad guest pointer
-8 UOS_HV_ENXIO No such device/irq
-9 UOS_HV_ETIMEDOUT Timed out

Capability Bits

Bit Name Description
0 UOS_HV_CAP_CONSOLE PUTC/PUTS/GETC
1 UOS_HV_CAP_VTIMER Virtual timer
2 UOS_HV_CAP_VIRQ Virtual IRQ control
3 UOS_HV_CAP_VIRTIO_BLK VirtIO block device
4 UOS_HV_CAP_STAGE2 Stage-2 MMU active
5 UOS_HV_CAP_APEX ARINC-653 calls
6 UOS_HV_CAP_SAMPLING ARINC-653 sampling ports
7 UOS_HV_CAP_VIRTIO_NET VirtIO net device

RISC-V Ecall Interface

Guests issue ecall from U-mode. Call number in a7, arguments in a0-a2, return in a0.

Source: kernel/src/arch/riscv/inc/hypercall.h

Call # Name Args Description
0 UOS_HCALL_YIELD Yield CPU
1 UOS_HCALL_SET_TIMER time_lo, time_hi Set timer
2 UOS_HCALL_CONSOLE_PUTS str_ptr, len Console output
3 UOS_HCALL_MAP_MEMORY vaddr, paddr, size, flags Map memory
4 UOS_HCALL_UNMAP_MEMORY vaddr, size Unmap memory
5 UOS_HCALL_IPI_SEND target_hart Send IPI
6 UOS_HCALL_PARTITION_RESET Reset partition
7 UOS_HCALL_IRQ_CLAIM Claim IRQ
8 UOS_HCALL_IRQ_COMPLETE irq_num Complete IRQ
9 UOS_HCALL_NEXT_TIMEPART Next time partition
10 UOS_HCALL_PART_GET_STATUS part_id ARINC-653 partition status
11 UOS_HCALL_PART_SET_MODE part_id, mode ARINC-653 set mode
12 UOS_HCALL_ERROR_RAISE error_code ARINC-653 raise error
13 UOS_HCALL_ERROR_GET_STATUS ARINC-653 get error status
14 UOS_HCALL_GETTIME Get time (ticks)
15 UOS_HCALL_SAMPLING_CREATE port_id, max_size Sampling port create
16 UOS_HCALL_SAMPLING_WRITE port_id, msg_ptr, msg_size Sampling port write
17 UOS_HCALL_SAMPLING_READ port_id, msg_ptr, buf_size Sampling port read
18 UOS_HCALL_VIRTIO_DISCOVER VirtIO device discovery
19 UOS_HCALL_VIRTIO_KICK dev_id VirtIO kick (notify)
20 UOS_HCALL_VIRTIO_GET_CONFIG dev_id, cfg_ptr VirtIO get device config
21 UOS_HCALL_CHECKPOINT slot_id Checkpoint (migration)
22 UOS_HCALL_RESTORE slot_id Restore (migration)

Return Codes (RISC-V)

Code Name Description
0 UOS_HCALL_OK Success
-1 UOS_HCALL_EINVAL Bad argument
-7 UOS_HCALL_EFAULT Bad guest pointer

ARMv7 Paravirtualized Interface

ARMv7 guests run at SVC (no EL2). Opcodes are dispatched through svc with the opcode in r7.

Source: kernel/src/core/abi/uos_pv_abi.h

Opcode Name Description
0xA0 PV_SVC_CON_PUTC Console character out
0xA1 PV_SVC_CON_GETC Console character in (poll)
0xA2 PV_SVC_CON_WRITE Console buffer write
0xA3 PV_SVC_IRQ_ACK Acknowledge IRQ
0xA4 PV_SVC_IRQ_ENABLE Enable IRQ
0xA5 PV_SVC_IRQ_DISABLE Disable IRQ
0xA6 PV_SVC_TIME Get time (ticks)
0xA7 PV_SVC_MMIO_READ Proxy MMIO read
0xA8 PV_SVC_MMIO_WRITE Proxy MMIO write
0xA9 PV_SVC_PART_GET_STATUS ARINC-653 partition status
0xAA PV_SVC_PART_SET_MODE ARINC-653 set mode
0xAB PV_SVC_ERROR_RAISE ARINC-653 raise error
0xAC PV_SVC_ERROR_GET_STATUS ARINC-653 get error status
0xAF PV_SVC_HALT Halt guest partition

Note: ARMv7 has no dedicated VirtIO hypercalls; VirtIO access goes through MMIO trap-and-emulate (PV_SVC_MMIO_READ/PV_SVC_MMIO_WRITE).


VirtIO Hypercalls

VirtIO hypercalls provide paravirtualized device access. Implemented on AArch64 and RISC-V.

VIRTIO_DISCOVER

Enumerates available VirtIO devices. Returns a bitmap of device IDs and their types.

  • AArch64: UOS_HV_VIRTIO_DISCOVER (0x15)
  • RISC-V: UOS_HCALL_VIRTIO_DISCOVER (18)

VIRTIO_KICK

Notifies the hypervisor that the guest has updated a virtqueue descriptor.

  • AArch64: UOS_HV_VIRTIO_KICK (0x19)
  • RISC-V: UOS_HCALL_VIRTIO_KICK (19)

VIRTIO_GET_CONFIG

Reads device-specific configuration space.

  • AArch64: UOS_HV_VIRTIO_GET_CONFIG (0x17)
  • RISC-V: UOS_HCALL_VIRTIO_GET_CONFIG (20)

Supported Device Types

Type Name
1 UOS_VIRTIO_NET — Network
2 UOS_VIRTIO_BLOCK — Block storage
3 UOS_VIRTIO_CONSOLE — Console
4 UOS_VIRTIO_GPU — GPU
5 UOS_VIRTIO_INPUT — Input
6 UOS_VIRTIO_BALLOON — Memory balloon
7 UOS_VIRTIO_CRYPTO — Crypto
8 UOS_VIRTIO_CUSTOM — Custom

Migration Hypercalls

Checkpoint/restore hypercalls for live migration. Available on AArch64 and RISC-V only.

CHECKPOINT

Captures a snapshot of the guest partition state (registers, memory, device state).

  • AArch64: UOS_HV_CHECKPOINT (0x18)
  • RISC-V: UOS_HCALL_CHECKPOINT (21)
  • Args: slot_id (checkpoint slot index, 0 or 1)
  • Returns: UOS_HV_OK on success

RESTORE

Restores a previously checkpointed partition state.

  • AArch64: UOS_HV_RESTORE (0x19)
  • RISC-V: UOS_HCALL_RESTORE (22)
  • Args: slot_id
  • Returns: UOS_HV_OK on success

Internal format: Magic 0x554F4348 ("UOSH"), version 1, 2 checkpoint slots. See kernel/src/core/migration/migrator.h.


Mycelium CLI

The mycelium binary replaces PikeOS's proprietary configconv. Located in the separate mycelium repository (/home/fabiorafaelcoutada/portugalfuturista/mycelium/).

Usage

mycelium [OPTIONS] <xsd-file>

Output Modes

Flag Description
--enum --struct Emit C header enums and structs from XSD
--enum-asm Emit assembler-safe enum header (defines only)
--bin Emit binary configuration blob from XML instance
--crc=NAME Emit CRC32 checksum for binary config
--test Emit .inc test harness (C macro assertions)
--tfw Emit TFW C test harness from test config XML
--loader Emit struct-aware binary loader (C function)

Global Options

Flag Default Description
--comment "" Banner comment in output
--ifndef MYCELIUM_GEN_H Include guard macro
--include #include directive (e.g. <kernel/p4stddef.h>)
--wordsize 32 Pointer word size for --bin (32 or 64)
--endian little Endianness for --bin
--align-tail 128 Tail-padding alignment for --bin
--xml Input XML instance (for --bin, --test, --crc)
--out stdout Output file path

Companion: configmore

Flag Description
--mode test Emit test harness from XML + XSD
--mode dump Print textual representation of binary config blob
--schema XSD path (required for --mode test)
--header-only For --mode dump: print header only

uos-cover Toolchain

Coverage analysis and certification evidence pipeline.

uos-cins — C Source Instrumenter

python3 tools/uos-cover/uos_cins.py <source.c> \
  --profile COV_STATEMENTS -o <output.c> --uxsc <output.uxsc>

Profiles: COV_STATEMENTS, COV_DECISIONS, COV_MCDC, COV_CALLS, COV_FUNCTIONS

uos-xst — Structural Linker

python3 tools/uos-cover/uos_xst.py <file1.uxsc> <file2.uxsc> ... \
  -o <project.umdb> --map <uos_map.h>

uos-covparse — Coverage Dump Parser

python3 tools/uos-cover/uos_covparse.py <runtime.umap> \
  --map <project.umdb> --dataset <name> [--merge-results]

uos-covexport — Report Generator

python3 tools/uos-cover/uos_covexport.py <project.umdb> \
  --fmt html -o <report.html>

Formats: txt, csv, xml, html

uos-justify — Justification Store

# Add a justification
python3 tools/uos-cover/uos_justify.py add \
  --file src/sched.cpp --function schedule \
  --title "Dead code in error path" --class COV_DECISIONS

# List justifications
python3 tools/uos-cover/uos_justify.py list --file src/sched.cpp

# Export
python3 tools/uos-cover/uos_justify.py export --format xml -o ./justifications/

uos-trace — Traceability Matrix

python3 tools/uos-cover/uos_trace.py generate \
  --requirements reqs.md --umdb <project.umdb> \
  --format html -o <traceability.html>

uos-verify — DO-178C Verification Plan

python3 tools/uos-cover/uos_verify.py plan \
  --module scheduler --dal B --profile COV_STATEMENTS \
  -o verification_plan.md

DAL levels: A, B, C, D, E

uos-package — Evidence Packager

python3 tools/uos-cover/uos_package.py \
  --umdb <project.umdb> \
  --justifications ./justifications/ \
  --traceability <traceability.html> \
  --verification-plan <verification_plan.md> \
  -o ./evidence/

uos-cover — Project Driver (Orchestrator)

python3 tools/uos-cover/uos_cover.py run <project.ucovprj> --dataset <name>
python3 tools/uos-cover/uos_cover.py report <project.umdb> -o report.html
python3 tools/uos-cover/uos_cover.py instrument <project.ucovprj>

uos-pkg Toolchain

RPM 4.2-compatible package management tooling.

uos-pkg — Package Tool (Macro Engine)

# Evaluate a macro expression
python3 tools/uos-pkg/uos-pkg.py eval "%{name}-%{version}"

# Show resolved macro configuration
python3 tools/uos-pkg/uos-pkg.py showrc

uos-build — RPM Build Engine

python3 tools/uos-pkg/uos_build.py <spec-file> [-bp|-bc|-bi|-ba|-bb|-bs]
Flag Stages
-bp Prep only
-bc Prep + build
-bi Prep + build + install
-ba Full build (all stages + source + binary RPMs)
-bb Binary RPM only
-bs Source RPM only

uos-spec-parser — Spec File Parser

python3 tools/uos-pkg/uos_spec_parser.py <spec-file> --validate

Parses .spec files with preamble tags, %define/%global macros, section blocks (%prep, %build, %install, %files, %changelog), %if/%else/%endif conditionals, and macro expansion.