hardware:tbox
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| hardware:tbox [2026/08/10 01:54] – external edit 127.0.0.1 | hardware:tbox [2026/08/12 13:37] (current) – [Remote preconditioning is in the firmware] steini | ||
|---|---|---|---|
| Line 63: | Line 63: | ||
| the general-purpose computer and the live CAN bus — the same pattern the head unit uses with its | the general-purpose computer and the live CAN bus — the same pattern the head unit uses with its | ||
| [[hardware: | [[hardware: | ||
| + | |||
| + | That " | ||
| + | presents up to Linux as a SocketCAN device (**'' | ||
| + | ''/ | ||
| + | **not** a native CAN controller wired to the car — it is this SPI link to the MCU. A common misreading | ||
| + | is that the TBox reaches CAN over three separate interfaces (SPI, '' | ||
| + | SPI and '' | ||
| + | **MCU control/ | ||
| ===== CAN transceiver — NXP TJA1042 ===== | ===== CAN transceiver — NXP TJA1042 ===== | ||
| Line 129: | Line 137: | ||
| connector on the right edge is the **vehicle harness** (power, ignition, CAN, audio for eCall). Exact | connector on the right edge is the **vehicle harness** (power, ignition, CAN, audio for eCall). Exact | ||
| pinout not yet traced. | pinout not yet traced. | ||
| + | |||
| + | ===== Operating system & software ===== | ||
| + | |||
| + | The Quectel AG35's application processor runs **embedded Linux** (the standard vendor build). The telematics application — the OEM-cloud client, the OTA/FOTA agent, the eCall/bCall logic and the CAN command builder — is a single userspace program on that Linux. The always-on **S32K144 MCU** is the only part wired to the vehicle CAN; the Linux side reaches it over an internal serial link and hands it commands. Because it is an ordinary Linux system it is fully inspectable — and, as it turns out, **wide open**. | ||
| + | |||
| + | ===== Getting a root shell ===== | ||
| + | |||
| + | Several independent routes exist, from fully remote (over the car's own internal USB link) to bench-level. **None require an exploit** — the doors are already open. Root here means root on the // | ||
| + | |||
| + | ==== Remote, over the USB link (no disassembly) ==== | ||
| + | |||
| + | From the head unit, which is the '' | ||
| + | |||
| + | * **FTP (port 21) — full root read/ | ||
| + | * One limitation: that FTP daemon **refuses to write device nodes** (only regular files) — so it cannot poke the modem' | ||
| + | * The other open ports on that link are **50000** (the telephony/ | ||
| + | |||
| + | ==== Persistent doors you can open with a single config edit ==== | ||
| + | |||
| + | Two changes need only a config-file write over the FTP root — no code execution — and take effect on the next cold boot: | ||
| + | |||
| + | * **Add ADB to the USB gadget.** The list of USB interfaces the TBox presents is read from a plain text file; adding '' | ||
| + | * **Bring up the built-in Wi-Fi AP.** The mobile-AP config disables Wi-Fi and the access point at boot with two flags; enabling both brings up the pre-configured AP, after which FTP (and anything else) is reachable **directly over Wi-Fi**, with no head-unit relay. | ||
| + | |||
| + | ==== Bench / physical access ==== | ||
| + | |||
| + | * **Serial console (UART) — guaranteed root.** The board' | ||
| + | * **ADB over USB**, once enabled as above. | ||
| + | |||
| + | **Important — cold boot vs. deep sleep.** The MCU distinguishes a **deep sleep** (suspend-to-RAM: | ||
| + | toggling the **rear fog light 4×** is observed to reboot the TBox — the cluster briefly shows "Kein | ||
| + | Netz". Whether that restart is a full cold boot that re-reads config, or only a warm restart, is | ||
| + | **unconfirmed**.)// | ||
| + | |||
| + | ===== Remote preconditioning is in the firmware ===== | ||
| + | |||
| + | |||
| + | The telematics app contains the remote-control machinery: routines to **check preconditions**, | ||
| + | |||
| + | * **Trigger is cloud-only.** It fires on a command field delivered by the (dead) cloud; **no local trigger exists in the code**. | ||
| + | * **Pre-check: | ||
| + | * **How the command reaches the car:** the TBox sends a **security-gated UDS routine over the diagnostic CAN**, and the MCU relays those bytes to the bus. The only frame the TBox emits on its own is a network-management **wake frame**. | ||
| + | |||
| + | The MCU defines a **remote CAN-message descriptor** carrying //which bus//, //data source//, a **" | ||
| + | |||
| + | **What that means for reviving preconditioning: | ||
| + | |||
| + | ===== The on-board CAN database ===== | ||
| + | |||
| + | The TBox filesystem carries the vehicle' | ||
| + | |||
| + | ===== The TBox ↔ MCU interface (SCOM) ===== | ||
| + | |||
| + | The Linux side talks to the S32K144 MCU over an internal **SCOM** (serial-comms) request/ | ||
| + | protocol ('' | ||
| + | issues a set of get/set operations. What can be identified from the firmware: | ||
| + | |||
| + | ^ Operation ^ Dir ^ Parameter ^ Purpose ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | Persistent config items ('' | ||
| + | '' | ||
| + | |||
| + | //These are the operations identifiable from firmware strings; the SCOM protocol' | ||
| + | and full parameter encodings are not fully reverse-engineered, | ||
| + | complete spec. The '' | ||
| + | BMS_*, ABM_*, AC_*, VCU_*, …), which holds the full signal list — far more than can be tabled here.// | ||
| + | |||
| + | ===== The OEM cloud is dead ===== | ||
| + | |||
| + | The consumer-telematics backend is gone: the cloud server does not respond and its ports are closed, and the EU authentication endpoints point at **torn-down load-balancers**. (The separate // | ||
| ===== Why the TBox matters to this project ===== | ===== Why the TBox matters to this project ===== | ||
hardware/tbox.1786319693.txt.gz · Last modified: by 127.0.0.1