Build EdgeOS

GNU Make builds the x86_64 kernel, AArch64 UEFI image, initramfs media and Raspberry Pi images.

Requirements

ToolUsed for
GNU MakeConfiguration, dependency generation and build targets
Python 3Kconfig, inventories, generated tables and image tools
GCC/binutilsx86_64 kernel objects and ELF linking
AArch64 cross toolsaarch64-elf-gcc, ld and objcopy
Clang/LLVM and LLDAArch64 PE/COFF UEFI image, vDSO and bridge objects
NASMx86 assembly sources
GRUB and xorrisox86_64 bootable ISO generation
mtoolsAArch64 FAT ESP images
QEMU and EDK2Local UEFI boot tests

Configuration

x86_64 uses .config. AArch64 uses .config.arm64. The interactive targets edit each architecture independently.

Shell
make defconfig
make arm64_defconfig

# Interactive configuration
make menuconfig
make arm64-menuconfig

After Kconfig defaults change, use make olddefconfig or make arm64-olddefconfig to update an existing configuration.

Kernel images

x86_64

Shell
make defconfig
make -j"$(getconf _NPROCESSORS_ONLN)" kernel

Output: out/edgeos.bin

AArch64 UEFI

Shell
make arm64_defconfig
make -j"$(getconf _NPROCESSORS_ONLN)" arm64-kernel

Output: out/arm64/BOOTAA64.EFI

Initramfs and boot media

INITRAMFS_SOURCE_DIR points to an existing root filesystem tree. The image builder applies the base manifest, normalizes ownership and timestamps, and uses the compression selected in Kconfig.

Shell
make INITRAMFS_SOURCE_DIR=/path/to/rootfs initramfs
make INITRAMFS_SOURCE_DIR=/path/to/rootfs x86-initramfs-iso
make INITRAMFS_SOURCE_DIR=/path/to/rootfs arm64-initramfs-uefi
Generic initramfs
out/initramfs.img
x86_64 ISO
out/edgeos-x86_64-initramfs.iso
AArch64 ESP
out/edgeos-arm64-initramfs.img

Run with QEMU

Shell
# x86_64 UEFI
make INITRAMFS_SOURCE_DIR=/path/to/rootfs run-x86-initramfs

# AArch64 UEFI
make INITRAMFS_SOURCE_DIR=/path/to/rootfs run-arm64-initramfs-uefi

The x86 target reads UEFI firmware from EDGEOS_X86_UEFI_CODE and defaults to KVM. The AArch64 target reads EDGEOS_AARCH64_EFI and defaults to HVF. Set EDGEOS_QEMU_ACCEL or EDGEOS_QEMU_MEM to change the accelerator or guest memory.

Raspberry Pi images

Shell
make INITRAMFS_SOURCE_DIR=/path/to/rootfs arm64-rpi4
make INITRAMFS_SOURCE_DIR=/path/to/rootfs arm64-rpi5
Raspberry Pi 4
out/edgeos-arm64-rpi4.img
Raspberry Pi 5
out/edgeos-arm64-rpi5.img

A Pi 5 card also needs Raspberry Pi boot firmware, an AArch64 U-Boot binary named u-boot.bin and bcm2712-rpi-5-b.dtb in the FAT filesystem.

Repository checks

Core checks
make kconfig-check
make syscall-inventory-check
make linux-uapi-inventory-check
make cross-arch-unity-check
make bsd-driver-build-plan-check
make bsd-driver-package-registry-check
make bsd-driver-manifest-check
make bsd-driver-interface-check

Focused unit targets

Use the host-side test targets for the subsystem being changed.

Examples
make scheduler-runtime-unit
make mm-runtime-unit
make mount-api-unit
make socket-runtime-unit
make bpf-runtime-unit
make drm-runtime-unit

Output directories

PathContents
obj/Architecture object trees and dependency files
out/Kernel images, media, generated plans and host tests
include/generated/Kconfig headers and generated architecture settings

Kernel README · CONTRIBUTING