Архитектура прошивки (quasar)¶
quasar — программный стек Яндекса на Amlogic-Станциях с Buildroot (Лайт, Мини, Мини 2,
Мини 3, Миди, Станция 2, Стрит, Умный хаб). Всё ниже снято со Станции Лайт, прошивка 3.21.
Загрузка¶
Buildroot, BusyBox init. /etc/inittab монтирует /proc, /dev/pts, /dev/shm, задаёт
hostname и запускает /etc/init.d/rcS. Он выполняет /etc/init.d/S??* по алфавиту:
S00hostname S01rw-dirs S01syslogd S01watchdog S02klogd S02sysctl S10mdev
S20urandom S30dbus S39w1_wifi_ant_config S40dhcpcd-db S40net.lo S40wifi S41dhcpcd
S45tas58xx S49chrony S49teeinit S50hci0 S51bluetoothd S52bluealsa S53bluealsa-aplay
S54default-bluez-agent S60touch_buttons_settings S70unbound S98pstore-clear S99quasar
На консоли UART вместо getty — getty_rabbit_hole (вход закрыт, см.
UART).
Запуск quasar¶
S99quasar → /system/vendor/quasar/onboot.sh start:
echo 1 > /proc/sys/vm/overcommit_memory;- чистит остатки OTA в
/bkupgrade/; LD_LIBRARY_PATH=/system/vendor/quasar:/system/vendor/quasar/libs,GST_PLUGIN_PATH=/system/vendor/quasar/libs;activate_adb.sh check— поднимаетadbd, если есть маркеры ADB в/data/quasar/;run.sh:ulimit -n 10240,ulimit -s 1024иquasar_launcher2 /system/vendor/quasar/launch.json.
maind¶
Почти всё — один бинарник /system/vendor/quasar/maind. quasar_launcher2 запускает его
несколько раз с разными ролями (см. launch.json):
| Роль | Что делает |
|---|---|
--platformd |
основной процесс; в том числе читает кнопки (/dev/input/event1) |
--mediad |
плеер: ответы Алисы и музыка, вывод в ALSA |
--telemetry |
телеметрия |
--fluent-bitd |
логи |
--updatesd |
обновления (OTA); убирается при отключении обновлений |
--updater_gateway |
шлюз обновлятора через unix-сокет /tmp/updater.sock |
Симлинки на maind в том же каталоге: led_util, tcp_alsa_writer,
keymaster_proxy_app, quasar_client.
Кроме ролей, в main зашит диспетчер диагностических команд — их больше, чем оборачивает
q: помимо перечисленных есть ещё --nettest, --build-timestamp и
--device-localization.
--getprop синтезирует значения
Обработчик --getprop отдаёт Android-style свойства с захардкоженным
ro.product.cpu.abi=arm64-v8a. Это не отражает реальную архитектуру: сам maind — ARM32
(ELF32, armhf), userspace тоже 32-битный. Не ориентируйтесь на этот вывод при сборке бинарников.
Звук¶
Все плееры пишут в ALSA default (/etc/asound.conf):
Master — программный регулятор, его двигают кнопки и голосовые команды громкости
(set_volume.sh N = amixer set Master N%). Захват — multi_capture: 4 канала
микрофонов (hw:0,1, PDM) + 2 канала петли с выхода усилителя (hw:0,0, опорный сигнал
для эхоподавления).
maind --gst-launch¶
Встроенный GStreamer, проигрывает любой пайплайн:
cd /system/vendor/quasar
LD_LIBRARY_PATH=/system/vendor/quasar:libs ./maind --gst-launch \
"filesrc location=/path/file.mp3 ! decodebin ! audioconvert ! audioresample ! alsasink"
У команды есть ключи --next и --clock (назначение не изучали).
Модели на борту¶
spotter_models/:activation,command,counteractivation,spotterRecognizer,vad;vqe_models/:noise_reducer;matter/:http,paa.
Где что лежит¶
| Путь | Что это |
|---|---|
/system/vendor/quasar/launch.json |
какие роли maind запускать |
/system/vendor/quasar/quasar.cfg |
конфиг всех демонов (адреса, звук, VQE, громкость) |
/system/vendor/quasar/ota_script.pub |
ключ проверки подписи OTA |
/data/quasar/devices.json |
ключи и токены устройства — никогда не публикуйте |
/data/quasar/activate_adb_quasmodrom, activate_network_adb |
маркеры автозапуска ADB |
/data/quasar/daemons_logs/ |
логи: maind.log, mediad.log, yiod.log, wifid.log, updatesd.log … |
/etc/asound.conf |
маршрутизация звука ALSA |
Хелпер q¶
/system/vendor/quasar/q: start, stop, restart, version, device-id, wifi-info,
glagol-connections, full-info, backend-dev, backend-prod, cli, getprop.