diff --git a/README.md b/README.md index 73f220d0..c5219c20 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ -# TQMa6UL Yocto BSP Mirror Project +# TQMa6UL Yocto BSP – Mirror & Build Documentation -**Project ID:** TQMA6-YOCTO-2038 -**Date:** 2026-03-01 -**Target Hardware:** TQMa6UL-AB (i.MX6 UltraLite) on MBa6x Carrier -**Yocto Version:** Scarthgap (5.0) LTS +**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. +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 @@ -19,86 +21,88 @@ The Year 2038 Problem (Y2K38) affects 32-bit systems using signed 32-bit time_t: - Systems will overflow and behave unpredictably after this date - Critical for military/aerospace systems with 15+ year service life -### Solution: Yocto Scarthgap (5.0 LTS) +### Solution: Yocto Scarthgap + musl -**Key Features:** -- 64-bit time_t by default on 32-bit ARM (glibc 2.38+) -- Linux Kernel 6.6 LTS (includes CONFIG_COMPAT_32BIT_TIME) -- Long-term support until April 2028 (extendable) -- Full source availability for audit +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 -**2038 Compliance Verification:** -| Component | Version | 2038 Ready | Notes | -|-----------|---------|------------|-------| -| Linux Kernel | 6.6.y | ✅ | CONFIG_COMPAT_32BIT_TIME | -| glibc | 2.38+ | ✅ | 64-bit time_t default | -| Yocto | 5.0 (Scarthgap) | ✅ | Built-in 2038 support | -| TQ BSP | scarthgap.TQ.ARM.BSP.0006 | ✅ | Verified with kernel 6.6 | +## 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`!) | -## Repository Structure +> ⚠️ **Critical:** The TQMa6UL machines are **only** available in the `mainline` +> config template. The `imx` config does NOT include this board. + +## Verified Build Configuration + +*Tested 2026-03-01 on Debian 13 (Python 3.13):* ``` -tqma6-yocto-mirror/ -├── docs/ -│ ├── 01-analysis/ # 2038 analysis and requirements -│ ├── 02-mirror-creation/ # Step-by-step mirror creation -│ ├── 03-license-analysis/ # License compliance documentation -│ └── 04-deployment/ # Corporate network deployment -├── configs/ # Configuration files -├── scripts/ # Automation scripts -└── README.md # This file +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 -## Quick Links +| 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 | -- [2038 Problem Analysis](docs/01-analysis/2038-problem-analysis.md) -- [Mirror Creation Guide](docs/02-mirror-creation/step-by-step-mirror-creation.md) -- [License Table Template](docs/03-license-analysis/license-table-template.csv) -- [Deployment Guide](docs/04-deployment/corporate-network-deployment.md) +> **Note:** This BSP uses **musl libc** (`arm-tq-linux-musleabi`), NOT glibc. +> musl has provided 64-bit `time_t` unconditionally on all 32-bit architectures +> since version 1.2.0 (February 2020). ---- +## Documentation -## Project Status +| Document | Description | +|----------|-------------| +| [2038 Compliance Analysis](docs/01-analysis/2038-problem-analysis.md) | Detailed 2038 risk assessment | +| [Mirror Creation Guide](docs/02-mirror-creation/step-by-step-mirror-creation.md) | Step-by-step build instructions | +| [License Summary](docs/03-license-analysis/license-summary.md) | License overview and compliance | +| [License Table](docs/03-license-analysis/UT-license-table.csv) | CSV format for import | +| [Air-Gapped Deployment](docs/04-deployment/corporate-network-deployment.md) | Offline build setup | -| Phase | Status | Description | -|-------|--------|-------------| -| Analysis | ✅ Complete | 2038 compliance verified for Scarthgap | -| Documentation | 🔄 In Progress | Creating step-by-step guides | -| Mirror Creation | ⏳ Pending | Execute on Ubuntu 22.04 outside corporate network | -| License Analysis | ⏳ Pending | Generate complete license table | -| Deployment | ⏳ Pending | Install in corporate network | +## Quick Start ---- +```bash +# 1. Clone +git clone --recurse-submodules https://github.com/tq-systems/ci-meta-tq.git +cd ci-meta-tq -## Hardware Target +# 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 -**Board:** TQMa6UL-AB RK REV.0405 -**SoC:** NXP i.MX6 UltraLite (Cortex-A7, 32-bit) -**Carrier:** MBa6x REV.020x -**Key Features:** -- 528 MHz Cortex-A7 -- 512MB DDR3 -- 4GB eMMC -- Dual Ethernet (1G + 100M) -- Industrial temp range +# 3. Fetch (for mirror creation) +bitbake tq-image-small-debug --runall=fetch -**Machine Configuration:** `tqma6ulx-mba6ulx` (to be confirmed during build) +# 4. Build +bitbake tq-image-small-debug +``` ---- +## References -## License - -Documentation: CC-BY-SA 4.0 -Scripts: MIT - -All Yocto and TQ BSP components follow their respective upstream licenses. -See [License Analysis](docs/03-license-analysis/) for complete breakdown. - ---- - -**Maintainer:** Siggi ⚙️ (OpenClaw Agent) -**Repository:** https://code.gegen.autos/openclaw/tqma6-yocto-mirror +- [TQ-Systems ci-meta-tq](https://github.com/tq-systems/ci-meta-tq) +- [TQMa6UL Product Page](https://www.tq-group.com/en/products/tq-embedded/arm-architecture/tqma6ul/) +- [Yocto Scarthgap Docs](https://docs.yoctoproject.org/5.0/) +- [musl 64-bit time_t](https://musl.libc.org/time64.html) diff --git a/docs/01-analysis/2038-problem-analysis.md b/docs/01-analysis/2038-problem-analysis.md index 2cd5cf05..e00b7442 100644 --- a/docs/01-analysis/2038-problem-analysis.md +++ b/docs/01-analysis/2038-problem-analysis.md @@ -50,7 +50,7 @@ The i.MX6 UltraLite (Cortex-A7) is a 32-bit processor: │ → Compiled with 64-bit time_t │ ├─────────────────────────────────────┤ │ C Library (glibc) │ -│ → glibc 2.34+ with 64-bit time_t │ +│ → musl 1.2+ with 64-bit time_t │ ├─────────────────────────────────────┤ │ Linux Kernel │ │ → 5.1+ with CONFIG_TIME_LOW_RES │ @@ -69,7 +69,7 @@ Yocto Project 5.0 (Scarthgap) released April 2024 provides: | **GCC** | 13.x | Supports 64-bit time_t | ✅ | | **BitBake** | 2.6 | Build system support | ✅ | -**Critical:** glibc 2.34+ uses 64-bit `time_t` BY DEFAULT for 32-bit ARM in Yocto. +**Critical:** musl 1.2+ uses 64-bit `time_t` BY DEFAULT for 32-bit ARM in Yocto. --- @@ -88,9 +88,9 @@ From TQ documentation: ### 3.2 Machine Configuration -For TQMa6UL-AB on MBa6x: +For TQMa6UL-AB on MBa6ULx: ``` -MACHINE = "tqma6ulx-mba6ulx" +MACHINE = "tqma6ul-multi-mba6ulx" ``` Verified supported features with kernel 6.6: @@ -176,7 +176,7 @@ grep -r "time_t\|gettimeofday\|stime" ${IMAGE_ROOTFS}/usr/bin/ ### 6.1 Findings 1. **Yocto Scarthgap (5.0) is 2038-compliant** for 32-bit ARM -2. **TQ BSP scarthgap.TQ.ARM.BSP.0006** uses compliant kernel 6.6 + glibc 2.38 +2. **TQ BSP scarthgap.TQ.ARM.BSP.0006** uses compliant kernel 6.6 + musl 1.2 3. **Migration from PTXdist is mandatory** for systems operating beyond 2038 4. **Offline mirror required** for software approval process diff --git a/docs/02-mirror-creation/step-by-step-mirror-creation.md b/docs/02-mirror-creation/step-by-step-mirror-creation.md index 09f41fdf..ce13ed91 100644 --- a/docs/02-mirror-creation/step-by-step-mirror-creation.md +++ b/docs/02-mirror-creation/step-by-step-mirror-creation.md @@ -15,10 +15,10 @@ Based on sticker analysis and code review: **Sticker:** TQMA6U-AB RK REV.0405 **Board:** TQMa6UL (NXP i.MX6 UltraLite, Cortex-A7, 32-bit) -**Carrier:** MBa6x +**Carrier:** MBa6ULx **Code Reference:** `tqma6x` = generic i.MX6 family identifier in legacy codebase -**Machine Configuration:** `tqma6ulx-mba6ulx` +**Machine Configuration:** `tqma6ul-multi-mba6ulx` *Alternative (ci-meta-tq multi-config):* `tqma6qdl-multi-mba6x` --- @@ -102,8 +102,8 @@ ls -la sources/ ```bash cd ${UT_BASE}/ci-meta-tq ./ci/ls-configs --file -./ci/ls-machines --file --config=imx -# Should list tqma6ulx-mba6ulx and other machines +./ci/ls-machines --file --config=mainline +# Should list tqma6ul-multi-mba6ulx and other machines ``` --- @@ -120,7 +120,7 @@ mkdir -p ~/.yocto cat > ~/.yocto/site.conf <<'EOF' # UT Project Configuration # Build: UT (Universität/Projekt) -# Target: TQMa6UL on MBa6x +# Target: TQMa6UL on MBa6ULx # Date: 2026-03-01 # Mirror directories (outside home for space) @@ -141,13 +141,13 @@ sudo chown -R "$USER:$USER" /srv/yocto cd ${UT_BASE}/ci-meta-tq # Set machine for TQMa6UL -export MACHINE=tqma6ulx-mba6ulx +export MACHINE=tqma6ul-multi-mba6ulx # Alternative if using multi-config: # export MACHINE=tqma6qdl-multi-mba6x # Initialize build environment (creates build_ut directory) -. ./setup-environment build_ut imx +. ./setup-environment build_ut mainline # Verify configuration bitbake -e | grep -E "^MACHINE=|^DL_DIR=|^SSTATE_DIR=" @@ -163,8 +163,8 @@ This step downloads all required source packages for offline use: cd ${UT_BASE}/ci-meta-tq # Ensure environment is set -export MACHINE=tqma6ulx-mba6ulx -. ./setup-environment build_ut imx +export MACHINE=tqma6ul-multi-mba6ulx +. ./setup-environment build_ut mainline # Build the image (downloads all sources) bitbake tq-image-small-debug @@ -221,7 +221,7 @@ Use TQ's provided script to populate the mirror: cd ${UT_BASE}/ci-meta-tq # Set machine and config -export MACHINE=tqma6ulx-mba6ulx +export MACHINE=tqma6ul-multi-mba6ulx # Fill mirror (downloads all git repos and tarballs) ci/fill_mirror build_ut imx @@ -237,7 +237,7 @@ du -sh /srv/yocto/sstate-cache/ ```bash cd ${UT_BASE}/ci-meta-tq -. ./setup-environment build_ut imx +. ./setup-environment build_ut mainline # Generate license manifest bitbake tq-image-small-debug -c do_populate_lic @@ -281,7 +281,7 @@ cat > UT-mirror-package/build-instructions/README.txt <<'EOF' UT Yocto Mirror Package ======================= -Target: TQMa6UL on MBa6x (i.MX6 UltraLite) +Target: TQMa6UL on MBa6ULx (i.MX6 UltraLite) Yocto: Scarthgap 5.0 LTS BSP: TQ scarthgap.TQ.ARM.BSP.0006 Build: UT (Universität/Projekt) @@ -375,7 +375,7 @@ Key packages to verify for military use: Before delivering mirror: - [ ] ci-meta-tq cloned with all submodules -- [ ] MACHINE=tqma6ulx-mba6ulx configured +- [ ] MACHINE=tqma6ul-multi-mba6ulx configured - [ ] Build "UT" completed successfully - [ ] /srv/yocto/downloads/ populated - [ ] /srv/yocto/premirror/ populated by ci/fill_mirror diff --git a/docs/04-deployment/corporate-network-deployment.md b/docs/04-deployment/corporate-network-deployment.md index 1590ceb5..6259030c 100644 --- a/docs/04-deployment/corporate-network-deployment.md +++ b/docs/04-deployment/corporate-network-deployment.md @@ -3,7 +3,7 @@ **Document ID:** DEPLOY-CORP-001-REV2 **Date:** 2026-03-01 **Build Name:** UT (Universität/Projekt) -**Target:** TQMa6UL on MBa6x +**Target:** TQMa6UL on MBa6ULx **Environment:** Air-gapped corporate network --- @@ -150,14 +150,14 @@ cd ${UT_BASE}/UT-mirror-package/sources/ci-meta-tq ls -la sources/ # Set machine for TQMa6UL -export MACHINE=tqma6ulx-mba6ulx +export MACHINE=tqma6ul-multi-mba6ulx # Initialize build (creates build_ut) -. ./setup-environment build_ut imx +. ./setup-environment build_ut mainline # Verify configuration bitbake -e | grep "^MACHINE=" -# Should show: MACHINE="tqma6ulx-mba6ulx" +# Should show: MACHINE="tqma6ul-multi-mba6ulx" ``` --- @@ -169,8 +169,8 @@ bitbake -e | grep "^MACHINE=" ```bash # Ensure we're in build environment cd ${UT_BASE}/UT-mirror-package/sources/ci-meta-tq -export MACHINE=tqma6ulx-mba6ulx -. ./setup-environment build_ut imx +export MACHINE=tqma6ul-multi-mba6ulx +. ./setup-environment build_ut mainline # Verify no network access is attempted export BB_NO_NETWORK=1 @@ -204,8 +204,8 @@ bitbake -e virtual/kernel | grep CONFIG_COMPAT_32BIT_TIME ```bash # Enter build environment cd ${UT_BASE}/UT-mirror-package/sources/ci-meta-tq -export MACHINE=tqma6ulx-mba6ulx -. ./setup-environment build_ut imx +export MACHINE=tqma6ul-multi-mba6ulx +. ./setup-environment build_ut mainline # Build target image bitbake tq-image-small-debug