Перейти к содержанию

Сборка своего софта под Станцию

Руководство по кросс-компиляции и сборке статических бинарников для процессоров Amlogic и Allwinner в умных колонках Яндекс.


Ядро 64-бит, userspace 32-бит

На большинстве современных Станций (Лайт, Мини 2, Станция 2, Миди):

  • Ядро Linux — 64-битное (aarch64, ARMv8-A).
  • Системное окружение (Userspace) — 32-битное (armhf, glibc 2.30).

Что из этого следует:

  1. Статическая сборка под aarch64-linux-musl — лучший путь: Поскольку ядро поддерживает 64-битный режим, полностью статические бинарники aarch64 исполняются ядром напрямую и на 100% независимы от старых системных библиотек в /lib и /usr/lib.
  2. Динамическая сборка под armhf (32-бит): Если программе нужны системные библиотеки прошивки (GStreamer, ALSA, D-Bus), собирайте её 32-битным тулчейном под glibc не новее 2.30.

Сборка через Zig (рекомендуемый инструмент)

Zig содержит встроенные кросс-компиляторы под все архитектуры и готовую библиотеку musl. Это позволяет собирать программы под ARM без установки гигабайтных кросс-тулчейнов.

1. Настройка псевдо-компиляторов

Создайте скрипты-обёртки на вашем компьютере (например, в каталоге ~/zbin):

mkdir -p ~/zbin

# ~/zbin/aarch64-cc
cat << 'EOF' > ~/zbin/aarch64-cc
#!/bin/sh
exec zig cc -target aarch64-linux-musl "$@"
EOF

# ~/zbin/aarch64-cxx
cat << 'EOF' > ~/zbin/aarch64-cxx
#!/bin/sh
exec zig c++ -target aarch64-linux-musl "$@"
EOF

chmod +x ~/zbin/aarch64-cc ~/zbin/aarch64-cxx
export PATH="$HOME/zbin:$PATH"

Для 32-битной Станции Стрит (SoC Amlogic A1 / Mango) используйте таргет:

-target arm-linux-musleabihf


2. Кросс-компиляция проектов на CMake

Создайте файл описания тулчейна toolchain-aarch64.cmake:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_COMPILER zig;cc;-target;aarch64-linux-musl)
set(CMAKE_CXX_COMPILER zig;c++;-target;aarch64-linux-musl)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

Пример сборки любого проекта:

cmake -B build -DCMAKE_TOOLCHAIN_FILE=toolchain-aarch64.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel

После компиляции уменьшите размер бинарника утилитой strip:

zig objcopy --strip-all build/my_program


Уже проверенные и работающие утилиты

Все готовые бинарники уже скомпилированы и выложены в репозиторий в папку contrib/bin/:

Программа Архитектура Ссылка на бинарник Примечания
Fastfetch aarch64 📥 Скачать fastfetch Информер с цветным логотипом Алисы и датчиком температуры CPU.
Dropbear (SSH) aarch64 📥 Скачать dropbear Автономный SSH-сервер со статическим musl.
Dropbearkey aarch64 📥 Скачать dropbearkey Генератор ED25519/RSA хост-ключей.
Nano aarch64 📥 Скачать nano Удобный консольный текстовый редактор.
Zsh aarch64 📥 Скачать zsh Мощная командная оболочка Zsh (5.9.2).
yse shell 📥 Скачать yse Пакетный менеджер поверх Entware — шаг 3.
htop, tmux, … aarch64 / armv7 yse install <pkg> Из Entware в /opt.

Заливка и запуск на колонке

Все собранные бинарники и библиотеки должны размещаться в доступном для записи разделе /data:

# 1. Загрузка файла по ADB
adb connect <IP_колонки>:5555
adb push my_program /data/opt/bin/
adb shell chmod +x /data/opt/bin/my_program

# 2. Проверка запуска
adb shell /data/opt/bin/my_program

Если утилите требуются собственные конфиги или базы данных, создавайте их в /data/opt/etc/ или /data/opt/home/.


Установка ADB на компьютер

Чтобы управлять колонкой с компьютера через Android Debug Bridge:

brew install android-platform-tools
# Проверка:
adb version
# Ubuntu / Debian / Mint:
sudo apt install adb

# Arch Linux / Manjaro:
sudo pacman -S android-tools
  1. Скачайте официальный архив: Google SDK Platform-Tools for Windows.
  2. Распакуйте папку platform-tools (например, в C:\platform-tools).
  3. Запустите командную строку (CMD или PowerShell) из этой папки и выполните adb.exe version.