Betaflight. Локальная сборка прошивки из исходного кода
Данный материал посвящен развертыванию среды автономной компиляции прошивки Betaflight на базе подсистемы Windows Subsystem for Linux (WSL). В статье подробно рассматривается процесс перехода от зависимой онлайн-сборки на внешних серверах к 100% автономному циклу подготовки .hex-файлов для полетных контроллеров дронов без подключения к сети Интернет.
Перед тем как продолжить предлагаю прочитать статью "2025.12 Betaflight Configurator. Устанавливаем на компьютер для работы offline" Здесь.
Ключевая концепция: Локальная сборка Betaflight исключает риски сетевых сбоев, санкционных блокировок и недоступности внешних серверов сборки в США. Оператор получает полный контроль над исходным кодом C, возможностью кастомизации макросов EXTRA_FLAGS и гибок в выборе любых модулей (USE_SERVO, USE_PINIO, USE_DSHOT, USE_VTX) прямо на своем рабочем ПК.
Содержание
- 1. Цели статьи
- 2. Базовый контекст и концепция автономной сборки
- 3. Подтема 1: Установка и запуск среды WSL
- 4. Подтема 2: Настройка окружения и скачивание исходного кода
- 5. Подтема 3: Подготовка ARM SDK и решение ошибок тулчейна
- 6. Подтема 4: Воспроизведение онлайн-сборки и кастомизация
- 7. Практика: типовые задачи (с решениями)
- 8. Чек-лист самопроверки знаний
1. Цели статьи
- Изучить архитектуру прошивки полетных контроллеров (ПК) в среде Betaflight и механизм сборки бинарных файлов.
- Развернуть и настроить подсистему Linux (WSL) в ОС Windows 10/11 для выполнения кросс-компиляции C-кода.
- Освоить работу с Git-ветками репозитория Betaflight и подгрузку целевых конфигураций
betaflight/configs. - Научиться решать реальные ошибки компилятора ARM SDK (блокировки DNS
curl, отсутствиеarm-none-eabi-gccв PATH, несоответствиеGCC_REQUIRED_VERSION). - Научиться извлекать параметры Cloud Build из логов Betaflight Configurator и воспроизводить их локально через консоль
make. - Обеспечить 100% независимость от сетевых ресурсов, серверов в США и интернет-соединения при подготовке дронов.
.hex-файла позволяет перепрошивать идентичные полетные контроллеры через функцию «Прошить локально» без доступа к сети, а локальный тулчейн дает возможность компилировать любые новые конфигурации на лету.2. Базовый контекст и концепция автономной сборки
Стандартный процесс прошивки полетного контроллера через Betaflight Configurator опирается на облачный сервис компиляции. Когда пользователь выбирает версию прошивки и список функций (OSD, GPS, DSHOT, Pin IO), Configurator отправляет запрос на удаленный сервер в США, где происходит сборка бинарного .hex-файла, возвращаемого по сети.
В условиях работы в полевых зонах, при радиоэлектронных помехах или ограничении доступа к внешним ресурсам эта схема перестает работать. Локальная компиляция полностью решает эту проблему: прошивка собирается непосредственно на процессоре вашего ПК всего за 5–15 секунд без использования сети.
Материалы и документация
Для работы используются официальные открытые репозитории проекта Betaflight:
- Основной код Betaflight Firmware:
https://github.com/betaflight/betaflight.git - Репозиторий целевых конфигураций плат:
https://github.com/betaflight/configs.git
.hex-файлов, либо настроенное локальное WSL-окружение.3. Подтема 1: Установка и запуск среды WSL
Развертывание подсистемы WSL
Исходный код Betaflight написан на языке C и рассчитан на сборку с помощью GNU Toolchain (GCC ARM). Наиболее удобной и стабильной средой для выполнения этой задачи в ОС Windows является подсистема WSL (Windows Subsystem for Linux).
Для установки подсистемы Linux в Windows 10/11 достаточно запустить Командную строку или PowerShell от имени администратора и выполнить единственную команду:
# Установка WSL и дистрибутива Ubuntu по умолчанию
wsl --install
Проверка дистрибутива
После перезагрузки системы и создания логина/пароля пользователя Linux введите команду wsl для входа в консоль. Для проверки установленного дистрибутива выполните:
# Вывод информации о релизе ОС Linux
cat /etc/os-release
Типичные ошибки при работе с WSL
Симптом: Команды
apt, make, gcc вызывают ошибку «не является внутренней или внешней командой».Решение: Предварительно введите команду
wsl в консоли Windows.Симптом: При выполнении
wsl --install возникает ошибка «Please enable Virtualization in BIOS».Решение: Включить опцию Intel VT-x или AMD-V в настройках материнской платы.
4. Подтема 2: Настройка окружения и скачивание исходного кода
Установка зависимостей Linux
Перед сборкой исходного кода необходимо установить базовые утилиты сборки, компилятор Clang, Git и Python. В Linux все зависимости устанавливаются одной консольной командой:
# Обновление индекса пакетов и установленных программ
sudo apt update && sudo apt upgrade -y
# Установка необходимых утилит компиляции и системного компилятора ARM
sudo apt install -y build-essential git curl clang gcc python3 gcc-arm-none-eabi libnewlib-arm-none-eabi
Клонирование Git-репозитория и выбор стабильной ветки
Создадим директорию проектов ~/proj и выполним клонирование целевой стабильной ветки. Ветка master содержит нестабильный код, поэтому рекомендуется использовать релизные ветки серии maintenance.
# Создание и переход в папку проектов
cd ~/
mkdir -p proj
cd proj
# Клонирование только стабильной релизной ветки
git clone --single-branch --branch "2025.12-maintenance" https://github.com/betaflight/betaflight.git
# Переход в каталог с исходным кодом
cd betaflight
Типичные ошибки при загрузке кода
apt install без прав суперпользователя sudo.Симптом: Ошибка
E: Could not open lock file - Permission denied.Решение: Всегда использовать префикс
sudo apt install ....Симптом: Написание
maintanance (через 'a') вместо maintenance вызовет ошибку Git: Remote branch not found.Решение: Внимательно проверять орфографию имён веток.
5. Подтема 3: Подготовка ARM SDK и решение ошибок тулчейна
Установка кросс-компилятора ARM и конфликт версий GCC
Для компиляции кода под ARM-архитектуру полетных контроллеров (STM32 / AT32) требуется тулчейн gcc-arm-none-eabi. При использовании стандартной команды Betaflight make arm_sdk_install утилита пытается скачать архив с внешнего сервера developer.arm.com. В случае блокировок или сбоев DNS возникает ошибка curl: (6) Could not resolve host.
Наиболее надежным решением является установка системного пакета из репозиториев Ubuntu:
# Установка системного пакета кросс-компилятора ARM
sudo apt update
sudo apt install -y gcc-arm-none-eabi libnewlib-arm-none-eabi
# Проверка установленной версии компилятора
arm-none-eabi-gcc --version
Подгрузка базы конфигураций таргетов и обход проверки версий
Betaflight проверяет соответствие версии компилятора макросу GCC_REQUIRED_VERSION (например, ожидает 13.3.1, а системный пакета APT устанавливает 13.2.1). Для устранения конфликта версий достаточно переопределить требование к версии в локальном файле mk/local.mk:
# Обновление подмодуля конфигураций полетных контроллеров (>650 таргетов)
make configs
# Фиксация используемой версии GCC в локальном файле конфигурации
echo "GCC_REQUIRED_VERSION := 13.2.1" > mk/local.mk
# Первичная сборка прошивки под таргет HAKRCF405V2 с модулями GPS и LED
make HAKRCF405V2 EXTRA_FLAGS="-DUSE_GPS -DUSE_LED_STRIP"
Мы собрали прошивку, которую теперь можно загрузить через Betaflight Configurator локально, без наличия интернет соединения.
Разбор практических ошибок сборки
arm-none-eabi-gcc: No such file or directory / not in the PATH.Причина: Попытка запустить сборку
make TARGET до установки компилятора ARM или без добавления пути в `$PATH`.Решение: Установить компилятор через `sudo apt install -y gcc-arm-none-eabi libnewlib-arm-none-eabi`.
curl: (6) Could not resolve host: developer.arm.com.Причина: Ошибка DNS в WSL2 или сетевая блокировка сервера ARM при выполнении `make arm_sdk_install`.
Решение: Отказаться от `make arm_sdk_install` в пользу системного пакета `apt`, либо прописать `nameserver 8.8.8.8` в `/etc/resolv.conf`.
ERROR your arm-none-eabi-gcc is '13.2.1', but '13.3.1' is expected.Причина: Строгая проверка версии GCC в файлы `mk/tools.mk`.
Решение: Переопределить версию командой `echo "GCC_REQUIRED_VERSION := 13.2.1" > mk/local.mk` или передать флаг `GCC_REQUIRED_VERSION=13.2.1` в команду `make`.
6. Подтема 4: Воспроизведение онлайн-сборки и кастомизация
Извлечение параметров из Betaflight Configurator
При сборке онлайн Betaflight Configurator генерирует массив флагов предпроцессора C. Их можно скопировать из ссылки на лог сборки (Build Log) в окне Configurator. Пример аналогичного вызова команды make на локальном ПК:
# Воспроизведение полного набора облачных флагов сборки для HAKRCF405V2
make HAKRCF405V2 EXTRA_FLAGS="-D'BUILD_KEY=213cf822cf423b1f9c0b05ead8ec33fd' -D'RELEASE_NAME=2025.12.5' -DCLOUD_BUILD -DUSE_DSHOT -DUSE_OSD -DUSE_OSD_SD -DUSE_PINIO -DUSE_SERIALRX -DUSE_SERIALRX_CRSF -DUSE_SERVO -DUSE_TELEMETRY -DUSE_TELEMETRY_CRSF -DUSE_VTX"
Кастомизация названия релизов и флагов C
Локальная сборка позволяет менять значения системных макросов, например имя релиза (RELEASE_NAME) и уникальный ключ сборки (BUILD_KEY), что позволяет маркировать партийные прошивки:
# Кастомная сборка с изменением системных тегов
make HAKRCF405V2 EXTRA_FLAGS="-D'RELEASE_NAME=technobee' -D'BUILD_KEY=it_is_custom_firmware' -DCLOUD_BUILD -DUSE_DSHOT -DUSE_LED_STRIP -DUSE_OSD -DUSE_OSD_SD -DUSE_PINIO -DUSE_SERVO -DUSE_RANGEFINDER -DUSE_SERIALRX -DUSE_SERIALRX_CRSF -DUSE_VTX"
После прошивки сформированного файла obj/betaflight_HAKRCF405V2.hex в полетный контроллер, команда status в консоли CLI выведет ваши кастомные идентификаторы.
Типичные ошибки передачи параметров EXTRA_FLAGS
Симптом:
make аварийно завершается с ошибкой unterminated string literal.Решение: Оборачивать строковые переменные внутри флагов в одинарные кавычки:
-D'RELEASE_NAME=vovafpv'.Симптом: Использование
-DUSE_SERVOS вместо -DUSE_SERVO не активирует код управления сервоприводами.Решение: Сверять название макроса с исходным кодом в папке
src/main/target/.7. Практика: типовые задачи (с решениями)
Блок задач 1: Подготовка универсальных прошивок СВО и Walksnail
Задача 1: Подготовка автономной прошивки под плату HAKRCF405V2
Условие: Подготовить полностью автономную прошивку с базовым набором модулей: CRSF, DSHOT, OSD Analog, VTX, SERVO, Pin IO.
# Решение задачи 1
cd ~/proj/betaflight
make HAKRCF405V2 EXTRA_FLAGS="-DCLOUD_BUILD -DUSE_DSHOT -DUSE_OSD -DUSE_PINIO -DUSE_SERIALRX -DUSE_SERIALRX_CRSF -DUSE_SERVO -DUSE_VTX"
# Результат: Файл obj/betaflight_HAKRCF405V2.hex готов к автономной прошивке
Задача 2: Сборка прошивки под цифровую видеосвязь Walksnail Avatar
Условие: Скомпилировать прошивку для ПК MATEKF405TE с поддержкой Canvas Mode / OSD HD для цифровой системы Walksnail Avatar.
# Решение задачи 2
cd ~/proj/betaflight
make MATEKF405TE EXTRA_FLAGS="-DCLOUD_BUILD -DUSE_DSHOT -DUSE_OSD -DUSE_OSD_HD -DUSE_SERIALRX -DUSE_SERIALRX_CRSF -DUSE_TELEMETRY_CRSF -DUSE_VTX"
# Результат: Сформирован бинарник с поддержкой HD OSD протокола
Блок задач 2: Обход несоответствия версий GCC и кастомный релиз
Задача 3: Избавление от ошибки GCC_REQUIRED_VERSION и сборка с кастомным тегом
Условие: Настроить сборку для системной версии gcc-arm-none-eabi (13.2.1), задать имя релиза "spec_unit_1" и проверить статус в CLI.
# Решение задачи 3
cd ~/proj/betaflight
# Фиксируем установленную версию GCC в файле mk/local.mk
echo "GCC_REQUIRED_VERSION := 13.2.1" > mk/local.mk
# Запускаем компиляцию
make HAKRCF405V2 EXTRA_FLAGS="-D'RELEASE_NAME=spec_unit_1' -DCLOUD_BUILD -DUSE_DSHOT -DUSE_OSD -DUSE_PINIO -DUSE_SERIALRX_CRSF -DUSE_VTX"
# Скопировать HEX файл из obj/ в Windows и прошить через Betaflight Configurator (Локальная прошивка)
# В CLI Betaflight выполнить:
# status
# В ответе терминала будет указано: MCU STM32F405, Release: spec_unit_1
8. Чек-лист самопроверки знаний
Отметьте пункты, которые вы действительно понимаете и можете выполнить на практике без сторонних подсказок.
| ✓ | Навык / Концепция | Метод проверки / Команда |
|---|---|---|
| Развертывание подсистемы WSL в ОС Windows | Могу выполнить wsl --install и зайти в консоль Linux. |
|
| Проверка версии установленного дистрибутива Linux | Могу проверить релиз ОС через cat /etc/os-release. |
|
| Установка сборочных зависимостей и кросс-компилятора ARM | Умею устанавливать пакеты через sudo apt install -y build-essential git gcc clang gcc-arm-none-eabi. |
|
| Клонирование релизной ветки Betaflight без лишней истории | Понимаю назначение флага git clone --single-branch --branch "...". |
|
| Решение сбоев сетевой загрузки ARM SDK (ошибка curl 6) | Умею заменять `make arm_sdk_install` на пакет `gcc-arm-none-eabi` из APT. | |
| Обход ошибки несоответствия версий GCC (GCC_REQUIRED_VERSION) | Умею переопределять версию через echo "GCC_REQUIRED_VERSION := 13.2.1" > mk/local.mk. |
|
| Загрузка базы конфигураций полетных контроллеров | Понимаю назначение репозитория betaflight/configs и команды make configs. |
|
Локальная компиляция базового .hex файла под target |
Умею собирать бинарники командой make HAKRCF405V2. |
|
| Извлечение параметров Cloud Build из Betaflight Configurator | Умею находить макросы сборки в логах Configurator и передавать их в EXTRA_FLAGS. |
|
| Прошивка бинарника и проверка статуса через CLI | Могу загрузить локальный `.hex` файл через Configurator и проверить через CLI команду status. |
- Суббота, 01 августа 2026

