|
RADPx-OS Kernel (Radical Posix OS)
Crimson 0.1.4
POSIX-inspired kernel API with embedded and desktop VM targets
|
RADPx-OS keeps one portable kernel core (RADKernel) shared across every target and pushes hardware-specific code to the edges. This page maps the source tree so you know where a given concern lives before you change it.
radkernel.h (see API Structure). Subsystem headers under RADKernel/headers/radkernel/ (rad_vfs.h, rad_net.h, rad_spi.h, …) each include that ABI so a driver or app pulls in only what it uses.| Directory | Role |
|---|---|
core/ | The portable kernel core. RADKernel.cpp is the host-simulator backend; RADKernel_runtime.cpp is the embedded/freestanding backend. Selected by RAD_KERNEL_BACKEND. |
headers/radkernel/ | The public C ABI: radkernel.h plus the per-subsystem headers (rad_vfs.h, rad_task.h, rad_net.h, rad_tty.h, rad_spi.h, rad_irq.h, …). |
boot/ | radboot — the rad_boot_info_t hand-off that platform code fills before rad_kernel_init(). |
fs/ | Portable, block-device filesystems shared by all targets: ext4, ext2, fat. |
drivers/ | Portable device drivers. drivers/net/gem_cadence.cpp is the Cadence GEM NIC used on ZynqMP. |
platforms/ | Arch- and SoC-specific code. x86_64/ (CPU, VM, user, storage, boot). a53/ for Cortex-A53, with the zynqmp/ (ZuBoard/ZynqMP) and bcm283x/ (Pi) SoC HALs beneath it. |
boards/ | Per-board kernel entry sources. boards/zuboard_1cg/ holds that board's kernel.cpp, boot.S, and linker.ld. |
runtime/ | The freestanding kernel runtime (freestanding_runtime.cpp) — heap, malloc/free, formatting, mem/string — for targets built -nostdlib. |
hal/ | Toolchain/SDK glue kept out of the core: hal/circle/ (Circle SDK + newlib runtime glue) and hal/rp235x_pico/. |
subsystems/ | Cross-cutting runtime subsystems. RADOverlayRuntime.cpp binds the device-tree/overlay description to buses, devices, framebuffers, and interrupt domains. |
modules/ | Reserved for loadable-module content. |
tools/embedded/ — the buildable target glue and smoke scripts (Makefiles, CMake, QEMU runners). The x86_64 GRUB terminal/WM profiles and the rad_zuboard_1cg/ ZuBoard target live here; the board source is under RADKernel/boards/, while the build glue stays here.userland/ — RADPx-OS userspace program source (init, the rash shell, login, coreutils shims).libs/ — userspace libraries: libradc (the RADPx-OS C library) and the ncurses port.services/ — the daemon/service set (RADServiceManager/radinit and friends).tests/ — host-side kernel unit tests (RADKernelTests).docs/ — this documentation set (docs/public/) and the Doxygen config.A target build links the core (RADKernel_runtime.cpp) + the shared services it needs (fs/, drivers/, runtime/ or a HAL) + its platform (platforms/<arch>/) + its board entry (boards/<board>/). For example, the ZuBoard-1CG image links the A53 platform, the ZynqMP SoC HAL, the ext4 filesystem, the Cadence GEM driver, and the zuboard_1cg board entry. Because the core and shared services are identical across targets, parity work on one target (a filesystem fix, a syscall) benefits the others without a port.
See Getting Started to build and boot a target, and the ZuBoard-1CG notes for the A53 bring-up specifics.