SoCks - Simplifying Firmware and Software Integration for Heterogeneous SoCs
Marvin Fuchs, Lukas Scheller, Timo Muscheid, Oliver Sander, Luis E. Ardila-Perez
TL;DR
SoCks introduces a block-based build framework for heterogeneous SoCs that partitions a bootable image into manageable, interchangeable blocks with standardized interfaces. Implemented in Python using a facade and per-block builders, it enables containerized builds, incremental processing, and CI/CD workflows, dramatically reducing build times and host-resource requirements compared to Yocto or Buildroot. The framework supports flexible root-filesystem choices (including conventional distributions like Debian/AlmaLinux) and uses a single, centralized YAML project configuration with architecture-specific defaults, promoting reuse and distributed collaboration. Performance evaluations show substantial speedups and reduced disk usage, underscoring SoCks’ practicality for lab-scale teams and research environments. The work points toward expanding block coverage for AMD’s Zynq us+ and Versal ecosystems, including RT cores and AI accelerators, while maintaining open-source accessibility.
Abstract
Modern heterogeneous System-on-Chip (SoC) devices integrate advanced components into a single package, offering powerful capabilities while also introducing significant complexity. To manage these sophisticated devices, firmware and software developers need powerful development tools. However, as these tools become increasingly complex, they often lack adequate support, resulting in a steep learning curve and challenging troubleshooting. To address this, this work introduces System-on-Chip blocks (SoCks), a flexible and expandable build framework that reduces complexity by partitioning the SoC image into high-level units called blocks. SoCks builds each firmware and software block in an encapsulated way, independently from other components of the image, thereby reducing dependencies to a minimum. While some information exchange between the blocks is unavoidable to ensure seamless runtime integration, this interaction is standardized via interfaces. A small number of dependencies and well-defined interfaces simplify the reuse of existing block implementations and facilitate seamless substitution between versions-for instance, when choosing root file systems for the embedded Linux operating system. Additionally, this approach facilitates the establishment of a decentralized and partially automated development flow through Continuous Integration and Continuous Delivery (CI/CD). Measurement results demonstrate that SoCks can build a complete SoC image up to three times faster than established tools.
