Flipper Zero — швейцарский нож для гиков и пентестеров с открытым исходным кодом.
Как только я получил это устройство - я сразу стал изучать как разрабатывать fap расширения, которые помогли бы мне в повседневной жизни и в работе. 
В этой статье я расскажу как настроить Clion для сборки прошивки, приложений, и отладки через Wi-Fi Debugger Module.
Как оказалось, ребята из Flipper Inc разработали свой инструмент для стандартизации сборки и отладки на разных платформах, чтобы любой энтузиаст смог быстро установить необходимые инструменты и в пару кликов выполнять нужные для разработки операции.
Для VSCode даже существует готовое окружение с различными макросами в виде shell скриптов.
Сразу оговорюсь, что многое я подчеркнул из личного блога Савелия Красовского: https://krasovs.ky/2022/11/01/flipper-zero-clion.html, но дополнил инструкцию так, чтобы можно было отлаживать и fap приложения. 
Приступаем к настройке
Для начала нужно клонировать git репозиторий с прошивкой флиппера, например, в папку с проектами Clion:
git clone --recursive https://github.com/flipperdevices/flipperzero-firmware.gitВ репозитории находятся необходимые скрипты для установки инструментов сборки и отладки.
Далее установим необходимые утилиты, исполнив команду в папке проекта:
./fbtPython скрипты должны скачать необходимые утилиты (GDB, GCC и так далее) и собрать прошивку.
Настройка основного функционала
Автодополнение кода и подсветка синтаксиса
После установки fbt можно открыть проект в Clion и приступить к базовой настройке.
Сперва сформируем CDB (Compilation Database) и импортируем в Clion.
Это нужно для автодополнения кода.
Исполним 3 команды:
./fbt
./fbt faps
./fbt firmware_cdbПосле чего переходим в папку build -> lastes и копируем файл compile_commands.json в корень проекта. Затем нужно нажать по файлу правой кнопкой мыши и выбрать Load Compilation Database Project. Готово! Можно удалить файл из корня проекта.
Я пока не нашёл как автоматически подтягивать обновлённую базу из этого файла, если кто знает - добро пожаловать в комментарии :)
UPD: Ниже будет описание макроса, который после сборки прошивки копирует compile_commands.json в корень проекта.
Осталось добавить Toolchain, для этого переходим в File -> Settings -> Build, Execution, Deployment -> Toolchains и создаём следующую конфигурацию: 
- C Compiler: - toolchain/{Ваша ОС}/bin/arm-none-eabi-gcc
- С++ Compiler: - toolchain/{Ваша ОС}/bin/arm-none-eabi-g++
- Debugger: - toolchain/{Ваша ОС}/bin/arm-none-eabi-gdb-py
На Mac с M1 у меня не проходит проверка Cmake, но это не важно, так как собирать прошивку и приложения мы будем через fbt.

Добавляем удобные макросы как в VSCode
Как я и говорил ранее, для VSCode существует готовое, легко импортируемое окружение с множеством заданий, запускаемых в один клик из IDE. Мы попробуем сделать что-то подобное
Все задачи мы будем добавлять следующим образом: 
- 
Кликнем вверху проекта Edit Configurations 
- Нажмём + и выберем - Shell Script
- Выберем Script Text и добавим - Working Directory (Папка с проектом)
Для работы нам потребуются следующие задачи:
./fbtКоманду можно дополнить таким образом, чтобы compile_commands.json копировался в корень проекта (если нужно):
./fbt && cp build/latest/compile_commands.json {Путь к проекту}/flipperzero-firmware
./fbt FORCE=1 flash_blackmagic
./fbt fap_dist
./fbt launch_app APPSRC={Папка с вашим приложением}
Вы можете расширить или изменить этот список, обратившись к документации. Для старта хватит пока и этого.
Настройка удалённого отладчика
Отладка будет осуществляться через удалённый GDB сервер.
Опять переходим в Edit Configurations вверху проекта и создаём конфигурацию Remote Debug:

- Debugger - выбираем тот, который добавляли в Toolchain ранее. 
- 'target remote' argsзаполняем выводом команды- ./fbt get_blackmagic(Wi-Fi дебагер должен быть подключён). Желательно настроить на Wi-Fi роутере статический ip для этого устройства, чтобы не менять конфигурацию.
- Symbol file: - build/latest/firmware.elf- Путь к собранному elf файлу прошивки флиппера.
- Sysroot: - build/latestПуть к папке с собранной прошивкой
Перед запуском отладчика нужно выполнить некоторые команды на GDB сервере. 
Для этого мы создадим Before launch блок External tool, нажав на +:

Блок будет выглядеть так:

Tool Settings
- Program: Выбираем тотже отладчик, что и в Toolchain: - toolchain/{Ваша ОС}/bin/arm-none-eabi-gdb-py
- Arguments: - -q -ex "target remote {заполняем выводом команды ./fbt get_blackmagic}" -ex "monitor swdp_scan" -ex "attach 1" -ex "set confirm off" -ex "set mem inaccessible-by-default off" -ex "source debug/flipperapps.py" -ex "fap-set-debug-elf-root {Тут нужен полный путь к папке .extraps в папке с собраной прошивкой, например /Users/user/CLionProjects/flipperzero-firmware/build/latest/.extapps}" -ex "quit" build/latest/firmware.elf
- Working Detictory: Путь к папке с проектом 
Теперь нужно создать файл .gdbinit в корневой папке проекта. 
Файл заполнить следующим содержимым:
set confirm off
set trace-commands on
define target remote
target extended-remote $arg0
set mem inaccessible-by-default off
source debug/flipperapps.py
fap-set-debug-elf-root {Тут нужен полный путь к папке .extraps в папке с собраной прошивкой, например /Users/user/CLionProjects/flipperzero-firmware/build/latest/.extapps}
endГотово! Сохраняем.
Теперь проверим отладку: 
- Чтобы отладка заработала, нужно загрузить собранную прошивку в флиппер. Перед загрузкой прошивки рекомендую сделать бекап в приложении qFlipper, чтобы сохранить все настройки. Для загрузки прошивки используем задачи, созданные ранее: - ./fbtи- ./fbt FORCE=1 flash_blackmagic
- Нужно поставить точку остановки в файле firmware/targets/f7/furi_hal/furi_hal_os.c, на 154 строке: 

- Запускаем отладку 
В результате должна появиться отладочная информация: 

Готово! Мы настроили удалённый отладчик!
Как отлаживать приложения
Приложения в Flipper Zero хранятся на SD карте и попадают в оперативную память только когда мы их запускаем. Поэтому, чтобы отладчик обнаружил нужный сектор, следует поставить точку остановки после загрузки приложения в память, чтобы отладчик успел вычитать ту область, в которую загрузилось приложение.
Для этого сначала поставим точку остановки в функции загрузчика fap расширений: applications/main/fap_loader/fap_loader_app.c, на 107 строке.

После этого можно поставить точки остановки в файлах вашего приложения, и начать отладку:
- Запустить отладку. 
- На флиппере запустить ваше приложение. 
- После того как вы запустили приложение - мы должны будем остановиться на точке, которую мы ранее поставили в - fap_loader_app.c
- 
Нажимаем Resume Programm, после чего запустятся точки остановки, поставленные в коде приложения:  

Готово! Можно приступать разработке со всеми удобствами!
 
           
 
koteeq
Совет: выполнять
brew bundleиpip3 installне нужно, достаточно выполнить./fbtи весь тулчейн со всеми зависимостями установится автоматически. Даже если вы поставите компоненты тулчейна (например,gcc-arm-none-eabi) самостоятельно, они всё равно не будут задействованы по умолчанию.UPD: Сейчас проверила, команда
brew bundleпо идее и не выполнится. Мы удалили Brewfile из репозитория в конце декабря.polarikus Автор
Спасибо! Подправлю