docs: add distro comparison, recommend dumpling-wayland for Qt/glibc
Key updates: - README: comprehensive distro comparison table (spaetzle vs dumpling-wayland) - Recommend dumpling-wayland (glibc) for Qt/GUI applications - spaetzle (musl) explicitly blocks Qt: SKIP_RECIPE[tq-image-qt6] - Both distros are 2038-safe (glibc 2.39 and musl 1.2+ both use 64-bit time_t) - Updated 2038 analysis to cover both C library options - Updated license tables with both glibc and musl entries - Fixed remaining config references (imx → mainline) - Added image availability matrix per distro - Corrected package versions to match Scarthgap 5.0.11
This commit is contained in:
174
README.md
174
README.md
@@ -11,8 +11,9 @@
|
||||
## 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.
|
||||
to Yocto Project for TQMa6UL hardware. The primary drivers are Year 2038
|
||||
compliance for military/long-term deployments and support for Qt-based
|
||||
graphical applications.
|
||||
|
||||
### 2038 Problem Context
|
||||
|
||||
@@ -21,12 +22,11 @@ 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 + musl
|
||||
### Solution
|
||||
|
||||
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
|
||||
Yocto Scarthgap (5.0 LTS) provides 2038 compliance with both C libraries:
|
||||
- **glibc 2.39**: 64-bit `time_t` on 32-bit ARM (default since glibc 2.34 in Yocto)
|
||||
- **musl 1.2+**: 64-bit `time_t` unconditionally since 2020
|
||||
|
||||
## Board Identification
|
||||
|
||||
@@ -41,34 +41,130 @@ Yocto Scarthgap (5.0 LTS) with musl libc provides:
|
||||
> ⚠️ **Critical:** The TQMa6UL machines are **only** available in the `mainline`
|
||||
> config template. The `imx` config does NOT include this board.
|
||||
|
||||
## Distro Selection
|
||||
|
||||
The BSP provides two main distribution families:
|
||||
|
||||
| Distro | C Library | Init | Qt | Use Case |
|
||||
|--------|-----------|------|----|----------|
|
||||
| **`dumpling-wayland`** | glibc | systemd | Qt6 ✅ | **Recommended** – full-featured, Qt/GUI support |
|
||||
| `spaetzle` | musl | busybox | ❌ blocked | Minimal/headless only |
|
||||
| `poky` | glibc | sysvinit | configurable | Yocto upstream default |
|
||||
|
||||
### Recommendation: `dumpling-wayland`
|
||||
|
||||
**Use `dumpling-wayland`** if you need:
|
||||
- Qt5/Qt6 graphical applications
|
||||
- glibc compatibility for third-party software
|
||||
- systemd, Wayland, WiFi, Bluetooth, OpenGL
|
||||
- Full `tq-image-qt6` support
|
||||
|
||||
> **Note:** `spaetzle` explicitly blocks Qt images:
|
||||
> `SKIP_RECIPE[tq-image-qt6] = "not buildable with spaetzle"`
|
||||
>
|
||||
> Qt5 is not included in the BSP layers. If needed, add `meta-qt5` manually.
|
||||
|
||||
### Both distros are 2038-safe
|
||||
|
||||
| Distro | C Library | time_t | 2038-safe? |
|
||||
|--------|-----------|--------|-----------|
|
||||
| `dumpling-wayland` | glibc 2.39 | 64-bit | ✅ |
|
||||
| `spaetzle` | musl 1.2+ | 64-bit | ✅ |
|
||||
|
||||
## Verified Build Configuration
|
||||
|
||||
*Tested 2026-03-01 on Debian 13 (Python 3.13):*
|
||||
|
||||
### spaetzle (minimal, musl)
|
||||
|
||||
```
|
||||
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
|
||||
### dumpling-wayland (full, glibc) – recommended
|
||||
|
||||
| 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 |
|
||||
```bash
|
||||
# Setup with dumpling-wayland instead:
|
||||
export ACCEPT_FSL_EULA=1
|
||||
export MACHINE=tqma6ul-multi-mba6ulx
|
||||
. ./setup-environment build_ut mainline
|
||||
# Edit conf/local.conf:
|
||||
# DISTRO = "dumpling-wayland"
|
||||
# ACCEPT_FSL_EULA = "1"
|
||||
```
|
||||
|
||||
> **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).
|
||||
Expected output:
|
||||
```
|
||||
TARGET_SYS = arm-tq-linux-gnueabi
|
||||
DISTRO = dumpling-wayland
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Prerequisites (Debian 13 / Ubuntu 22.04+)
|
||||
|
||||
```bash
|
||||
sudo apt-get install -y \
|
||||
gawk wget git diffstat unzip texinfo gcc build-essential \
|
||||
chrpath socat cpio python3 python3-pip python3-pexpect \
|
||||
xz-utils debianutils iputils-ping python3-git python3-jinja2 \
|
||||
python3-subunit zstd liblz4-tool file locales libacl1-dev \
|
||||
lz4 python3-websockets
|
||||
```
|
||||
|
||||
### 2. Clone & Setup
|
||||
|
||||
```bash
|
||||
mkdir -p ~/UT && cd ~/UT
|
||||
git clone --recurse-submodules https://github.com/tq-systems/ci-meta-tq.git
|
||||
cd ci-meta-tq
|
||||
|
||||
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
|
||||
|
||||
# For Qt/GUI applications, switch to dumpling-wayland:
|
||||
# echo 'DISTRO = "dumpling-wayland"' >> build_ut/conf/local.conf
|
||||
```
|
||||
|
||||
### 3. Optional: Redirect Storage
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.yocto
|
||||
cat > ~/.yocto/site.conf << 'EOF'
|
||||
DL_DIR ?= "/srv/yocto/downloads"
|
||||
SSTATE_DIR ?= "/srv/yocto/sstate-cache"
|
||||
EOF
|
||||
```
|
||||
|
||||
### 4. Fetch & Build
|
||||
|
||||
```bash
|
||||
# Fetch all sources (for mirror creation)
|
||||
bitbake tq-image-small-debug --runall=fetch
|
||||
|
||||
# Build
|
||||
bitbake tq-image-small-debug
|
||||
|
||||
# Or with dumpling-wayland: build Qt6 image
|
||||
# bitbake tq-image-qt6
|
||||
```
|
||||
|
||||
## Available Images
|
||||
|
||||
| Image | spaetzle | dumpling-wayland | Description |
|
||||
|-------|----------|------------------|-------------|
|
||||
| `tq-image-small` | ✅ | ✅ | Minimal |
|
||||
| `tq-image-small-debug` | ✅ | ✅ | Minimal + debug |
|
||||
| `tq-image-generic` | ❌ | ✅ | Full-featured |
|
||||
| `tq-image-weston` | ❌ | ✅ | Wayland compositor |
|
||||
| `tq-image-qt6` | ❌ | ✅ | Qt6 demo image |
|
||||
| `core-image-minimal` | ✅ | ✅ | Yocto bare minimum |
|
||||
|
||||
## Documentation
|
||||
|
||||
@@ -77,32 +173,38 @@ TARGET_FPU = hard
|
||||
| [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 |
|
||||
| [License Table (CSV)](docs/03-license-analysis/UT-license-table.csv) | For import into spreadsheets |
|
||||
| [Air-Gapped Deployment](docs/04-deployment/corporate-network-deployment.md) | Offline build setup |
|
||||
|
||||
## Quick Start
|
||||
## Air-Gapped / Offline Deployment
|
||||
|
||||
```bash
|
||||
# 1. Clone
|
||||
git clone --recurse-submodules https://github.com/tq-systems/ci-meta-tq.git
|
||||
cd ci-meta-tq
|
||||
# 1. On connected machine: fetch all sources
|
||||
bitbake tq-image-qt6 --runall=fetch # or tq-image-small-debug
|
||||
|
||||
# 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
|
||||
# 2. Package the mirror
|
||||
tar czf yocto-mirror-tqma6ul.tar.gz -C /srv/yocto downloads/
|
||||
|
||||
# 3. Fetch (for mirror creation)
|
||||
bitbake tq-image-small-debug --runall=fetch
|
||||
|
||||
# 4. Build
|
||||
bitbake tq-image-small-debug
|
||||
# 3. On air-gapped machine: extract + configure
|
||||
tar xzf yocto-mirror-tqma6ul.tar.gz -C /srv/yocto/
|
||||
# Add to local.conf:
|
||||
# SOURCE_MIRROR_URL = "file:///srv/yocto/downloads/"
|
||||
# INHERIT += "own-mirrors"
|
||||
# BB_NO_NETWORK = "1"
|
||||
```
|
||||
|
||||
## Known Issues
|
||||
|
||||
| Issue | Severity | Notes |
|
||||
|-------|----------|-------|
|
||||
| Python 3.13 fork() warnings | Cosmetic | Does not affect build |
|
||||
| Debian 13 not validated | Cosmetic | Build works correctly |
|
||||
| `spaetzle` blocks Qt/Weston images | By design | Use `dumpling-wayland` |
|
||||
|
||||
## References
|
||||
|
||||
- [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)
|
||||
- [glibc Y2038 Design](https://sourceware.org/glibc/wiki/Y2038ProofnessDesign)
|
||||
|
||||
Reference in New Issue
Block a user