За просьбой «собрать прошивку для Flipper Zero» скрываются как минимум четыре непохожие задачи. Одному нужно собственное приложение, другому — правка в системном коде, третьему форк со снятыми ограничениями Sub-GHz, а четвёртому собирать не требуется вообще ничего. Выбирать между ними вслепую бессмысленно: сначала стоит разобраться, что уже лежит внутри и какой инструментарий приезжает вместе с исходниками.
Материал построен на замерах со стенда: официальный репозиторий на теге 1.4.3, Debian в контейнере с 2 vCPU и 7 ГБ RAM. Количественные оценки посчитаны по дереву исходников и файлу api_symbols.csv из SDK, размеры взяты с настоящей сборки, приложение на C реально скомпилировано.
Что стоковая прошивка умеет без единой правки
С этого места разумно начинать, поскольку добрая половина вопросов «а можно ли собрать прошивку, чтобы…» касается уже реализованного.
Подсчитано по дереву исходников тега 1.4.3 и реестрам протоколов
За десятью пользовательскими приложениями из applications/main стоят не десять пунктов меню, а десять аппаратных подсистем, каждая со своим набором протоколов:
14 вариантов протоколов: NEC и расширения, Samsung32, RC5/RC5X, RC6, SIRC/15/20, Kaseikyo, Pioneer, RCA
ibutton, onewire
1-Wire
Dallas DS1990, DS1971, DS1992, DS1996, generic-режим, работа с болванками
gpio
8 линий наружу
ручное управление пинами, мост USB-UART
bad_usb, u2f
USB-стек STM32
эмуляция HID-клавиатуры и аппаратного ключа U2F
archive
файловая система SD
браузер сохранённых карт, ключей и сигналов
Рядом трудятся 16 фоновых сервисов (gui, storage, notification, power, bt, cli, loader, rpc, dolphin, region, crypto, input и другие), 10 экранов настроек, 27 отладочных стендов и 13 примеров приложений, пригодных как каркас для своего.
❗ Главное
Отсюда следует вполне практическая вещь: среди 26 парсеров карт есть troika, plantain, social_moscow, umarsh, two_cities — распространённые транспортные карты стоковая прошивка разбирает сама. Собирать «ради поддержки моей карты» стоит лишь тогда, когда её в этом перечне не нашлось.
Границы, заданные железом
Границы — из линкер-скриптов targets/f7, размер образа — с собственной сборки
Носителем прошивки служит STM32WB55 — двухъядерный чип, где прикладная часть достаётся Cortex-M4, а радиостек Bluetooth крутится на Cortex-M0+. Границы прописаны в линкер-скриптах targets/f7 жёстко: всего 1024 КБ флеш-памяти, прикладному процессору отходит всё до адреса радиостека 0x080D7000, то есть 860 КБ.
Собранный с COMPACT=1 DEBUG=0 образ занял у меня 750 КБ, оставив в запасе около 110 КБ. Вот почему флаги сборки — не косметика: отладочный вариант заметно объёмнее, а на форке с десятком лишних встроенных приложений этот резерв тает на глазах.
Оперативная память устроена так же тесно: 192 КБ в RAM1 на всё сразу — саму прошивку, ваши приложения и графику, плюс пара блоков по 10 КБ для обмена с радиопроцессором. По этой причине stack_size в манифесте и задаётся явным числом байт, а не по принципу «сколько понадобится».
Что из этого видит ваш код
Статической линковки с прошивкой у .fap нет — обращение идёт через таблицу экспортируемых символов. Таблица приезжает вместе с SDK файлом targets/f7/api_symbols.csv, и посмотреть её можно вручную:
head -3 ~/.ufbt/current/sdk_headers/f7_sdk/targets/f7/api_symbols.csv
# entry,status,name,type,params
# Version,+,87.1,,
# Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
# сколько всего чего
cut -d, -f1 ~/.ufbt/current/sdk_headers/f7_sdk/targets/f7/api_symbols.csv | sort | uniq -c
Цифры из targets/f7/api_symbols.csv — файла, по которому линкуется каждый .fap
Для версии 1.4.3 набор такой: 3531 функция, 311 переменных, 319 заголовков, версия API — 87.1. По подсистемам мощность распределена неравномерно.
Ядро furi — 29 заголовков. Внизу лежит FreeRTOS, но наружу выведен свой слой: потоки (furi_thread), мьютексы, семафоры, очереди сообщений, потоковые буферы, флаги событий, таймеры, цикл событий (furi_event_loop), шина pubsub, реестр сервисов record. Добавьте сюда furi_string со счётчиком ссылок — при 192 КБ оперативной памяти голый char* надоедает быстро.
Слой железа — 47 заголовков furi_hal_*, 488 функций. Периферия доступна напрямую: gpio, spi, i2c, adc, pwm, serial, usb (с cdc, hid, ccid), nfc, subghz, infrared, rfid, ibutton, bt, power, speaker, vibro, light, rtc, random, crypto, flash, sd, region. Задачи вида «подёргать ногой и послушать ответ» закрываются здесь, без пересборки прошивки.
Интерфейс — 17 готовых элементов.submenu, menu, button_menu, button_panel, dialog_ex, popup, widget, text_input, byte_input, number_input, text_box, variable_item_list, file_browser, loading, empty_screen и валидаторы. Писать меню с нуля незачем: экран монохромный, 128×64, и всё типовое давно отрисовано.
ℹ️ Справка
Особняком стоит lib/flipper_application — пять заголовков, отвечающих за загрузку и исполнение .fap в рантайме, включая плагины. Благодаря этому механизму 26 парсеров NFC-карт существуют отдельными файлами, а не частью монолита: приложение nfc подтягивает нужный парсер по мере надобности.
Четыре уровня и где вы окажетесь
Уровни отличаются не сложностью команд, а объёмом ответственности
📌 Заметка
Требования общие для всех вариантов: 64-битная Linux, macOS 12+ либо Windows 10+, поставленный git, Python 3.8 или новее. О компиляторе заботиться не нужно — обе сборочные системы приносят собственный arm-none-eabi-gcc, не вмешиваясь в системный PATH.
Уровень 0. Убедиться, что собирать не надо
Канал обновлений раздаёт официальные прошивки и одновременно служит самым честным ответом на вопрос о версиях:
curl -s https://update.flipperzero.one/firmware/directory.json \
| python3 -c 'import json,sys;[print(c["id"], c["versions"][0]["version"]) for c in json.load(sys.stdin)["channels"]]'
development a55e3939
release-candidate 1.4.2-rc
release 1.4.3
В стабильном канале сейчас 1.4.3 — релиз от 5 декабря 2025 года. Когда цель формулируется как «обновиться» или «поставить готовый чужой форк», исходники не нужны: минуты работы qFlipper или веб-апдейтера достаточно, а образ придёт подписанным и проверенным.
Уровень 1. Приложение .fap за пять команд
Файлы .fap лежат на SD-карте самостоятельно и в прошивку не входят. Их сборкой занимается ufbt — усечённая система сборки, качающая готовый SDK вместо полного дерева исходников.
SDK приезжает на первом запуске — строкой Using version: 1.4.3 и распаковкой в ~/.ufbt/current. Результат ufbt create — ровно пять файлов:
gig_hello.c исходник приложения
application.fam манифест сборки
gig_hello.png иконка 10×10, 1 бит
images/.gitkeep каталог под ассеты
.github/workflows/build.yml готовый CI на GitHub Actions
Манифест — обыкновенный вызов на Python, генерируемый дословно так:
App(
appid="gig_hello", # Must be unique
name="App gig_hello", # Displayed in menus
apptype=FlipperAppType.EXTERNAL,
entry_point="gig_hello_app",
stack_size=2 * 1024,
fap_category="Examples",
fap_icon="gig_hello.png", # 10x10 1-bit PNG
fap_icon_assets="images",
)
Существенных полей три. В entry_point записано имя стартовой функции на C, обязанное совпасть с объявленным в исходнике. Через stack_size задаётся размер стека потока приложения: двух килобайт хватит на простую отрисовку, работа с NFC или файлами потребует больше. От fap_category зависит подкаталог на SD-карте — допустимы Sub-GHz, RFID, NFC, Infrared, GPIO, iButton, Bluetooth, USB, Games, Tools, Media, Debug, Examples.
Возможности шаблонного gig_hello.c исчерпываются записью в лог. Заменим его минимальным приложением с экраном и выходом по кнопке — код собран и проверен на SDK 1.4.3:
Финальный порядок освобождения ресурсов не произволен: вьюпорт снимается с GUI прежде, чем освобождается. Переставьте две строки местами — и отрисовка продолжится по уже освобождённой структуре. Компилятор не возразит, а устройство перезагрузится прямо в руках.
Сборка запускается вызовом ufbt без параметров:
$ ufbt
CC /tmp/fz/gig_hello.c
LINK /root/.ufbt/build/gig_hello_d.elf
FAP /root/.ufbt/build/gig_hello.fap
INSTALL /tmp/fz/dist/gig_hello.fap
APPCHK /root/.ufbt/build/gig_hello.fap
Target: 7, API: 87.1
Итог — dist/gig_hello.fap на 2200 байт. Наибольшую ценность во всём выводе представляет строка APPCHK.
⚠️ Осторожно
Пара Target: 7, API: 87.1 служит отпечатком, по которому устройство решает судьбу приложения. Первое — ревизия железа (7 у Flipper Zero), второе — версия того самого экспорта из api_symbols.csv. При другой мажорной версии API прошивка запускать приложение откажется, хотя копирование файла пройдёт без ошибок. Отсюда правило: собранный под стабильный канал .fap не обязан работать на форке или dev-сборке. SDK переключается без пересоздания проекта:
ufbt update --channel=dev # или rc, или release
ufbt update --branch=1.4.3 # конкретная ветка SDK
ufbt update --local=/path/to/flipper-z-f7-sdk-local.zip # SDK из своей сборки
Заливка с немедленным стартом на подключённом устройстве:
ufbt launch
Файл уходит на SD-карту в подкаталог из fap_category, после чего приложение запускается. Условие одно — закрытый qFlipper, последовательный порт он занимает монопольно.
Каким путём приложения попадают на устройство
Проверку мажорной версии API проходит любой .fap, кем бы он ни был собран
Написание собственного кода — способ отнюдь не самый распространённый. Путей всего четыре, и отличает их не удобство установки, а версия API, под которую собран бинарник.
Каталог на 437 приложений
Числа отданы публичным API каталога на момент подготовки материала
Хостится каталог по адресу lab.flipper.net; установка идёт либо из браузера, либо через мобильное приложение. Разбивку по разделам публикует открытый API, так что цифры проверяются самостоятельно:
curl -s 'https://catalog.flipperzero.one/api/v0/category?limit=50' \
| python3 -c 'import json,sys;[print(f"{c[\"name\"]:12} {c[\"applications\"]}") for c in json.load(sys.stdin)]'
Распределение говорит само за себя: на GPIO приходится 112 приложений, на Games — 102, на Tools — 93, тогда как весь раздел iButton состоит из двух. Каталог вырос вокруг внешних модулей и утилит — радиочасть закрывать нечем, её и так покрывают стоковые приложения.
Своё приложение туда добавляется без загрузки исходников. В репозиторий flipper-application-catalog отправляется единственный файл applications/<Категория>/<app_id>/manifest.yml, содержащий ссылку на ваш репозиторий и конкретный коммит:
Сборкой .fap занимается инфраструктура каталога. Требования не обсуждаются: id пишется строчными буквами и повторяет appid из application.fam, category обязана отвечать каталогу с манифестом, у version формат «мажор.минор», а обновление с номером не выше прежнего отклоняют. Для скриншотов предписана штатная функция qFlipper.
Чужой репозиторий как источник
Изрядная доля интересного до каталога не доходит и остаётся на GitHub. Порядок действий неизменен: клонировать, перейти в каталог приложения, вызвать ufbt.
Проверял на официальном наборе flipperzero-good-faps — это 15 приложений под присмотром самой команды Flipper:
git clone --depth 1 https://github.com/flipperdevices/flipperzero-good-faps.git
cd flipperzero-good-faps/weather_station
ufbt # собрать
ufbt launch # залить на устройство и запустить
Правок не потребовалось нигде, собралось всё. Замеренные размеры:
Приложение
Что делает
Размер .fap
clock
часы на экране
3,8 КБ
signal_generator
генератор сигналов на GPIO
11,8 КБ
mfkey
восстановление ключей Mifare Classic из перехвата
37,6 КБ
nfc_magic
запись на «магические» карты с перезаписываемым UID
92,4 КБ
weather_station
приём беспроводных метеодатчиков на 433 МГц
101,9 КБ
Компанию им составляют dap_link (Flipper в роли отладочного зонда CMSIS-DAP), avr_isp_programmer (программатор AVR), spi_mem_manager (чтение и запись SPI-флешек), air_mouse (мышь по гироскопу), mass_storage, music_player, nfc_rfid_detector, video_game_module_tool, flip_tdi, air_arkanoid.
✅ Как правильно
Самостоятельная сборка чужого приложения обычно предпочтительнее скачивания готового .fap из чата: компиляция идёт против того SDK, который развёрнут у вас, и совместимость выясняется сразу. По трудозатратам разница — две команды.
Отчего каталожное приложение молчит на форке
Правило сформулировано в официальной документации предельно сжато: мажорная версия API у .fap сверяется загрузчиком с мажорной версией API прошивки, и при несовпадении запуска не происходит. Мажорный номер увеличивают при удалении функции из экспорта или смене сигнатуры, минорный — при добавлении новой.
Практическое следствие обычно выясняется опытным путём: каталог компилирует бинарники под API официальной прошивки, из-за чего на форке с его собственными изменениями часть приложений оттуда не стартует. По этой же причине форки таскают свои паки приложений прямо внутри прошивки — совпадение версий иначе не гарантировать.
Уровень 2. Прошивка целиком: fbt
Репозиторий клонируется полностью, вместе с сабмодулями. Ключ --recursive обязателен: без него сборка развалится на недостающих библиотеках.
git clone --recursive https://github.com/flipperdevices/flipperzero-firmware.git
cd flipperzero-firmware
./fbt COMPACT=1 DEBUG=0 updater_package
Замеры с живой сборки тега 1.4.3 на контейнере с 2 vCPU и 7 ГБ RAM
Первый вызов ./fbt со стороны похож на простой: проверяются tar и curl, затем качается архив тулчейна и распаковывается в ./toolchain внутри репозитория. Ничего системного не устанавливается — компилятор соседствует с исходниками, и удаление одного каталога сносит всю сборочную среду. У меня приехал arm-none-eabi-gcc (GCC) 12.3.1.
Чистая пересборка после ./fbt -c заняла на двух ядрах 144 секунды. Для 700 МБ исходников результат неожиданный — но львиную долю объёма составляют сабмодули, до целевого образа не доходящие.
Значит, по умолчанию собирается отладочная некомпактная версия — крупнее и медленнее, но пригодная для пошаговой отладки. Повседневной прошивке нужна обратная пара: COMPACT=1 DEBUG=0.
✅ Как правильно
Трогать fbt_options.py не стоит — файл под контролем версий, конфликты пойдут на каждом git pull. Рядом кладётся fbt_options_local.py, подхватываемый автоматически:
Значение DIST_SUFFIX уходит в имена артефактов и в поле Info пакета обновления — свои сборки отличаются от официальных сразу. Параметр FIRMWARE_APP_SET меняет набор встраиваемых приложений: например, unit_tests собирает прошивку-стенд вместо обычной.
Артефакты и пути доставки
В dist/f7-C после моей сборки оказалось 11 файлов, разбор приведён на схеме выше. Каталог находится без запоминания суффиксов:
ls -1 dist/*/ | head -20
Доставить результат на устройство можно тремя путями, неравнозначными между собой.
./fbt flash_usb_full # по USB, с ресурсами и радиостеком
./fbt flash # через SWD-программатор: ST-Link, J-Link, CMSIS-DAP, Wi-Fi devboard
Третий вариант ручной: dist/f7-C/flipper-z-f7-update-local.tgz скармливается qFlipper через «Install from file». При неуверенности в сборке предпочтителен именно он — целостность пакета проверяется до начала записи во флеш.
⛔ Так делать нельзя
Ни выдёргивать кабель, ни усыплять ноутбук во время flash_usb_full нельзя. Обновление радиостека Core2 выполняется отдельной фазой, и обрыв на ней превращает устройство в кирпич надёжнее всего прочего, описанного здесь.
Цели fbt: полный рабочий набор
Под ./fbt скрывается не одна команда, а несколько десятков целей. Ниже те, что действительно используются.
Группа
Цель
Что делает
Сборка
fw_dist
собрать прошивку и разложить в dist (цель по умолчанию)
updater_package / updater_minpackage
пакет самообновления; минимальный — только DFU, полный — плюс радиостек и ресурсы SD
copro_dist
собрать бандл Core2 FUS и стека для qFlipper
faps
собрать все внешние приложения как .fap
fap_<appid>
собрать одно приложение по идентификатору
fap_dist
разложить внешние приложения в dist
Прошивка
flash_usb, flash_usb_full
залить по USB
flash, firmware_flash
залить через SWD; адаптер — SWD_TRANSPORT=…, серийник — SWD_TRANSPORT_SERIAL=…
jflash
залить через J-Link средствами JFlash
Отладка
debug
собрать, залить и присоединить gdb с загруженным .elf
updater_debug
то же, но с .elf апдейтера
debug_other
gdb без символов — добавляются вручную через add-symbol-file
blackmagic, openocd, get_blackmagic, get_stlink
обвязка вокруг отладочных зондов
devboard_flash
обновить Wi-Fi devboard, канал задаётся через ARGS="-c dev"
cli
открыть консоль устройства по USB
Качество
lint, format
clang-format по исходникам на C
lint_py, format_py
black по скриптам сборки и манифестам
lint_img, format_img
проверка и нормализация PNG-ассетов
lint_all, format_all
всё сразу
doxygen, doxy
сгенерировать документацию по API и открыть в браузере
Ассеты
resources, icons, proto, proto_ver
пересобрать ресурсы SD, иконки из PNG и protobuf
Служебное
firmware_list, updater_list
листинг исходник + ассемблер
firmware_cdb, updater_cdb
сгенерировать compile_commands.json без полной сборки
vscode_dist
развернуть конфигурацию VS Code с задачами сборки и отладки
Когда пересобирать прошивку не хочется, есть работа с одним приложением:
./fbt launch APPSRC=applications_user/my_app # собрать, залить и запустить
./fbt build APPSRC=applications_user/my_app # только собрать
./fbt -c fap_my_app # почистить артефакты этого приложения
Что ещё приезжает вместе со сборочной системой
Кроме целей, в комплекте идёт несколько вещей, о существовании которых обычно узнают случайно.
Оболочка с тулчейном. Получить arm-none-eabi-gcc, gdb и objdump в своём шелле можно без правки путей:
source scripts/toolchain/fbtenv.sh # Linux и macOS
. `./fbt -s env` # то же самое короче
scripts\toolchain\fbtenv.cmd # Windows
Переменные окружения, меняющие поведение сборки:
Переменная
Эффект
FBT_NOENV=1
не настраивать тулчейн, брать всё из системного PATH (только *nix)
FBT_TOOLCHAIN_PATH
держать тулчейн в общем каталоге, а не по копии на клон
FBT_NO_SYNC=1
не обновлять сабмодули автоматически
FBT_VERBOSE=1
показать полные командные строки компилятора
Ключи командной строки. Глобальный define пробрасывается через --extra-define=NAME=VALUE; --extra-ext-apps=app1,app2 вынуждает собрать перечисленные приложения внешними; --options другой_файл.py подменяет конфигурацию целиком; --proxy-env=VAR1,VAR2 прокидывает переменные окружения в дочерние процессы, поскольку по умолчанию fbt окружение санирует.
Отладка на железе. Поддержку получили фирменный Wi-Fi devboard, ST-Link второй и третьей ревизий, J-Link, а также произвольные зонды с поддержкой CMSIS-DAP — сюда попадает и Raspberry Pi Debug Probe. По цели debug происходит сборка, заливка и запуск gdb, где символы уже подставлены; описание регистров периферии в формате SVD лежит там же.
CLI: доступ к подсистемам без строчки кода
Об этой части забывают чаще прочих, а она открывает все подсистемы вообще без программирования. Консоль поднимается по USB:
./fbt cli # из репозитория
ufbt cli # из проекта приложения
За радиочасть отвечают внешние плагины, которые ищутся в /ext/apps_data/cli/plugins. Не увидели новую команду сразу после установки приложения — помогает reload_ext_cmds. Самое полезное:
Перед тем как садиться за приложение, попробуйте решить задачу консолью. Принятое subghz rx кладёт в файл, nfc scanner показывает всё попавшее в поле, gpio дёргает пины. Хостовый скрипт, разговаривающий с устройством по последовательному порту, зачастую снимает задачу целиком: писать на C не приходится, версии API выяснять тоже.
JavaScript там, где C избыточен
Внутри прошивки работает js_app — интерпретатор на базе mJS. Ступень эта промежуточная — выше пунктов меню, но ниже разработки на C. Скрипт достаточно положить на SD-карту, а дальше запустить его либо из меню, либо консольной командой js.
Набор модулей: badusb, gpio, serial, storage, notification, math, event_loop, flipper, gui, tests. Причём gui здесь не декоративный — скрипту доступны те же элементы, что и коду на C: submenu, menu, button_menu, button_panel, dialog, popup, widget, text_input, byte_input, number_input, text_box, file_picker, loading, empty_screen.
В репозитории лежат 18 примеров — каталог applications/system/js_app/examples: от badusb_demo.js и uart_echo_8e1.js до event_loop.js, gpio.js, storage.js, gui.js. Разовую автоматизацию это покрывает с запасом при несопоставимо более низком пороге входа.
Уровень 3. Форк и его цена
Momentum и Unleashed собираются теми же целями fbt: ./fbt updater_package даёт TGZ, ./fbt flash_usb_full заливает напрямую. Технически всё сводится к клонированию другого репозитория и запуску знакомых команд.
Расходится наполнение. Ниже сведено то, что проекты заявляют в собственных описаниях.
Momentum
Unleashed
RogueMaster
База
официальная прошивка плюс наработки Unleashed
официальная прошивка
форк Unleashed
Sub-GHz
расширенные диапазоны 281–361, 378–481, 749–962 МГц; «сабдрайвинг» — сохранение координат GPS вместе с сигналом
сняты региональные TX-ограничения, добавлены протоколы, сохранение и отправка прыгающих кодов (FAAC SLH, BFT Mitto с ручным созданием), поддержка внешнего CC1101
наследует изменения Unleashed
NFC и RFID
поддержка Type 4 и NTAG4xx, дополнительные парсеры карт
разбор EMV, расширенный словарь Mifare Classic, произвольный UID, фаззеры для LF-RFID и iButton
наследует плюс собственные наборы
Ввод и USB
Bad-Keyboard с настраиваемыми параметрами USB и Bluetooth
BadKB — тот же BadUSB, но по Bluetooth, с раскладками
наследует
Встроенные приложения
Momentum App для настройки прошивки, BLE Spam, FindMy Flipper, NFC Maker, Wardriver, поиск файлов по SD
плагины сообщества и игры в сборке
заявлено более 150 игр плюс десятки плагинов
Оформление
система Asset Packs: анимации, иконки и шрифты меняются без пересборки
свои анимации и часы на рабочем столе
тематические наборы анимаций и ассетов
Прочее
блокировка при загрузке, сброс при неверном пин-коде, подмена имени, MAC и серийного номера, настройка RGB-подсветки, операции с файлами и монтирование образов дисков
текстовый курсор, редактор байтов, блокировка по пин-коду, dev-сборки на dev.unleashedflip.com
в описании прямо сказано: сначала поставить сток, и удалять приложения перед обновлением
Механизм Asset Packs из Momentum пригодится знать и тем, кто форк ставить не собирается: паки хранятся на карте по пути /ext/asset_packs/<Имя>/ с подкаталогами Anims и Icons, выбираются в настройках прямо на устройстве, а собираются скриптом scripts/asset_packer.py из репозитория. Анимации, иконки и шрифты, таким образом, меняются вовсе без пересборки прошивки.
Плата за это тоже есть. Всякое лишнее встроенное приложение откусывает от упомянутых 110 КБ флеш-резерва, а собственная версия API приводит к тому, что .fap из официального каталога может отказаться стартовать.
🔒 Безопасность
Региональные ограничения официальной прошивки отражают разное распределение радиодиапазонов по странам, а не вендорскую вредность. Передача на неразрешённой в вашей юрисдикции частоте образует административное нарушение независимо от содержания передачи. Со сборкой форка ответственность переходит на вас целиком: ни производителя, ни автора форка в схеме больше нет. Утраченная гарантия здесь — наименьшая из возможных потерь.
Модули расширения: что подключают снаружи
Выведенные наружу восемь линий GPIO — по сути полноценная шина расширения, через которую устройство получает недостающее на плате. Отсюда и перевес каталога в сторону раздела GPIO со 112 приложениями.
Модуль
Чип
Что даёт
Чем прошивается
Wi-Fi Developer Board
ESP32-S2-WROVER
по назначению — отладка через SWD: точки останова, чтение памяти, пошаговое исполнение; штатная прошивка основана на Black Magic Debug и CMSIS-DAP, собрана средствами ESP-IDF
через USB либо по Wi-Fi; цель ./fbt devboard_flash
Она же с ESP32 Marauder
ESP32-S2
посторонняя прошивка: сканирование Wi-Fi и Bluetooth плюс набор наступательных функций
записывается поверх штатной прошивки платы
Video Game Module
RP2040
вывод видео в формате DVI-D на монитор или проектор, шестиосевой датчик движения TDK ICM-42688-P, собственная 14-контактная гребёнка GPIO
режим UF2 через разъём USB-C
Внешний CC1101
CC1101
вынесенный трансивер Sub-GHz с полноразмерной антенной; официальное приложение работает с ним через драйвер cc1101_ext
прошивка не нужна
Внешний ИК-передатчик
—
дальность там, где встроенного светодиода не хватает
прошивка не нужна
⚠️ Осторожно
ESP32 Marauder представляет собой инструментарий для тестирования Wi-Fi и Bluetooth, и законность части его функций (деаутентификация клиентов, флуд служебными кадрами) в большинстве юрисдикций ограничена собственной сетью и согласием её владельца. Плата при этом не меняется: с официальной прошивкой Flipper Devices та же самая железка работает отладчиком, а не радиоинструментом.
Внешняя радиочасть учтена в прошивке штатно: в дереве исходников присутствует applications/drivers/subghz/cc1101_ext, а SDK экспортирует семейство subghz_devices. Ни форка, ни патчей внешний CC1101 не требует.
Данные: сигналы, дампы, оформление
Существует и целый пласт экосистемы, к коду отношения не имеющий, — файлы, которые просто кладутся на карту памяти.
Инфракрасные базы. Крупнейшая общая коллекция ИК-дампов — репозиторий Flipper-IRDB. Клонировал и пересчитал: 8901 файл .ir, разложенный по 47 разделам, от телевизоров, кондиционеров и проекторов до вентиляторов, пылесосов, автомагнитол, камер, каминов и подъёмников. Место назначения — /ext/infrared, открывается штатным приложением.
Сводные коллекции. В UberGuidoZ/Flipper собран объёмный архив файлов, документации и дампов сразу всех видов: Sub-GHz, NFC, ИК, скрипты BadUSB, графика. Роль указателя по остальному играет список awesome-flipperzero с прошивками, приложениями, базами и модулями и краткими пояснениями к ним.
Оформление. Кроме Asset Packs от Momentum, сообщество сделало отдельные утилиты — менеджеры анимаций и конвертеры из GIF в формат анимаций Flipper. Монохромный экран 128×64 сам по себе исключает существование «тяжёлой» графики.
ℹ️ Справка
Привычка, экономящая нервы: скачанное из чатов и репозиториев держать в обособленном каталоге на карте, не перемешивая с записанным лично. Форматы файлов у Flipper текстовые и читаемые глазами — .ir, .sub, .nfc открываются любым редактором, и заглянуть в чужой файл перед установкой стоит.
Когда устройство перестало включаться
Новость хорошая: прошивка находится в основном контроллере STM32WB55, загрузчик там отдельный, и угробить его пользовательской сборкой практически нереально. Порядок восстановления описан в официальной документации и сводится к двум комбинациям клавиш.
✅ Как правильно
Аппарат жив, но апдейт не встаёт. Удерживайте влево + назад в течение 5 секунд; затем «назад» отпускается, а «влево» остаётся зажатой до момента, когда вспыхнет синий индикатор.
Реакции нет вообще. Держите OK + назад полминуты. Тёмный экран на этой стадии — штатная картина. Затем в системе обязан появиться DFU-девайс, а в qFlipper — кнопка Repair, разворачивающая прошивку начисто.
Когда DFU-устройство в системе не появляется, причина уже не в прошивке, а в кабеле или питании. Проверьте заведомо исправным кабелем, желательно не «зарядным».
На какой ступени остановились вы — консоль и скрипт на хосте, собственный .fap, правка официальной прошивки или форк? И вопрос к тем, кто пересобирает регулярно: тулчейн остаётся внутри репозитория или вынесен через FBT_TOOLCHAIN_PATH в общий каталог, чтобы не качать 1,2 ГБ на каждый новый клон?
Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
За просьбой «собрать прошивку для Flipper Zero» скрываются как минимум четыре непохожие задачи. Одному нужно собственное приложение, другому — правка в системном коде, третьему форк со снятыми ограничениями Sub-GHz, а четвёртому собирать не требуется вообще ничего. Выбирать между ними вслепую бессмысленно: сначала стоит разобраться, что уже лежит внутри и какой инструментарий приезжает вместе с исходниками.
Материал построен на замерах со стенда: официальный репозиторий на теге
1.4.3, Debian в контейнере с 2 vCPU и 7 ГБ RAM. Количественные оценки посчитаны по дереву исходников и файлуapi_symbols.csvиз SDK, размеры взяты с настоящей сборки, приложение на C реально скомпилировано.Что стоковая прошивка умеет без единой правки
С этого места разумно начинать, поскольку добрая половина вопросов «а можно ли собрать прошивку, чтобы…» касается уже реализованного.
За десятью пользовательскими приложениями из
applications/mainстоят не десять пунктов меню, а десять аппаратных подсистем, каждая со своим набором протоколов:subghznfclfrfidinfraredibutton,onewiregpiobad_usb,u2farchiveРядом трудятся 16 фоновых сервисов (
gui,storage,notification,power,bt,cli,loader,rpc,dolphin,region,crypto,inputи другие), 10 экранов настроек, 27 отладочных стендов и 13 примеров приложений, пригодных как каркас для своего.❗ Главное
Отсюда следует вполне практическая вещь: среди 26 парсеров карт есть
troika,plantain,social_moscow,umarsh,two_cities— распространённые транспортные карты стоковая прошивка разбирает сама. Собирать «ради поддержки моей карты» стоит лишь тогда, когда её в этом перечне не нашлось.Границы, заданные железом
Носителем прошивки служит STM32WB55 — двухъядерный чип, где прикладная часть достаётся Cortex-M4, а радиостек Bluetooth крутится на Cortex-M0+. Границы прописаны в линкер-скриптах
targets/f7жёстко: всего 1024 КБ флеш-памяти, прикладному процессору отходит всё до адреса радиостека0x080D7000, то есть 860 КБ.Собранный с
COMPACT=1 DEBUG=0образ занял у меня 750 КБ, оставив в запасе около 110 КБ. Вот почему флаги сборки — не косметика: отладочный вариант заметно объёмнее, а на форке с десятком лишних встроенных приложений этот резерв тает на глазах.Оперативная память устроена так же тесно: 192 КБ в
RAM1на всё сразу — саму прошивку, ваши приложения и графику, плюс пара блоков по 10 КБ для обмена с радиопроцессором. По этой причинеstack_sizeв манифесте и задаётся явным числом байт, а не по принципу «сколько понадобится».Что из этого видит ваш код
Статической линковки с прошивкой у
.fapнет — обращение идёт через таблицу экспортируемых символов. Таблица приезжает вместе с SDK файломtargets/f7/api_symbols.csv, и посмотреть её можно вручную:Для версии 1.4.3 набор такой: 3531 функция, 311 переменных, 319 заголовков, версия API —
87.1. По подсистемам мощность распределена неравномерно.Ядро
furi— 29 заголовков. Внизу лежит FreeRTOS, но наружу выведен свой слой: потоки (furi_thread), мьютексы, семафоры, очереди сообщений, потоковые буферы, флаги событий, таймеры, цикл событий (furi_event_loop), шинаpubsub, реестр сервисовrecord. Добавьте сюдаfuri_stringсо счётчиком ссылок — при 192 КБ оперативной памяти голыйchar*надоедает быстро.Слой железа — 47 заголовков
furi_hal_*, 488 функций. Периферия доступна напрямую:gpio,spi,i2c,adc,pwm,serial,usb(с cdc, hid, ccid),nfc,subghz,infrared,rfid,ibutton,bt,power,speaker,vibro,light,rtc,random,crypto,flash,sd,region. Задачи вида «подёргать ногой и послушать ответ» закрываются здесь, без пересборки прошивки.Интерфейс — 17 готовых элементов.
submenu,menu,button_menu,button_panel,dialog_ex,popup,widget,text_input,byte_input,number_input,text_box,variable_item_list,file_browser,loading,empty_screenи валидаторы. Писать меню с нуля незачем: экран монохромный, 128×64, и всё типовое давно отрисовано.ℹ️ Справка
Особняком стоит
lib/flipper_application— пять заголовков, отвечающих за загрузку и исполнение.fapв рантайме, включая плагины. Благодаря этому механизму 26 парсеров NFC-карт существуют отдельными файлами, а не частью монолита: приложениеnfcподтягивает нужный парсер по мере надобности.Четыре уровня и где вы окажетесь
📌 Заметка
Требования общие для всех вариантов: 64-битная Linux, macOS 12+ либо Windows 10+, поставленный
git, Python 3.8 или новее. О компиляторе заботиться не нужно — обе сборочные системы приносят собственныйarm-none-eabi-gcc, не вмешиваясь в системныйPATH.Уровень 0. Убедиться, что собирать не надо
Канал обновлений раздаёт официальные прошивки и одновременно служит самым честным ответом на вопрос о версиях:
В стабильном канале сейчас
1.4.3— релиз от 5 декабря 2025 года. Когда цель формулируется как «обновиться» или «поставить готовый чужой форк», исходники не нужны: минуты работы qFlipper или веб-апдейтера достаточно, а образ придёт подписанным и проверенным.Уровень 1. Приложение .fap за пять команд
Файлы
.fapлежат на SD-карте самостоятельно и в прошивку не входят. Их сборкой занимаетсяufbt— усечённая система сборки, качающая готовый SDK вместо полного дерева исходников.SDK приезжает на первом запуске — строкой
Using version: 1.4.3и распаковкой в~/.ufbt/current. Результатufbt create— ровно пять файлов:Манифест — обыкновенный вызов на Python, генерируемый дословно так:
Существенных полей три. В
entry_pointзаписано имя стартовой функции на C, обязанное совпасть с объявленным в исходнике. Черезstack_sizeзадаётся размер стека потока приложения: двух килобайт хватит на простую отрисовку, работа с NFC или файлами потребует больше. Отfap_categoryзависит подкаталог на SD-карте — допустимыSub-GHz,RFID,NFC,Infrared,GPIO,iButton,Bluetooth,USB,Games,Tools,Media,Debug,Examples.Возможности шаблонного
gig_hello.cисчерпываются записью в лог. Заменим его минимальным приложением с экраном и выходом по кнопке — код собран и проверен на SDK 1.4.3:Финальный порядок освобождения ресурсов не произволен: вьюпорт снимается с GUI прежде, чем освобождается. Переставьте две строки местами — и отрисовка продолжится по уже освобождённой структуре. Компилятор не возразит, а устройство перезагрузится прямо в руках.
Сборка запускается вызовом
ufbtбез параметров:Итог —
dist/gig_hello.fapна 2200 байт. Наибольшую ценность во всём выводе представляет строкаAPPCHK.⚠️ Осторожно
Пара
Target: 7, API: 87.1служит отпечатком, по которому устройство решает судьбу приложения. Первое — ревизия железа (7у Flipper Zero), второе — версия того самого экспорта изapi_symbols.csv. При другой мажорной версии API прошивка запускать приложение откажется, хотя копирование файла пройдёт без ошибок. Отсюда правило: собранный под стабильный канал.fapне обязан работать на форке или dev-сборке. SDK переключается без пересоздания проекта:Заливка с немедленным стартом на подключённом устройстве:
Файл уходит на SD-карту в подкаталог из
fap_category, после чего приложение запускается. Условие одно — закрытый qFlipper, последовательный порт он занимает монопольно.Каким путём приложения попадают на устройство
Написание собственного кода — способ отнюдь не самый распространённый. Путей всего четыре, и отличает их не удобство установки, а версия API, под которую собран бинарник.
Каталог на 437 приложений
Хостится каталог по адресу
lab.flipper.net; установка идёт либо из браузера, либо через мобильное приложение. Разбивку по разделам публикует открытый API, так что цифры проверяются самостоятельно:Распределение говорит само за себя: на
GPIOприходится 112 приложений, наGames— 102, наTools— 93, тогда как весь разделiButtonсостоит из двух. Каталог вырос вокруг внешних модулей и утилит — радиочасть закрывать нечем, её и так покрывают стоковые приложения.Своё приложение туда добавляется без загрузки исходников. В репозиторий
flipper-application-catalogотправляется единственный файлapplications/<Категория>/<app_id>/manifest.yml, содержащий ссылку на ваш репозиторий и конкретный коммит:Сборкой
.fapзанимается инфраструктура каталога. Требования не обсуждаются:idпишется строчными буквами и повторяетappidизapplication.fam,categoryобязана отвечать каталогу с манифестом, уversionформат «мажор.минор», а обновление с номером не выше прежнего отклоняют. Для скриншотов предписана штатная функция qFlipper.Чужой репозиторий как источник
Изрядная доля интересного до каталога не доходит и остаётся на GitHub. Порядок действий неизменен: клонировать, перейти в каталог приложения, вызвать
ufbt.Проверял на официальном наборе
flipperzero-good-faps— это 15 приложений под присмотром самой команды Flipper:Правок не потребовалось нигде, собралось всё. Замеренные размеры:
.fapclocksignal_generatormfkeynfc_magicweather_stationКомпанию им составляют
dap_link(Flipper в роли отладочного зонда CMSIS-DAP),avr_isp_programmer(программатор AVR),spi_mem_manager(чтение и запись SPI-флешек),air_mouse(мышь по гироскопу),mass_storage,music_player,nfc_rfid_detector,video_game_module_tool,flip_tdi,air_arkanoid.✅ Как правильно
Самостоятельная сборка чужого приложения обычно предпочтительнее скачивания готового
.fapиз чата: компиляция идёт против того SDK, который развёрнут у вас, и совместимость выясняется сразу. По трудозатратам разница — две команды.Отчего каталожное приложение молчит на форке
Правило сформулировано в официальной документации предельно сжато: мажорная версия API у
.fapсверяется загрузчиком с мажорной версией API прошивки, и при несовпадении запуска не происходит. Мажорный номер увеличивают при удалении функции из экспорта или смене сигнатуры, минорный — при добавлении новой.Практическое следствие обычно выясняется опытным путём: каталог компилирует бинарники под API официальной прошивки, из-за чего на форке с его собственными изменениями часть приложений оттуда не стартует. По этой же причине форки таскают свои паки приложений прямо внутри прошивки — совпадение версий иначе не гарантировать.
Уровень 2. Прошивка целиком: fbt
Репозиторий клонируется полностью, вместе с сабмодулями. Ключ
--recursiveобязателен: без него сборка развалится на недостающих библиотеках.Первый вызов
./fbtсо стороны похож на простой: проверяютсяtarиcurl, затем качается архив тулчейна и распаковывается в./toolchainвнутри репозитория. Ничего системного не устанавливается — компилятор соседствует с исходниками, и удаление одного каталога сносит всю сборочную среду. У меня приехалarm-none-eabi-gcc (GCC) 12.3.1.Чистая пересборка после
./fbt -cзаняла на двух ядрах 144 секунды. Для 700 МБ исходников результат неожиданный — но львиную долю объёма составляют сабмодули, до целевого образа не доходящие.Роль флагов COMPACT и DEBUG
Умолчания прописаны в
fbt_options.py:Значит, по умолчанию собирается отладочная некомпактная версия — крупнее и медленнее, но пригодная для пошаговой отладки. Повседневной прошивке нужна обратная пара:
COMPACT=1 DEBUG=0.✅ Как правильно
Трогать
fbt_options.pyне стоит — файл под контролем версий, конфликты пойдут на каждомgit pull. Рядом кладётсяfbt_options_local.py, подхватываемый автоматически:Значение
DIST_SUFFIXуходит в имена артефактов и в полеInfoпакета обновления — свои сборки отличаются от официальных сразу. ПараметрFIRMWARE_APP_SETменяет набор встраиваемых приложений: например,unit_testsсобирает прошивку-стенд вместо обычной.Артефакты и пути доставки
В
dist/f7-Cпосле моей сборки оказалось 11 файлов, разбор приведён на схеме выше. Каталог находится без запоминания суффиксов:Доставить результат на устройство можно тремя путями, неравнозначными между собой.
Третий вариант ручной:
dist/f7-C/flipper-z-f7-update-local.tgzскармливается qFlipper через «Install from file». При неуверенности в сборке предпочтителен именно он — целостность пакета проверяется до начала записи во флеш.⛔ Так делать нельзя
Ни выдёргивать кабель, ни усыплять ноутбук во время
flash_usb_fullнельзя. Обновление радиостека Core2 выполняется отдельной фазой, и обрыв на ней превращает устройство в кирпич надёжнее всего прочего, описанного здесь.Цели fbt: полный рабочий набор
Под
./fbtскрывается не одна команда, а несколько десятков целей. Ниже те, что действительно используются.fw_distdist(цель по умолчанию)updater_package/updater_minpackagecopro_distfaps.fapfap_<appid>fap_distdistflash_usb,flash_usb_fullflash,firmware_flashSWD_TRANSPORT=…, серийник —SWD_TRANSPORT_SERIAL=…jflashdebug.elfupdater_debug.elfапдейтераdebug_otheradd-symbol-fileblackmagic,openocd,get_blackmagic,get_stlinkdevboard_flashARGS="-c dev"clilint,formatlint_py,format_pylint_img,format_imglint_all,format_alldoxygen,doxyresources,icons,proto,proto_verfirmware_list,updater_listfirmware_cdb,updater_cdbcompile_commands.jsonбез полной сборкиvscode_distКогда пересобирать прошивку не хочется, есть работа с одним приложением:
Что ещё приезжает вместе со сборочной системой
Кроме целей, в комплекте идёт несколько вещей, о существовании которых обычно узнают случайно.
Оболочка с тулчейном. Получить
arm-none-eabi-gcc,gdbиobjdumpв своём шелле можно без правки путей:Переменные окружения, меняющие поведение сборки:
FBT_NOENV=1PATH(только *nix)FBT_TOOLCHAIN_PATHFBT_NO_SYNC=1FBT_VERBOSE=1Ключи командной строки. Глобальный define пробрасывается через
--extra-define=NAME=VALUE;--extra-ext-apps=app1,app2вынуждает собрать перечисленные приложения внешними;--options другой_файл.pyподменяет конфигурацию целиком;--proxy-env=VAR1,VAR2прокидывает переменные окружения в дочерние процессы, поскольку по умолчаниюfbtокружение санирует.Отладка на железе. Поддержку получили фирменный Wi-Fi devboard, ST-Link второй и третьей ревизий, J-Link, а также произвольные зонды с поддержкой CMSIS-DAP — сюда попадает и Raspberry Pi Debug Probe. По цели
debugпроисходит сборка, заливка и запуск gdb, где символы уже подставлены; описание регистров периферии в форматеSVDлежит там же.CLI: доступ к подсистемам без строчки кода
Об этой части забывают чаще прочих, а она открывает все подсистемы вообще без программирования. Консоль поднимается по USB:
Базовый набор команд, зарегистрированных в прошивке:
help,?,!,device_info,info,uptime,date,free,free_blocks,top,log,sysctl,power,sleep,vibro,led,input,gpio,i2c,storage,crypto,bt,js,factory_reset,update,unit_tests,start_rpc_session,reload_ext_cmds.За радиочасть отвечают внешние плагины, которые ищутся в
/ext/apps_data/cli/plugins. Не увидели новую команду сразу после установки приложения — помогаетreload_ext_cmds. Самое полезное:rx,tx,tx_from_file,rx_raw,decode_raw,rx_carrier,tx_carrier,chat,encrypt_keeloq,encrypt_rawscanner,field,raw,apdu,iso14a,iso14b,mfc(rdbl,wrbl,dump),mfu,mfp,felica,slix,st25,emulateread,write,emulate,raw_read,raw_emulate,raw_analyzerx,tx,decode,raw,universal,listread,write,emulate,search✅ Как правильно
Перед тем как садиться за приложение, попробуйте решить задачу консолью. Принятое
subghz rxкладёт в файл,nfc scannerпоказывает всё попавшее в поле,gpioдёргает пины. Хостовый скрипт, разговаривающий с устройством по последовательному порту, зачастую снимает задачу целиком: писать на C не приходится, версии API выяснять тоже.JavaScript там, где C избыточен
Внутри прошивки работает
js_app— интерпретатор на базе mJS. Ступень эта промежуточная — выше пунктов меню, но ниже разработки на C. Скрипт достаточно положить на SD-карту, а дальше запустить его либо из меню, либо консольной командойjs.Набор модулей:
badusb,gpio,serial,storage,notification,math,event_loop,flipper,gui,tests. Причёмguiздесь не декоративный — скрипту доступны те же элементы, что и коду на C:submenu,menu,button_menu,button_panel,dialog,popup,widget,text_input,byte_input,number_input,text_box,file_picker,loading,empty_screen.В репозитории лежат 18 примеров — каталог
applications/system/js_app/examples: отbadusb_demo.jsиuart_echo_8e1.jsдоevent_loop.js,gpio.js,storage.js,gui.js. Разовую автоматизацию это покрывает с запасом при несопоставимо более низком пороге входа.Уровень 3. Форк и его цена
Momentum и Unleashed собираются теми же целями
fbt:./fbt updater_packageдаёт TGZ,./fbt flash_usb_fullзаливает напрямую. Технически всё сводится к клонированию другого репозитория и запуску знакомых команд.Расходится наполнение. Ниже сведено то, что проекты заявляют в собственных описаниях.
dev.unleashedflip.comМеханизм Asset Packs из Momentum пригодится знать и тем, кто форк ставить не собирается: паки хранятся на карте по пути
/ext/asset_packs/<Имя>/с подкаталогамиAnimsиIcons, выбираются в настройках прямо на устройстве, а собираются скриптомscripts/asset_packer.pyиз репозитория. Анимации, иконки и шрифты, таким образом, меняются вовсе без пересборки прошивки.Плата за это тоже есть. Всякое лишнее встроенное приложение откусывает от упомянутых 110 КБ флеш-резерва, а собственная версия API приводит к тому, что
.fapиз официального каталога может отказаться стартовать.🔒 Безопасность
Региональные ограничения официальной прошивки отражают разное распределение радиодиапазонов по странам, а не вендорскую вредность. Передача на неразрешённой в вашей юрисдикции частоте образует административное нарушение независимо от содержания передачи. Со сборкой форка ответственность переходит на вас целиком: ни производителя, ни автора форка в схеме больше нет. Утраченная гарантия здесь — наименьшая из возможных потерь.
Модули расширения: что подключают снаружи
Выведенные наружу восемь линий GPIO — по сути полноценная шина расширения, через которую устройство получает недостающее на плате. Отсюда и перевес каталога в сторону раздела
GPIOсо 112 приложениями../fbt devboard_flashcc1101_ext⚠️ Осторожно
ESP32 Marauder представляет собой инструментарий для тестирования Wi-Fi и Bluetooth, и законность части его функций (деаутентификация клиентов, флуд служебными кадрами) в большинстве юрисдикций ограничена собственной сетью и согласием её владельца. Плата при этом не меняется: с официальной прошивкой Flipper Devices та же самая железка работает отладчиком, а не радиоинструментом.
Внешняя радиочасть учтена в прошивке штатно: в дереве исходников присутствует
applications/drivers/subghz/cc1101_ext, а SDK экспортирует семействоsubghz_devices. Ни форка, ни патчей внешний CC1101 не требует.Данные: сигналы, дампы, оформление
Существует и целый пласт экосистемы, к коду отношения не имеющий, — файлы, которые просто кладутся на карту памяти.
Инфракрасные базы. Крупнейшая общая коллекция ИК-дампов — репозиторий
Flipper-IRDB. Клонировал и пересчитал: 8901 файл.ir, разложенный по 47 разделам, от телевизоров, кондиционеров и проекторов до вентиляторов, пылесосов, автомагнитол, камер, каминов и подъёмников. Место назначения —/ext/infrared, открывается штатным приложением.Сводные коллекции. В
UberGuidoZ/Flipperсобран объёмный архив файлов, документации и дампов сразу всех видов: Sub-GHz, NFC, ИК, скрипты BadUSB, графика. Роль указателя по остальному играет списокawesome-flipperzeroс прошивками, приложениями, базами и модулями и краткими пояснениями к ним.Оформление. Кроме Asset Packs от Momentum, сообщество сделало отдельные утилиты — менеджеры анимаций и конвертеры из GIF в формат анимаций Flipper. Монохромный экран 128×64 сам по себе исключает существование «тяжёлой» графики.
ℹ️ Справка
Привычка, экономящая нервы: скачанное из чатов и репозиториев держать в обособленном каталоге на карте, не перемешивая с записанным лично. Форматы файлов у Flipper текстовые и читаемые глазами —
.ir,.sub,.nfcоткрываются любым редактором, и заглянуть в чужой файл перед установкой стоит.Когда устройство перестало включаться
Новость хорошая: прошивка находится в основном контроллере STM32WB55, загрузчик там отдельный, и угробить его пользовательской сборкой практически нереально. Порядок восстановления описан в официальной документации и сводится к двум комбинациям клавиш.
✅ Как правильно
Аппарат жив, но апдейт не встаёт. Удерживайте влево + назад в течение 5 секунд; затем «назад» отпускается, а «влево» остаётся зажатой до момента, когда вспыхнет синий индикатор.
Реакции нет вообще. Держите OK + назад полминуты. Тёмный экран на этой стадии — штатная картина. Затем в системе обязан появиться DFU-девайс, а в qFlipper — кнопка Repair, разворачивающая прошивку начисто.
Когда DFU-устройство в системе не появляется, причина уже не в прошивке, а в кабеле или питании. Проверьте заведомо исправным кабелем, желательно не «зарядным».
Первоисточники
💬 Вопрос к сообществу
На какой ступени остановились вы — консоль и скрипт на хосте, собственный
.fap, правка официальной прошивки или форк? И вопрос к тем, кто пересобирает регулярно: тулчейн остаётся внутри репозитория или вынесен черезFBT_TOOLCHAIN_PATHв общий каталог, чтобы не качать 1,2 ГБ на каждый новый клон?TOP HOSTERS: KAMATERA (30 дней бесплатного теста!)
Универсальный хостер №1 - 4VPS.su (2Гб\с сервера) - 10% скидка на первый заказ или 15% бонус на первое пополнение