Files
shturman/docs/contracts/hardware.md
T
kk0t9 231a64300d docs(domain A): v2 после adversarial-ревью (24 находки) + кросс-док
Существенная переработка base-system по итогам multi-agent ревью:
- A/B-единица = весь boot-юнит (kernel+dtb+initramfs+rootfs) на слот; загрузчик вне A/B
- bootcount/bootlimit + mark-good (Shell-кадр) — иначе откат не срабатывает
- overlay upper/work на tmpfs; персист только через /data
- ФС /data: f2fs(рек)/ext4 + power-safe mount + durable-write (fsync/rename)
- at-rest шифрование /data (fscrypt, eFuse-bound, v4)
- watchdog: SoC+MCU разведены, вооружён в boot-окне, единственный владелец
- boot-порядок исправлен под architecture §6 (splash в Stage 0, ядро в Stage 1)
- secure boot = OTP-eFuse необратим + key-mgmt (не «мягкий переключатель»)
- НОВОЕ: время (RTC/NTP/GPS, TLS-gating), память (zram/OOM/cgroup), логи
  (journald volatile + критичное в /data + pstore), first-boot, factory-reset, локаль
- OTA: A=механизм/подпись, L=канал; verified-boot в бюджете boot; SD-тир; образ v0≠v4

Кросс-док: roadmap (образ v4 = флешируемый релиз), hardware (тепло/eMMC  резолв),
security-privacy (at-rest шифрование как открытый→направлен в A §3).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 21:12:35 +03:00

114 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Контракт: железо и board-support
> Целевой таргет, топология питания, периферия — и **HAL/BSP** для портирования под
> другое железо/авто (то самое «API для автопроизводителей/автолюбителей» из vision).
Статус: **v1 (на ревью).**
Связано с: [architecture.md](../architecture.md) · [dev-environment.md](../dev-environment.md) · [data-model.md](data-model.md) (§7 DBC) · [security-privacy.md](security-privacy.md) (якорь доверия) · домены A/B/E/J/K
---
## 1. Целевой SoC
**RK3588 / RK3588S класс, 816 ГБ RAM.** Почему: приличная mainline-Linux-поддержка,
Panfrost GPU, мощности хватает на плавный UI и **локальную мелкую LLM**; это же класс
реальных автоголов.
## 2. Хранилище
- **eMMC** — rootfs, **read-only**.
- **Раздел `/data`** (SD/eMMC) — read-write, **журналируемый**.
- Прямое следствие power-safe (принцип #5): запись только в `/data`.
## 3. Питание (критично) — power-safe by design
- **Управляемый power-path:** питание устройства коммутируется по зажиганию.
- **Детект ACC/зажигания** — через GPIO (12 В → level-shift).
- **Автомобильная защита входа:** широкодиапазонный DC-DC + защита от **load-dump,
транзиентов и переплюсовки** (бортовые 12 В грязные — скачки до 40+ В).
- **Hold-up энергия** для graceful shutdown при резком пропадании 12 В.
- **Secure boot** (verified boot RK3588) — **якорь доверия first-party** (из
[security-privacy.md](security-privacy.md): first-party = вшит в подписанный образ).
Подпись OTA — домен A.
🟡 **Выбор hold-up механизма:**
- **(рек.) MCU-копилот** — маленький always-on МК: мониторит зажигание, сигналит SoC
«выключайся» по ACC-off, держит watchdog, управляет power-sequencing и sleep/wake.
+ конденсатор/supercap на пару секунд для флаша и размонтирования.
- **(проще)** только supercap — буфер энергии без логики (детект ACC — на SoC-GPIO).
Рекомендую MCU-копилот: он же закрывает watchdog и пробуждение. (Прошивка МК — домен B.)
## 4. Периферия
| Узел | Старт | Прод / позже |
|------|-------|--------------|
| **Дисплей** | HDMI + USB-тачскрин | MIPI-DSI / LVDS панель |
| **CAN/OBD** | ELM327 (USB/BT) | нативный CAN-трансивер → **SocketCAN** |
| **GPS** | USB/UART, NMEA | — |
| **Связь** | USB-модем (ModemManager) / Wi-Fi | — |
| **Аудио** | I2S codec + усилитель | — |
| **Микрофон** | USB **mic-массив** (wake-word, шумоподавление) | — |
| **Камеры** | задняя (CVBS capture-чип + драйвер, фаза 2) | dashcam / surround (задел, домен J) |
| **Мультируль** | кнопки руля: чтение с CAN **или** ADC (резистивная лесенка) | — |
**Два пути чтения и точный смысл «read-only»:**
- **Пассивный сниффинг (listen-only):** CAN-контроллер в silent-режиме — физически
не передаёт и не шлёт ACK; читаем broadcast-кадры машины (нужен DBC). Ноль TX.
- **OBD-II поллинг:** чтобы прочитать DTC и PID, протокол **требует отправить
кадр-запрос** (Mode 01/03/07/09). Это НЕ listen-only — мы передаём, но **только
стандартные диагностические read-запросы**.
**Red-line (принцип #2):** запрещены **управляющие/actuator-команды, запись в ECU,
сброс DTC (Mode 04), UDS-write** — любые *state-changing* передачи. Безобидные
read-запросы OBD-II разрешены (без них не прочитать ошибки). Чистый listen-only —
только для пассивного пути.
## 5. HAL / board-support (портирование)
**HAL абстрагирует железо-специфичное**, чтобы платформа переносилась на другие
платы/авто:
- Power/зажигание (карта GPIO + протокол MCU-копилота).
- CAN (контроллер + listen-only).
- Дисплей (тип панели + тач), аудио (codec/усилитель/маршрутизация).
- GPS-источник, захват камер, карта ввода мультируля.
**BSP (board-support package)** = device tree (overlay) + конфиг HAL + **per-vehicle
DBC/маппинг сигналов** (см. [data-model.md](data-model.md) §7).
**Порт = новый BSP.** Это и есть «API под конкретное железо/авто» из vision:
автопроизводитель/энтузиаст поставляет BSP, ядро не трогается.
## 6. Первый таргет vs портируемость
- **Один reference-таргет доводим end-to-end** (vision: не «любое железо из коробки»).
Портируемость — силами других через BSP/HAL.
- 🟡 **Выбор конкретной платы — отложен** (решение по доступности/цене). Кандидаты:
Radxa Rock 5B / 5B+, Orange Pi 5 / 5 Plus, Khadas Edge2 — критерии: mainline-поддержка,
доступность (в т.ч. в РФ), цена, IO (CAN-способные пины).
---
## Открытые вопросы (→ роутинг)
- 🟡 **Выбор reference-платы** — procurement-решение (доступность/цена в РФ). → отдельно.
- ◻️ **Прошивка MCU-копилота** (детект ACC, sequencing, watchdog, протокол к SoC). → домен B.
- ◻️ **Ранний путь задней камеры** (Stage 0 boot) — аппаратная сторона. → домен J + B.
- 🟡 **Подписанные OTA** (вторая половина цепочки доверия; secure boot закрыт здесь). → домен A.
-**Тепловой режим** → резолв в [a-base-system.md](../domains/a-base-system.md) §10 (мониторинг SoC + throttling; радиатор/корпус — hardware).
-**Износ eMMC/SD** → резолв в [a-base-system.md](../domains/a-base-system.md) §9–§10 (journald volatile, tmpfs, zram вместо swap, write-minimization).
---
## Журнал решений (hardware)
| Решение | Выбор | Дата |
|---------|-------|------|
| SoC | RK3588/RK3588S класс, 816 ГБ | 2026-06-16 |
| Хранилище | eMMC RO rootfs + журналируемый `/data` | 2026-06-16 |
| Hold-up питания | MCU-копилот + cap (🟡); supercap-only — проще | 2026-06-16 |
| CAN | пассивный listen-only + OBD read-запросы (без state-changing TX); ELM327 на старте | 2026-06-16 |
| Доверие | secure boot анкорит first-party; подпись OTA — домен A | 2026-06-16 |
| Портируемость | HAL + BSP; один reference-таргет first-party | 2026-06-16 |