Перейти к основному содержимому

Как собрать киоск и как попасть на плату

Коротко и по делу. Полные инструкции по образам и заливке живут в репозитории прошивки (docs/BUILD-PLAN.md, docs/FLASH-LOG.md, docs/HANDOVER.md) — здесь только то, что нужно разработчику приложения, и предупреждения, которые дешевле прочитать заранее.

осторожно
Перед сборкой боевого APK пройдите NATIVE-GATE.md

Нативная заливка одна: всё, чего в APK не окажется, будет стоить отдельной поездки к постамату. Список обязательного и проверки «до выезда, а не на месте» — в NATIVE-GATE.md в корне репозитория. Порядок дня установки — в COMMISSIONING.md.

Сборка APK

Expo Go не подойдёт — нужны нативные модули.

cd apps/kiosk
npm install
npx expo prebuild --platform android --clean
cd android && ./gradlew assembleRelease
# APK: android/app/build/outputs/apk/release/app-release.apk
На машине 8 ГБ памяти

Gradle нельзя запускать одновременно со сборкой образа в Docker и с поднятым эмулятором. Симптомы нехватки памяти выглядят как что угодно, только не как нехватка памяти: таймауты, «упавшие» тесты, отвалившийся adb, пустые экраны.

Каталог android/ порождается prebuild и при --clean затирается. Всё, что правит Android-проект, должно жить в plugins/withHomeLauncher.js — иначе правка не переживёт следующую сборку. Плагин делает четыре вещи: категории рабочего стола, цвет фона заставки, тёмный фон окна (иначе между загрузочной анимацией и киоском мелькает белая вспышка) и сборку только под arm64 — иначе APK раздувается вдвое за счёт мёртвого нативного кода под чужие архитектуры.

Запекание в образ

APK кладётся в образ как /system/priv-app/Postamat/Postamat.apk скриптом наложения из репозитория прошивки. Скрипт берёт свежую сборку, а если её нет — сохранённую копию.

Почему именно системная установка, а не adb install, — сторожевой таймер.

Заливка на плату

Единственный рабочий путь:

клеммник UART → консоль U-Boot → режим внешнего диска (ums) → запись с Mac → сверка → reset

Что важно знать, даже если заливать будете не вы:

  • Обратное чтение и сверка контрольной суммы — обязательны. Без этого «залито» означает «команда отработала», а не «на плате то, что мы писали».
  • 🔴 Сторожевой таймер тикает и во время прошивки. Микроконтроллеру безразлично, что плата стоит в загрузчике: окно — около 295 секунд с последнего кормления, а запись большого раздела занимает ~140 секунд. Всякая пауза перед началом записи это окно съедает. Дважды плата уходила в сброс прямо посреди прошивки, и это выглядело как обрыв записи или плохой кабель. Лечится скриптом заливки, который кормит таймер и пишет без пауз.
  • ⚠️ Только чистый USB 2.0. Порт Type-C платы ограничен High Speed; USB-3 хаб даёт ошибку драйвера, и это выглядит как неисправность платы.
  • Проверять результат только после полной перезагрузки, а не в той же сессии загрузчика.

🔴 Порядок при переходе на кормление по пингу

Если в этой же заливке меняется строка сервиса сторожевого таймера, порядок жёсткий: сперва APK, умеющий пинговать, и только потом строка сервиса с --require-ping. Наоборот — плата уходит в перезагрузку каждые пять минут, и в логах ядра не будет ничего. Разбор — сторожевой таймер.

Стоп-правила железа

Их нарушение стоит платы, а не времени. Полный список — в репозитории прошивки, здесь напоминание для тех, кто окажется рядом с устройством:

  • 🔴 не заменять ядро. Разбор параметров панели и драйвер сторожевого микроконтроллера есть только в скомпилированном стоковом ядре, исходников нет, вендор отказал;
  • 🔴 не трогать загрузчик и разделы с ключами и калибровкой панели — восстановлению не подлежат, и именно загрузчик даёт единственный путь из кирпича;
  • 🔴 не читать EEPROM панели мелкими блоками — вендорский обработчик роняет плату немедленной перезагрузкой; в этом EEPROM лежит единственный носитель «личности» панели, без неё экран не восстановить;
  • 🔴 не менять напряжения и параметры панели — несовпадение с железом означает порчу выводов;
  • золотой бэкап не перезаписывать, сверять по контрольным суммам;
  • перед любой разрушающей операцией — пауза и подтверждение у владельца.

Ритм работы с платой

Правило проекта, выведенное дорогой ценой: одно изменение за раз, после каждого — полный лог консоли и проверка «панель + тач + замок открывается». Две правки в одной заливке означают, что при поломке неизвестно, какая из них виновата, — а следующая итерация стоит часа.