Critical corrections based on actual build test on 2026-03-01: 1. Machine: tqma6ulx-mba6ulx → tqma6ul-multi-mba6ulx (the -multi variant is the correct one for the MBa6ULx carrier) 2. Config: imx → mainline (TQMa6UL machines are NOT in the imx config, only in mainline) 3. Carrier: MBa6x → MBa6ULx (MBa6x is for the Quad/Dual, MBa6ULx is for the UltraLite) 4. C library: glibc 2.38 → musl 1.2+ (BSP uses musl: TARGET_SYS=arm-tq-linux-musleabi) 5. README rewritten with verified build output Verified: DISTRO=spaetzle 5.0.11, BB_VERSION=2.8.0
TQMa6UL Yocto BSP – Mirror & Build Documentation
Project ID: TQMA6-YOCTO-2038 Date: 2026-03-01 Target Hardware: TQMa6UL-AB (i.MX6 UltraLite) on MBa6ULx Carrier Yocto Version: Scarthgap (5.0.11) LTS Objective: Create offline mirror for software approval, ensure 2038 compliance
Overview
This project addresses the requirement to migrate from legacy PTXdist-based BSP to Yocto Project for TQMa6UL hardware. The primary driver is Year 2038 compliance for military/long-term deployments.
2038 Problem Context
The Year 2038 Problem (Y2K38) affects 32-bit systems using signed 32-bit time_t:
- Maximum representable time: 03:14:07 UTC on 19 January 2038
- Systems will overflow and behave unpredictably after this date
- Critical for military/aerospace systems with 15+ year service life
Solution: Yocto Scarthgap + musl
Yocto Scarthgap (5.0 LTS) with musl libc provides:
- 64-bit time_t by default on 32-bit ARM (musl 1.2+)
- Long-term support until April 2028+
- Comprehensive license manifests for approval
Board Identification
| Field | Value |
|---|---|
| SoM | TQMa6UL (sticker: TQMA6U-AB) |
| SoC | NXP i.MX6 UltraLite (Cortex-A7, single core) |
| Carrier | MBa6ULx |
| Machine | tqma6ul-multi-mba6ulx |
| BSP Config | mainline (not imx!) |
⚠️ Critical: The TQMa6UL machines are only available in the
mainlineconfig template. Theimxconfig does NOT include this board.
Verified Build Configuration
Tested 2026-03-01 on Debian 13 (Python 3.13):
BB_VERSION = 2.8.0
BUILD_SYS = x86_64-linux
NATIVELSBSTRING = universal
TARGET_SYS = arm-tq-linux-musleabi
MACHINE = tqma6ul-multi-mba6ulx
DISTRO = spaetzle
DISTRO_VERSION = 5.0.11
TUNE_FEATURES = arm vfp cortexa7 neon thumb callconvention-hard
TARGET_FPU = hard
2038 Compliance Status
| Component | Version | 2038-safe? | Notes |
|---|---|---|---|
| Kernel | Mainline 6.x | ✅ | 64-bit time syscalls |
| musl libc | 1.2+ | ✅ | 64-bit time_t since 1.2.0 |
| Userspace | Scarthgap | ✅ | Rebuilt against 64-bit time_t |
| U-Boot | Mainline | ✅ | No time_t issues in bootloader |
Note: This BSP uses musl libc (
arm-tq-linux-musleabi), NOT glibc. musl has provided 64-bittime_tunconditionally on all 32-bit architectures since version 1.2.0 (February 2020).
Documentation
| Document | Description |
|---|---|
| 2038 Compliance Analysis | Detailed 2038 risk assessment |
| Mirror Creation Guide | Step-by-step build instructions |
| License Summary | License overview and compliance |
| License Table | CSV format for import |
| Air-Gapped Deployment | Offline build setup |
Quick Start
# 1. Clone
git clone --recurse-submodules https://github.com/tq-systems/ci-meta-tq.git
cd ci-meta-tq
# 2. Setup
export ACCEPT_FSL_EULA=1
export MACHINE=tqma6ul-multi-mba6ulx
. ./setup-environment build_ut mainline
echo 'ACCEPT_FSL_EULA = "1"' >> build_ut/conf/local.conf
# 3. Fetch (for mirror creation)
bitbake tq-image-small-debug --runall=fetch
# 4. Build
bitbake tq-image-small-debug