fupsrl

03 — Target Profiles and Generic Linux SBC Portability

1 min read Updated 15 July 2026

The default configuration deliberately separates code generation from a specific board vendor. A standard Simulink model can therefore use the same workflow on multiple Linux SBCs, provided the target ABI, Linux userspace, and any hardware HAL mapping are compatible.

Supplied target profiles

Profile Target architecture Default compiler Typical use
linux-aarch64 ARMv8 64-bit aarch64-linux-gnu-gcc Modern Raspberry Pi OS 64-bit, Orange Pi, Radxa, and other 64-bit ARM Linux boards.
linux-armv7 32-bit ARM hard-float arm-linux-gnueabihf-gcc 32-bit ARM Linux images.
linux-x86_64 x86-64 gcc Linux PCs, industrial computers, or desktop test targets.
custom Supported aarch64/armv7/x86_64 ABI User supplied Nonstandard compiler, sysroot, or production hardware configuration.

Examples

% 32-bit ARM Linux target
cfg = xcpWorkflow("Model", "myModel", ...
    "TargetProfile", "linux-armv7");

% Linux x86-64 test target
cfg = xcpWorkflow("Model", "myModel", ...
    "TargetProfile", "linux-x86_64");

% Controlled custom toolchain
cfg = xcpWorkflow("Model", "myModel", ...
    "TargetProfile", "custom", ...
    "TargetArch", "aarch64", ...
    "ProdHWDeviceType", "ARM Compatible->ARM Cortex-A (64-bit)", ...
    "LocalCompiler", "aarch64-linux-gnu-gcc", ...
    "LocalCxxCompiler", "aarch64-linux-gnu-g++");

Architecture is not enough

A 64-bit ARM executable may still fail on a board with an older C library. For distributable builds, use LocalSysroot matched to the oldest supported target Linux image. Use LocalCpuFlags only when every target supports that CPU feature; leave it empty for the broadest ARMv8 compatibility.

Generic ERT versus board support packages

GenericErt=true temporarily selects generic ERT and avoids Raspberry Pi Support Package hooks. This is suitable for standard Simulink algorithms and for the supplied generic Linux GPIO blocks. If a model deliberately uses vendor-specific blocks, either replace them with generic HAL blocks or keep the board-specific integration isolated and use GenericErt=false knowingly.

What must still be checked on the board

  • Dynamic loader and GLIBC compatibility.
  • CPU-core count, CPU affinity, and real-time scheduling permissions.
  • Device-tree pin mux, GPIO character-device permissions, and chip/line mapping.
  • Network route, TCP port access, and XCP DAQ throughput.
  • Runtime service start, calibration persistence, and virtual flash restart.