Перейти к содержимому
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. Локальная сборка прошивки из исходного кода