Files
trail-mate/docs/engineering/linux-rtc-integration.md
T
Trail Mate Dev 6e613e382e Add CM0 Linux support and share device services across platforms
Compose the CM0 fullscreen application and standard Debian package, align the
Cardputer Zero shell, and share protocol, configuration, audio and storage
services with embedded targets through existing platform seams.

Add the paginated on-device TMAP creator using Center's published producer,
private workspace recovery and direct keyboard shortcuts. Preserve unfinished
management work behind its existing opt-in capability.

Include native, ARM and shared-core regression fixtures, integration records,
packaging helpers and dependency/license updates. Keep local build trees,
device credentials, produced packages and validation logs outside version control.

Validation before integration: ESP stack hygiene, Reticulum scope guard, staged
whitespace checks and GitNexus scope audit. Prior device/build evidence and
remaining hardware/package boundaries are recorded in the acceptance documents.
2026-10-29 10:29:29 +08:00

3.8 KiB

Linux hardware RTC integration

Linux RTCs are discovered through their standard sysfs class, without assuming rtc0, a chip model or an I2C bus number. The monitor chooses an explicit TRAIL_MATE_RTC_NAME match, the unique kernel hctosys clock, or a single RTC. Ambiguous selection fails. since_epoch must be readable and valid; a registered device with an oscillator/time error is not reported ready. Reads run on a monitor worker. platform::ui::device::rtc_ready() reads its cached, freshness- checked snapshot instead of returning a constant. Operating-system clock and timezone APIs remain independent of physical RTC presence.

The shared P4 interface and business services continue using the operating-system clock. A fitted RTC seeds this clock through the normal kernel hctosys path, so Agenda and message timestamps work before network time becomes available. There is no second application clock or Linux chip-specific logic in shared UI. The adapter does not write time, clear voltage-loss flags, configure alarms or grant application clock-setting capabilities.

CM0 RX8130 startup binding

The user confirmed that RX8130 and AHT20 are fitted. A directed read on the CM0 I2C controller found RX8130 at 0x32 with valid UTC time. The current boot i2c-rtc overlay does not expose an rx8130 parameter, despite the config line requesting it. Both vendor and mainline drivers are installed. Explicit loading of the existing mainline rtc_ds1307 driver and registering rx8130 created the standard RTC class; kernel logs confirmed hctosys, and hardware/system UTC agreed. No kernel binary or display driver was replaced.

The CM0 deb includes an opt-in trailmate-cm0-rtc.service. Its board-owned command selects the controller by device-tree identity, not the dynamic bus number. The generic registration helper loads an existing kernel driver, validates the client identity and requires a readable RTC class. An existing healthy client is reused; its time is not rewritten by the helper. Kernel registration can set system UTC from the RTC through hctosys. This is intentional clock restoration, not an application-set-time test. A clock with invalid contents requires administrator initialization; the helper never substitutes a fabricated date.

On a CM0 with this RTC fitted, activate the packaged unit:

sudo systemctl enable --now trailmate-cm0-rtc.service
systemctl status trailmate-cm0-rtc.service

The service runs before sysinit.target and time-set.target, after local filesystems and module loading. It is not enabled automatically for every CM0, because optional hardware differs between devices. Package upgrades reload unit metadata without re-registering a healthy clock. Removal disables the unit but does not unbind a clock already owned by the kernel during the current boot. Other Linux devices can provide their own controller/client configuration using the same helper; the C++ application does not contain CM0 wiring constants.

Verification scope

Native tests cover missing/invalid clocks, explicit selection, multiple clocks, kernel-source preference, removal and cache lifecycle. Registration fixtures cover adapter renumbering, duplicate adapter matches, wrong client identity, idempotency and invalid clock contents. Real-device boot persistence and final packaged execution must be recorded in the CM0 hardware ledger. Reboot testing does not prove coin-cell retention after removing all main power. Alarm/wakeup behavior is not established by this timekeeping integration.

AHT20 is fitted, but the user explicitly excluded temperature/humidity collection on 21 October 2026. Earlier directed reads at 0x38 failed on the two inspected controllers; no further AHT20 diagnosis or integration is required for this task. This scope decision does not affect the completed RX8130 timekeeping integration.