Перейти к содержимому
258
Betaflight. Локальная сборка прошивки из исходного кода

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. Цели статьи

  • Изучить архитектуру прошивки полетных контроллеров (ПК) в среде 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

Ошибка 1: Запуск команд Linux непосредственно в PowerShell без перехода в WSL.
Симптом: Команды apt, make, gcc вызывают ошибку «не является внутренней или внешней командой».
Решение: Предварительно введите команду wsl в консоли Windows.
Ошибка 2: Отключенная аппаратная виртуализация в BIOS/UEFI.
Симптом: При выполнении 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

Типичные ошибки при загрузке кода

Ошибка 1: Выполнение apt install без прав суперпользователя sudo.
Симптом: Ошибка E: Could not open lock file - Permission denied.
Решение: Всегда использовать префикс sudo apt install ....
Ошибка 2: Опечатка в имени ветки при клонировании репозитория.
Симптом: Написание 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"

technobee_0590_5c86a.jpg

Мы собрали прошивку, которую теперь можно загрузить через Betaflight Configurator локально, без наличия интернет соединения. 

Разбор практических ошибок сборки

Ошибка 1: 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`.
Ошибка 2: 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`.
Ошибка 3: 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

Ошибка 1: Синтаксическая ошибка кавычек при передаче макросов со строками.
Симптом: make аварийно завершается с ошибкой unterminated string literal.
Решение: Оборачивать строковые переменные внутри флагов в одинарные кавычки: -D'RELEASE_NAME=vovafpv'.
Ошибка 2: Несоответствие именования флага модуля.
Симптом: Использование -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
Betaflight. Локальная сборка прошивки из исходного кода