The PMI producer for pichi-vm. arma build turns a kernel (+ optional initrd
and cmdline) into a Portable Machine Image:
a single PE carrying the base platform devicetree, the tatu boot stub as
firmware, and the kernel — booted by a PMI VMM such as dillo.
This repository bundles tatu (the guest-side PMI boot stub, built bare-metal
and embedded as an artifact) and its dtb2acpi / dtb2e820 helpers.
Include bootconfig in the guest kernel command line to request a fixed 2 MiB
lbc:bootconfig reservation, for example --cmdline 'bootconfig console=hvc0'.
The argument must precede any -- separating kernel and init arguments. Arma
recognizes Linux's quoting and parameter-name rules, including bootconfig=0.
A requested reservation requires a nonempty --initrd and a kernel built with
CONFIG_BOOT_CONFIG=y, CONFIG_BLK_DEV_INITRD=y and CONFIG_PROC_FS=y.
Arma reads --config or embedded IKCONFIG and checks that kernel command-line
replacement, extension and truncation preserve activation. A built-in
bootconfig argument or CONFIG_BOOT_CONFIG_FORCE=y can preserve activation;
the argument supplied through --cmdline is what requests the reservation.
Arma pads .initrd to a 2 MiB boundary and places the Zero section .bconf
immediately after it. Linux's initrd range covers both sections. The reservation
has no on-disk payload. Without the argument, the image contains only the
padded initrd. Arma preserves the supplied command line, with the existing
--serial handling for earlycon.
The VMM supplies bootconfig at launch for Linux to expose through
/proc/bootconfig. The arma cmdline editor replaces DTB boot arguments
verbatim; changing the allocation requires rebuilding the image.
When --initrd is a static ELF (for example Corium), repeat --module NAME
to include named modules and their hard dependencies in the generated archive.
Arma detects the target kernel's release and discovers its installed module tree;
--module-tree PATH overrides the source with a release-specific directory.
Arma decodes selected modules on the host to plain .ko files under
/usr/lib/modules/<release>/, preserving appended signatures without a guest
decompressor. Supplied archives are validated without rewriting; compressed
module names anywhere cause a build error.
See module packaging for the interface, validation, limitations, and acceptance criteria.
Apache-2.0 — see LICENSE.
The npmccallum/pichi COPR project builds main for Fedora on x86_64 and
aarch64. .copr/Makefile creates one source RPM; COPR builds the native
packages using the spec in .copr/. Binary builds need network access
for Cargo's locked dependencies. The unreleased RPM version is 0.1.0~dev;
COPR's build ID in Release makes successive builds of that version upgrades.