Как собрать киоск и как попасть на плату
Коротко и по делу. Полные инстр укции по образам и заливке живут в репозитории прошивки
(docs/BUILD-PLAN.md, docs/FLASH-LOG.md, docs/HANDOVER.md) — здесь только то, что нужно
разработчику приложения, и предупреждения, которые дешевле прочитать заранее.
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
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 лежит единственный носитель «личности» панели, без неё экран не восстановить;
- 🔴 не менять напряжения и параметры панели — несовпадение с железом означает порчу выводов;
- золотой бэкап не перезаписывать, сверять по контрольным суммам;
- перед любой разрушающей операцией — пауза и подтверждение у владельца.
Ритм работы с платой
Правило проекта, выведенное дорогой ценой: одно изменение за раз, после каждого — полный лог консоли и проверка «панель + тач + замок открывается». Две правки в одной заливке означают, что при поломке неизвестно, какая из них виновата, — а следующая итерация стоит часа.