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.