Станция Макс — ADB Max¶
Сервисная отладка и выполнение административных команд на Яндекс Станции Макс (yandexstation_2,
YNDX-0008) через стандартный сетевой сеанс ADB без изменения системных разделов.
Особенности платформы¶
На Станции Макс установлена операционная система Android TV (YaOS_X, Android 9).
В отличие от моделей на Buildroot, здесь действует заводская защита целостности
(Android Verified Boot, dm-verity). Системный сервис adbd собран в режиме production,
а команда adb root возвращает adbd cannot run as root in production builds.
Обычный DNS-метод на Максе неприменим, так как служебные скрипты activate_adb.sh и
onboot.sh на этой платформе отсутствуют.
Здесь используется отдельный сервисный подход — выполнение команд с повышенными привилегиями в оперативной памяти через существующую сессию ADB.
Подробные исходные материалы проекта доступны в репозитории автора.
Что понадобится¶
- Станция Макс на прошивке
PPR1.180610.011.20220415, ядро4.9.113-g985a1e6b; - Сетевой доступ к порту 5555;
- Компьютер с установленной утилитой
adb; - Android NDK (проверено на r26d) и Python 3 — для сборки вспомогательной утилиты.
Прошивку не обновляйте до и во время работы: при смене версии ядра системные адреса меняются.
1. Проверка версии прошивки¶
Параметры утилиты рассчитаны на конкретную сборку системы. Перед началом проверьте свойства устройства:
Ожидаемый ответ:
Последнее поле — номер сборки, и он у ревизий разный: на Станции Макс
снят 5000000896. Важна часть PPR1.180610.011: утилита рассчитана на неё.
Если отпечаток сборки отличается — остановитесь. Параметры потребуется пересчитать под вашу версию по инструкции в репозитории проекта.
Также зафиксируйте текущие параметры окружения:
adb shell getprop ro.product.device # yandexstation_2
adb shell uname -a # 4.9.113-g985a1e6b
adb shell id # uid=2000(shell)
adb shell getenforce # Enforcing
2. Подключение по ADB¶
Подключение выполняется стандартным способом:
adb connect <IP-колонки>:5555
adb devices # статус: <IP-колонки>:5555 device
adb shell id # uid=2000(shell)
Особенности среды:
- Каталог /data/local/tmp доступен для записи (системный /tmp закрыт).
- Системный журнал dmesg закрыт настройкой kernel.dmesg_restrict.
3. Сборка служебного модуля¶
Склонируйте исходный код утилиты и запустите сборку:
git clone https://github.com/amirilivice/yandex-station-2-s905x2-root
cd yandex-station-2-s905x2-root
python tools/build.py /path/to/android-ndk-r26d
Сборщик компилирует бинарный файл для архитектуры ARM.
Команда, которую нужно выполнить с системными правами, указывается при сборке:
python tools/build.py /path/to/ndk \
--payload "id > /data/local/tmp/who.txt; getenforce >> /data/local/tmp/who.txt"
По умолчанию без флага --payload выполняется диагностическая команда: вывод идентификатора,
проверка состояния защиты и возврат настроек в исходное состояние.
4. Запуск утилиты на устройстве¶
Запуск через автоматизированный скрипт:
Или вручную через консоль ADB:
adb push src/reader4 /data/local/tmp/app_tool
adb shell "chmod 755 /data/local/tmp/app_tool"
adb shell "rm -f /data/local/tmp/tool.log; \
timeout 240 /data/local/tmp/app_tool > /data/local/tmp/tool.log 2>&1; \
echo RUN_DONE; id; getenforce"
Правила запуска:
1. Перед запуском проверяйте uptime — устройство должно проработать после старта
не менее трёх минут.
2. Не запускайте утилиту несколько раз подряд без перезагрузки системы.
5. Проверка работы¶
Проверьте лог выполнения:
При корректном выполнении в логе отобразится выполнение назначенной команды от имени администратора.
Особенности и ограничения¶
- Действие в рамках одной команды: повышенные права предоставляются только для процесса,
запущенного утилитой. После его завершения консоль остаётся в обычном режиме
uid=2000(shell). - Защита накопителя: разделы
/systemи/vendorзащищены проверками целостности dm-verity на уровне ядра и загрузчика. Запись на системные разделы не сохраняется. - Временный характер: все изменения происходят исключительно в оперативной памяти и не затрагивают постоянную прошивку.
Возврат в исходное состояние¶
Поскольку утилита не производит записи в системные разделы, обычная перезагрузка возвращает колонку в стандартный заводской режим:
После перезагрузки статус системы возвращается в штатное состояние:
Очистите временные файлы в каталоге:
Подводные камни¶
- Перед запуском проверяйте время непрерывной работы (
uptime). - Не запускайте процедуру повторно без предварительной перезагрузки устройства.
- Не используйте исполняемые файлы, собранные под другие версии ядра или устройства.
Отличия от DNS-метода¶
| Параметр | DNS-метод | Метод Станции Макс |
|---|---|---|
| Модели | Лайт, Мини, Миди, Станция 2 | Станция Макс (YNDX-0008) |
| Платформа | Buildroot / quasar | Android 9 (YaOS_X) |
| Принцип | Ответ облачной синхронизации | Локальная сервисная утилита |
| Результат | Сетевой ADB постоянно | Выполнение команд в сессии ADB |
| Заводской сброс | Требуется | Не требуется |
| Изменение разделов | Маркеры в /data/quasar |
Не производится |
| После перезагрузки | Сохраняется | Возврат в штатный режим |