Станция 3 (Orion)¶
Розничное имя — Яндекс Станция 3; кодовое имя — Orion (device-tree
Yandex Orion PVT, yandex,orion-pvt / yandex,orion, amlogic, a5,
amlogic-dt-id = "a5_orion_pvt"). В mDNS — platform=orion.
Это тот же SoC, что у Миди (Amlogic A5, ядро 5.4, Buildroot 2023.11.1), но другая плата: ~2 ГБ ОЗУ, кольцо на 36 RGB, эмбиент-подсветка, монохромный LED-дисплей 21×12, ультразвук на отдельном TDM, четыре усилителя ACM8625S. Не Android (Макс) и не AXG.
Прошивка — Buildroot + quasar/maind, приёмы из
Как это устроено применимы (ядро 5.4, eMMC).
Корень смонтирован ro (root=PARTLABEL=system).
Снимок: hostname Yandex-Station3, quasar 3.21,
BUILD_ID=3322101745, ядро собрано 23.08.2025,
U-Boot 01.01.250823.213609. Совпадает с заводским User-Agent
orion/0.13.1.36.3322101745.20250823.factory-13.
Платформа в двух словах¶
| Что | Значение |
|---|---|
| SoC | Amlogic A5 (amlogic, a5, Hardware: Amlogic) |
| CPU | 4× Cortex-A55 (0xd05, variant 0x2), 100 МГц … 2.016 ГГц |
| ISA | ARMv8.2 (atomics, fphp, asimdhp, asimddp, lrcpc, dcpop, aes/sha/crc32) |
| ОЗУ | ~1.93 ГБ (MemTotal 2027672 kB) — заметно больше, чем у Миди (~980 МБ) |
| Ядро | Linux 5.4.180 aarch64, #2 SMP PREEMPT, сборка 23.08.2025 |
| Userspace | Buildroot 2023.11.1, glibc 2.36 |
| Хранилище | eMMC (~7.1 ГБ, mmcblk0 7471104 блоков). /proc/mtd пуст |
| NPU | Vivante VIPNano-Q (GC9000, model 0x9000 rev 0x9002), ~800 МГц, galcore 6.4.8.7.7.1.1, класс /sys/class/npu (детали) |
| DSP | HiFi4 (hifi4dsp0), есть узел dolby_fw |
| Усилители | 4× ACM8625S: 1× ультразвук (2-0x2c) + 3× колонки (3-0x2c/2d/2e) |
| Микрофоны | PDM (PDM-dummy-mics); LOOPBACK 14 каналов @ 96 кГц (раскладка не снималась) |
| Индикация | кольцо 36 RGB + эмбиент 12 зон × a/b, RGBW + дисплей 21×12 |
| Питание | USB-C PD (husb238 + ya_pd_controllers), PDO 20/15/12/9/5 В |
| Умный дом | Zigbee + Matter + WiFi (iot.providers); Zigbee NCP на /dev/ttyS2 |
| Радио | Unisoc (vlsicomm + aml_sdio + sdio_bt), BT-пульт (input_btrcu); в образе есть и драйвер Amlogic w2l |
| Безопасность | SELinux enforcing, JTAG disable, rh_unlock=0, verified boot green, OP-TEE + keymaster (/dev/keymaster_svc) |
Что работает¶
| Что | Состояние | Где описано |
|---|---|---|
| Root и SSH | работает (на заводской factory-13) |
подмена DNS |
| USB Host (OTG) | не проверялось | — |
| AirPlay | не проверялось | — |
| Spotify Connect | не проверялось | — |
| Плеер как Bluetooth-источник | не проверялось | — |
| Свои звуки | не проверялось | — |
| Обработанный микрофон | не проверялось | — |
| Подсветка | не проверялось | — |
| YAM | не проверялось | — |
| Своя LLM | не проверялось | — |
Получение root¶
Штатный DNS-метод на orion работает: сброс к заводским
настройкам, DNS на сервер разблокировки — и сетевой ADB поднимается, как на других
Amlogic-моделях (проверено на заводской factory-13 от 23.08.2025). Ограничения
по использованию своего сервера обновлений описаны ниже.
Чем отличается¶
- Тот же A5 / 5.4 / Buildroot 2023.11.1 / eMMC, другая DT:
a5_orion_pvt, неa5_cucumber_dvt2. - Вдвое больше ОЗУ (~2 ГБ vs ~1 ГБ).
- Кольцо 36 диодов (
orion:*:ring0..35), не 24cucumber:*. - Нет sysfs-циферблата
*:white:clock-*. Вместо него framebuffer/dev/fb1(YNDX LED screen, 21×12, 24 bpp) — 252 пикселя, как в розничных ТТХ. - Эмбиент:
/dev/fb0(ambilight, 12×1, 48 bpp) и sysfsorion:{red,green,blue,white}:ambilight{0..11}{a,b}. - Звук: колонки на
hw:0,1(TDM-B), ультразвук наhw:0,0(TDM-A). На Миди динамики на TDM-A. - Усилители ACM8625S, не FS2105. В микшере полосы
fr1/fr2/us. - LED-матрица дисплея — модуль
gowin_led_device(не только AW21036). - quasar:
quasar_launcher2+maind --platformd/--mediad/--loggerd/--telemetry/--fluent-bitd, плюсbegemotиbulbik(кольцо Алисы черезledfb-ring).
Свой сервер обновлений и сертификаты¶
А вот свой TLS-сервер обновлений вместо готового сервера колонка не принимает:
и самоподписанный сертификат, и легально выпущенный Let's Encrypt дают
tlsv1 alert unknown ca (48) — прошивка доверяет урезанному набору корневых CA.
Подмена без TLS работает только для scbh.yandex.net (отдаём настоящий 204).
Разведка и дампы — issue #24.
Одно другому не противоречит: готовый сервер разблокировки отвечает сертификатом от CA,
который есть в бандле прошивки, а свой сервер обновлений на компьютере — нет. Поэтому для своего
сервера нужен сертификат от CA из бандла; на Лайт 2 / Мини 3 (после 21.10.2026) этот корень
дописывают в бандл из factory mode — для orion такой путь не проверялся.
Разделы флеша¶
Как на Миди: узлы /dev/<имя>, MTD нет, root=PARTLABEL=system.
mmcblk0 ≈ 7.1 ГБ; boot-копии mmcblk0boot0/1, есть mmcblk0rpmb.
| Раздел | Устройство | Размер | Что внутри |
|---|---|---|---|
| bootloader | mmcblk0p1 /dev/bootloader |
4M | U-Boot; копии bootloader0/1 |
| reserved | mmcblk0p2 /dev/reserved |
64M | |
| cache | mmcblk0p3 /dev/cache |
— | узел есть |
| env | mmcblk0p4 /dev/env |
8M | U-Boot env |
| misc | mmcblk0p5 /dev/misc |
4M | |
| tee | mmcblk0p6 /dev/tee |
48M | ext4, /tee (ro) |
| aml_sysrecovery | mmcblk0p7 /dev/aml_sysrecovery |
1.5G | |
| boot | mmcblk0p8 /dev/boot |
64M | ядро |
| recovery | mmcblk0p9 /dev/recovery |
192M | |
| system | mmcblk0p10 /dev/system |
1G | rootfs ext4, / ro |
| ota | mmcblk0p11 /dev/ota |
1.5G | ext4, /ota (rw) |
| data | mmcblk0p12 /dev/data |
~2.6G | ext4, /data (rw) |
Монтируется: / ro, /tee ro, /ota и /data rw.
Размеры подтверждает DT-узел partitions (parts=8): boot 64M, recovery
192M, system 1G, tee 48M, misc 4M, ota 1.5G, aml_sysrecovery 1.5G,
data — остаток диска. Поле mask: 1 — обычный раздел, 2 — сохраняется при
обновлении (ota), 4 — data. Фиксированные bootloader/reserved/env/
cache в этот узел не входят — их создаёт прошивальщик Amlogic до таблицы.
Личные данные
Не публикуйте дампы data, ota, env, reserved, tee.
В cmdline есть androidboot.serialno; в /proc/cpuinfo — поле Serial.
Шина I2C и периферия¶
| Шина:адрес | Чип | Назначение |
|---|---|---|
0-0x12 |
AW93312 (aw933xx / key_aw933xx) |
ёмкостные кнопки |
0-0x34, 0-0x35, 0-0x36 |
AW21036 | LED-матрица |
0-0x51 |
PCF8563 | RTC |
0-0x52 |
24C02 | EEPROM |
0-0x53 |
LTR-308 (ltr308als01) |
датчик освещённости |
1-0x52 |
24C02 | EEPROM |
2-0x08 |
HUSB251 (DT-узел husb251@08, драйвер ya_pd) |
USB-C Power Delivery |
2-0x2c |
ACM8625S | Class-D — ультразвук (us) |
2-0x34, 2-0x35, 2-0x36 |
AW21036 | LED-матрица |
2-0x51 |
24C02 | EEPROM |
3-0x2c, 3-0x2d, 3-0x2e |
ACM8625S | Class-D — колонки (fr1/fr2) |
3-0x50 |
24C02 | EEPROM |
Контроллеры всех четырёх шин — в блоке APB4, по device-tree aliases:
| Шина | Контроллер (DT) | Устройства из DT |
|---|---|---|
i2c-0 |
apb4/i2c@66000 (0xfe066000) |
touch-sensor@12, led-controller@34/35/36, rtc@51, eeprom@52, light-sensor@53 |
i2c-1 |
apb4/i2c@68000 (0xfe068000) |
eeprom@52 |
i2c-2 |
apb4/i2c@6a000 (0xfe06a000) |
husb251@08, acm8625s@2c, led-controller@34/35/36, eeprom@51 |
i2c-3 |
apb4/i2c@6c000 (0xfe06c000) |
acm8625s@2c/2d/2e, eeprom@50 |
Узлы DT совпадают с таблицей выше. Нюанс: i2c-0 в дереве по умолчанию
disabled — S30top-board включает его рантайм-оверлеем
/boot/yandex-orion-i2c_top-overlay.dtb (после остановки AO-CPU через
/dev/ree2aocpu), поэтому /dev/i2c-0 появляется не сразу на старте.
Индикация¶
Все узлы в /sys/class/leds/ (на снимке 210 штук), префикс orion::
- Кольцо:
orion:{red,green,blue}:ring0..35— 36 RGB. Синхро:orion:ringA:sync,ringB:sync,ringC:sync. Триггер Алисы —ledfb-ring/ledfb-ring-sync(как на Миди, другой префикс и счёт). - Эмбиент:
orion:{red,green,blue,white}:ambilight{0..11}{a,b}— 12 зон, по два каналаa/b, RGB + белый. Синхро:orion:ambilightA/B/C:sync. - Дисплей: не через
*:clock-*, а framebuffer (модульgowin_led_device).
Framebuffers (yandex,ledfb / Gowin):
| Устройство | Имя | Размер | bpp | stride | Что это |
|---|---|---|---|---|---|
/dev/fb0 |
ambilight |
12×1 | 48 | 72 | эмбиент (широкий пиксель) |
/dev/fb1 |
YNDX LED screen |
21×12 | 24 | 63 | монохромный дисплей, 252 сегмента |
/dev/fb2 |
ring |
36×1 | 24 | 108 | кольцо |
Кольцо — отдельный узел верхнего уровня /ring-framebuffer (а не потомок
шины); тот же оверлей переводит его в status = "okay". Это согласуется с
quasar_led_ring (yandex,ledfb) как рутовым fb-узлом.
Запись brightness в sysfs кольца срывает триггер ledfb-ring у bulbik —
кольцо Алисы начинает мерцать, пока триггер не вернуть. Короткий оверлей
громкости: снять кадр /dev/fb2 (108 байт), нарисовать шкалу, через ~1.6 с
вернуть ledfb-ring и старый кадр.
Драйверы: leds_yandex_aw21036, quasar_led_ring, gowin_led_device.
Звук¶
ALSA card0 AML-AUGESOUND:
| PCM | Имя | Назначение |
|---|---|---|
hw:0,0 |
TDM-A-acm8625-ultrasonic |
ультразвук (playback+capture), усилитель 2-0x2c |
hw:0,1 |
TDM-B-acm8625-speakers |
динамики, 48 кГц в пользовательском тракте |
hw:0,2 |
PDM-dummy-mics |
микрофоны |
hw:0,3 |
LOOPBACK-A-dummy-loopback |
AEC; на снимке capture 14 ch, S16, 96 кГц |
Штатный PCM Алисы — speakers (dmix на hw:0,1). Ультразвук hw:0,0 для
музыки не использовать.
Параметры тракта (audiod / audiosender в quasar.cfg): 6 каналов
микрофонов (PDM), 7 каналов динамиков, захват 96 кГц → выход 16 кГц,
период 512, VQE type=yandex, preset=orion, споттер — модель
spotter_models/activation/alisa. Это и раскладывает 14-канальный LOOPBACK:
6× raw_mic_0..5 + 7× raw_spk_0..6 + vqe_0; разбор музыки — по
raw_spk_0 / raw_spk_1.
Усилители по ролям (из S42acm8625-settings, sysfs settings_file, конфиги
orion-acm8625-*):
| I2C | Роль | Конфиг |
|---|---|---|
2-0x2c |
ультразвук (us) |
orion-acm8625-us.cfg |
3-0x2c |
центр (center) |
orion-acm8625-center.cfg |
3-0x2d |
сабвуфер (woofer) |
orion-acm8625-woofer.cfg |
3-0x2e |
левый/правый (lr) |
orion-acm8625-lr.cfg |
Микшер: общий Master (его крутит и Алиса, и сторонний софт), плюс
Ultrasound, fr1/fr2/us Acm8625 AMP *, VAD, PDM *, Loopback *.
VAD: vad_keypad, устройство /dev/vad.
Вход¶
aw933xx(AW93312) — сенсорные кнопки:KEY_VOICECOMMAND(582),KEY_VOLUMEUP(115),KEY_VOLUMEDOWN(114).vad_keypad— VAD-клавиатура.mute(gpio-keys) — отключение микрофона (KEY_MUTE+SW_MUTE_DEVICE).input_btrcu— Bluetooth-пульт.
Zigbee¶
Модуль zigbee_control, прошивка /system/vendor/quasar/zigbee/gateway.ybl
(217 692 Б, сигнатура 25 a0 01 30), рядом http/. UART — /dev/ttyS2
(секция zigbee в quasar.cfg); по DT-aliases это /soc/serial@fe07c000.
DT-узел zigbee (compatible = yandex,zigbee-control) держит только линии
zb-reset-gpios и zb-boot-gpios (сброс чипа и вход в его загрузчик), данные —
по UART. Встроенный веб-интерфейс httpControl
выключен (порт 9233). Свой OTA-склад для Zigbee-устройств —
${DATA}/data/zigbee/ (ota.lmdb, лимит 6144 КБ, TTL 12 ч), БД сети
network.dat, устройств — device.lmdb. Модель чипа по дампу не определяется.
Умный дом в целом (iot.providers в quasar.cfg): включены Zigbee,
Matter (matter/paa CA-store, свой OTA-склад) и WiFi.
DVFS¶
Те же точки, что у Миди A5 (подтверждено cpu_opp_table0 в DT): 100, 250, 500,
667, 1000, 1200, 1404, 1500, 1608, 1704, 1800, 1920, 2016 МГц. Напряжение
держится 0.769 В до 1404 МГц, затем растёт до 1.009 В на 2016 МГц. CPU —
arm,cortex-a55. Термозона soc_thermal.
Ядро и модули¶
Загружены (снимок): aml_sdio, sdio_bt, vlsicomm, optee/optee_armtz,
key_aw933xx, ltr308als01, dtbocfg, gowin_led_device, zigbee_control,
quasar_pcba_ids, leds_yandex_aw21036, ya_pd_controllers, galcore,
quasar_led_ring, snd_soc_acm8625.
Есть /dev/hifi4dsp0, /dev/dolby_fw, /dev/unifykeys, /dev/galcore.
В extra/ лежат ещё w2l / w2l_comm / w2l_bt (Amlogic «11nac», прошивки
w2l/wifi_w2l_fw_{pcie,usb,sdio}.bin, USB VID 0x1B8E) и leds-aw2101x
(Awinic AW21012/AW21018) — на живом снимке не загружены.
Про радиомодуль: в DT узлы aml_wifi (amlogic, aml-wifi) и aml_bt
(amlogic, aml-bt) по шине SDIO (soc/sdio@fe088000, стек aml_sdio). То
есть дерево описывает combo-чип Amlogic, а не Unisoc; вывод про Unisoc
держится только на имени модуля vlsicomm — точную модель надо снимать по
SDIO-ID на живой колонке.
Из .config ядра (/proc/config.gz): подпись модулей выключена (нет
CONFIG_MODULE_SIG) — свои .ko грузятся свободно; CONFIG_IKCONFIG_PROC=y
(отсюда и сам конфиг), KALLSYMS=y, KASLR вкл, DM_VERITY в ядре есть.
Ядро — Amlogic BSP (CONFIG_AMLOGIC_GKI, CONFIG_AMLOGIC_ANDROIDP), тулчейн
Arm GNU 12.2. В DT есть и неиспользуемое ТВ-наследие BSP: видеодекодер
(vdec/vcodec_dec), DVB и ИК-блок (ir@8000 + meson-irblaster) — все со
status = disabled.
maind — мультибинарь (как busybox): quasar_client,
begemot_client_util, keymaster_proxy_app, led_util, metrics_collector
в /system/vendor/quasar/ — это симлинки на maind, а запускается он с
флагами --platformd / --mediad / --telemetry / --fluent-bitd /
--loggerd (см. launch.json).
NPU — Vivante VIPNano-Q¶
Блок, который обслуживает galcore, — это не 3D-GPU, а NPU: Vivante
VIPNano-Q (GC9000). Снято с живой колонки (на Orion путь к debugfs —
/sys/kernel/debug/galcore/, не gc):
поле (galcore/info, параметры модуля) |
значение |
|---|---|
model |
0x9000 |
revision |
0x9002 |
product |
0x5090001 |
eco |
0x4000000 |
версия galcore |
6.4.8.7.7.1.1 |
| адрес / IRQ | 0xfdb00000 (узел fdb00000.galcore), registerMemSize 128K, IRQ 19 |
clk (mc/sh) |
≈ 800 МГц; nanoqFreq 838 860 800 Гц (≈ 839 МГц) |
enableNN / userClusterMasks |
255 / 255 |
pdevCoreCount |
21,0,0,0 |
load (galcore/load) |
core0 22 % (держит maind) |
Что это именно NN-ядро, а не графика, подтверждает DT-узел galcore
(compatible = amlogic, galcore): clock-names = cts_vipnanoq_axi/core_*,
reg-names = NN_REG / NN_SRAM / NN_MEM0 / NN_MEM1 / NN_RESET / NN_CLK,
nn_power_version; класс устройства — /sys/class/npu/galcore, а
galcore/version выдаёт build-путь .../yandex_orion/build/amlogic-npu-manifest/.
То есть 3D/2D/VG-пайплайны — это общие возможности Vivante GAL, а на этой
железке распаян только NN-движок под on-device-инференс (споттер, VQE,
биометрия).
database в debugfs — это аллокации памяти процессов (у maind ~17 МБ
virtual + контекст-буферы), а не feature-DB с полем NNcore number,
поэтому точное число NN-ядер из нод не вылезает; косвенно о мощности говорят
enableNN=255, pdevCoreCount=21 и nanoqFreq ≈ 839 МГц.
Идентификация (сеть)¶
mDNS (_yandexio._tcp.local):
Подтверждается glagold в quasar.cfg: externalPort 1961, hostnamePrefix
yandex-station-3-, serviceType _yandexio._tcp, servicePrefix
YandexIOReceiver-. Имя точки доступа при настройке — Yandex.Station-3,
BT-префикс Yandex.Station-3 (common).
Порты (localhost, из quasar.cfg): glagol internal 9899 / external 1961,
networkd 9917, net_clock 11125, multiroomd 11124, updatesd 9889, brickd 9898,
config 9882, audioinit 9883. После root — ещё SSH :22 (и ADB :5555, если
включён).
glagol (порт 1961)¶
Токен — стандартный публичный flow (oauth.mobile.yandex.net →
quasar.yandex.net/glagol/token, platform=orion). Колонка принимает TLS при
валидном токене; невалидный → Invalid token и разрыв. Команды старых платформ
(softwareVersion, ping, getVersion, status, allStates, getState,
get_status) на orion ответа не дают — набор другой, не описан.
Сетевые обращения при активации¶
Сброс → BLE + «Дом с Алисой» → аккаунт (tcpdump по MAC колонки):
scbh.yandex.net— HTTPHEAD /generate_204(User-Agent прошивки).oauth.yandex.rustartup.mobile.yandex.netquasar.yandex.netreport.appmetrica.yandex.netuniproxy.alice.yandex.net,rpc.alice.yandex.net- CDN OTA (
ext-cloudcdn-ruekt01mts-02.cdn.yandex.net)
Весь цикл от DHCP до старта загрузки OTA — ~13 с. На стоке порты adb (5555) и
ssh (22/2222) закрыты.
Бэкенды из quasar.cfg: quasar.yandex.net (основной), quasar.yandex.ru/dev
(dev), uniproxy.alice.yandex.net/uni.ws и rpc.alice.yandex.net (Алиса),
ws.api.music.yandex.net (музыка), push.yandex.ru, clck.yandex.net
(метрика), startup.mobile.yandex.net, scbh.yandex.net/generate_204
(проверка связи), quasar.s3.yandex.net + *.svc.cdn.yandex.net (OTA/звуки).
На случай отказа DNS прописан жёсткий DnsFallbackMap:
quasar.yandex.net → 213.180.193.230 — учитывайте это при DNS-методе.
OTA-демон updatesd применяет пакет через device_ota_update.sh, проверяя
подпись ota_script.pub; каталог обновлений — /bkupgrade, имена *.img.
Что ещё проверить¶
- Физическая раскладка микрофонов (отверстия корпуса vs 6 каналов PDM
raw_mic_0..5) и безопасная частота захвата параллельно с Алисой. - Формат кадра
/dev/fb0(48 bpp) и/dev/fb1(21×12). - Модель Zigbee-чипа. Порт UART известен —
/dev/ttyS2, подробности в разделе Zigbee. - Сохраняются ли правки
/etcпосле OTA (корень ro, своё — в/data). - Профиль YAM для кольца Orion (36 LED,
orion:+ledfb-ring); из коробки в YAM профиля нет.
Железо снято с рутованной Станции 3 по SSH, корпус не вскрывали. Кто что добавил — на странице Участники.