Связка VSCode-ST-Link-Linux Настройка IDE

      Комментарии к записи Связка VSCode-ST-Link-Linux Настройка IDE отключены

Наш телеграмм канал

Возникла у меня трудность в настройке VSCode, и я решил описать процедуру настройки этой связки для того, что бы освежить себе память в будующей настроке среды разработки и может кому пригодиться эта статья. Вообще я привык писать для STM в IAR. К сожалению на данном этапе я ещё не знаю как настроить проект в IAR. Мой рассказ будет вглядеть в виде последовательных пунктов. Если будет необходимость то для определённого пункта будет ссылка на статью откуда я получил данные.

НАВИГАЦИЯ:


Установка VSCode

И так приступим. Для начала нам необходимо установить VSCode. Самый простой способ установить код Visual Studio для дистрибутивов на базе Debian / Ubuntu – загрузить и установить пакет .deb (64-разрядный) либо через центр графического программного обеспечения, если он доступен, либо через командную строку с помощью:

или так:


Создаём рабочий каталог проекта

Теперь нам нужно создать рабочий каталог для проетка. Ясоздал в домашней дирректории папку FLIPPER, а в ней уже можно закидывать свои файлы.


Клонирование файлов проекта

Далее нам нужно клонировать в свой только, что созданный каталог фалы проекта.

ссылка на интересную прошивку, группу в телеграмм канале я оставляю.


Собираем/компилируем проект

На данном этапе я не имею понятия что такое утилита ./fbt но без неё никуда…. Прошивка для Флиппера, как и пользовательские приложения, собираются с помощью утилиты fbt (Flipper Build Tool). Для создания собственных приложений нет необходимости каждый раз собирать всю прошивку целиком, однако при первом запуске утилиты fbt будут скачаны необходимые gcc-arm тулчейны.

Все результаты сборки и бинарные файлы будут помещены в директорию /dist


Установка, настройка Docker

Установим Docker, тут все немного сложнее. Есть детальная инструкция от разработчика Далее я приведу перевод этой самой инструкции сервисом яндекс-переводчика и немного мной подправленный для лучшего понимания. У меня установлен дистрибутив линукса Debian-11 с оболочкой KDE плазма. 

Установить Docker Desktop в Linux

Системные требования

Для успешной установки Docker Desktop ваш хост Linux должен соответствовать следующим общим требованиям:

  • Поддержка 64-разрядного ядра и процессора для виртуализации.
  • Поддержка виртуализации KVM. Следуйте инструкциям службы поддержки виртуализации KVM, чтобы проверить, включены ли модули ядра KVM и как предоставить доступ к устройству kvm.
  • QEMU должен быть версии 5.2 или новее. Мы рекомендуем обновить до последней версии.
  • systemd инициализирует систему.
  • Среда рабочего стола Gnome, KDE или MATE.
    • Для многих дистрибутивов Linux среда Gnome не поддерживает значки в трее. Чтобы добавить поддержку значков в трее, вам необходимо установить расширение Gnome. Например, AppIndicator.
  • Не менее 4 ГБ оперативной памяти.
  • Включите настройку сопоставления идентификаторов в пользовательских пространствах имен, см. раздел Общий доступ к файлам.

Поддержка виртуализации KVM

Docker Desktop запускает виртуальную машину, для которой требуется поддержка KVM.

KVM Модуль должен загружаться автоматически, если хост поддерживает виртуализацию. Чтобы загрузить модуль вручную, выполните:

В зависимости от процессора хост-машины, соответствующий модуль должен быть загружен:

Если вышеуказанные команды не выполняются, вы можете просмотреть диагностику, выполнив:

Чтобы проверить, включены ли модули KVM, запустите:

Настройте разрешения пользователя устройства KVM

Чтобы проверить права собственности /dev/kvm, запустите :

Добавьте своего пользователя в группу kvm, чтобы получить доступ к устройству kvm:

Выйдите из системы и снова войдите в систему, чтобы повторно оценить ваше членство в группе.

Убедитесь, что вы соответствуете системным требованиям, изложенным ранее, и соблюдаете требования, предъявляемые к дистрибутиву.

  1. Загрузите правильный пакет для вашего дистрибутива Linux и установите его с помощью соответствующего менеджера пакетов.
  2. Откройте меню приложений в Gnome / KDE Desktop и найдите Docker Desktop.
  3. Выберите Docker Desktop, чтобы запустить Docker.
    В меню Docker (китовое меню) отображается окно соглашения об обслуживании подписки Docker.

  4. Выберите Принять, чтобы продолжить. Docker Desktop запустится после того, как вы примете условия.

    Обратите внимание, что Docker Desktop не будет запущен, если вы не согласны с условиями. Вы можете принять условия позже, открыв Docker Desktop.

    Для получения дополнительной информации см. Соглашение об обслуживании подписки Docker Desktop. Мы рекомендуем вам также ознакомиться с часто задаваемыми вопросами.

Установить на Debian

Эта страница содержит информацию о том, как установить, запустить и обновить Docker Desktop в дистрибутиве Debian. 

Предварительные требования

Для успешной установки Docker Desktop необходимо:

  • Соответствует системным требованиям.
  • Установите 64-разрядную версию Debian 11.
  • Удалите техническую предварительную или бета-версию Docker Desktop для Linux. Запустить:

Для полной очистки удалите файлы конфигурации и данных at $HOME/.docker/desktop, символическую ссылку at /usr/local/bin/com.docker.cli и удалите оставшиеся служебные файлы systemd.

Если вы установили Docker Desktop для Linux tech preview или бета-версию, вам необходимо удалить все файлы, созданные этими пакетами (например ~/.config/systemd/user/docker-desktop.service

~/.local/share/systemd/user/docker-desktop.service).

Для среды рабочего стола Gnome необходимо также установить расширения AppIndicator и KStatusNotifierItem Gnome.

Для сред рабочего стола, отличных от Gnome, gnome-terminal необходимо установить:

Установить Docker Desktop

Рекомендуемый подход к установке Docker Desktop на Debian:

  1. Настройте репозиторий пакетов Docker.

  2. Загрузите последнюю версию пакета DEB.

  3. Установите пакет с помощью apt следующим образом:

Запустите Docker Desktop

Чтобы запустить Docker Desktop для Linux, найдите Docker Desktop в меню Приложений и откройте его. При этом запускается значок меню Docker и открывается панель управления Docker, сообщающая о состоянии Docker Desktop.

В качестве альтернативы, откройте терминал и запустите:

При запуске Docker Desktop создается выделенный контекст, который Docker CLI может использовать в качестве целевого и устанавливает его в качестве текущего используемого контекста. Это делается для того, чтобы избежать столкновения с локальным движком Docker, который может быть запущен на хосте Linux и использовать контекст по умолчанию. При завершении работы Docker Desktop сбрасывает текущий контекст на предыдущий.

Установщик Docker Desktop обновляет двоичные файлы Docker Compose и Docker CLI на хосте. Он устанавливает Docker Compose V2 и дает пользователям возможность связать его как docker-compose с панели настроек. Docker Desktop устанавливает новый двоичный файл Docker CLI, который включает в себя возможности облачной интеграции /usr/local/bin, и создает символическую ссылку на классический Docker CLI at /usr/local/bin/com.docker.cli.

После успешной установки Docker Desktop вы можете проверить версии этих двоичных файлов, выполнив следующие команды:

Чтобы включить запуск Docker Desktop при входе в систему, в меню Docker выберите Настройки> Общие> Запустите Docker Desktop при входе в систему.

В качестве альтернативы, откройте терминал и запустите:

Чтобы остановить Docker Desktop, выберите значок меню Docker, чтобы открыть меню Docker, и выберите Выйти из Docker Desktop.

В качестве альтернативы, откройте терминал и запустите:

Всё, с докером мы покончии. Повторяю ещё раз – полная версия установки докера есть по ссылке


Создание проекта для IDE VSCode

Далее создаём проект для работы в Visual Studio Code. для этого заходим в каталог с загруженым проектом, в моём случае это: ~/FLIPPER/unleashed-firmware$  и запускаем 


Установка модулей расширения для VSCode

Теперь нужно установить дополнительные расширения для VSCode. Что нужно установить указано в файле .vscode/extensions.json Я приведу свой список который не отличаеться от базового списка дополнений.

как устанавливать расширения в VSCode я уже рассказывать не буду, благо этих инструкций в интернете полно.


ST-LINK. Установка и настройка инструментария

Версия инструментов STLINK STMicroelectronics с открытым исходным кодом ссылка на статью

stlink – это набор инструментов с открытым исходным кодом для программирования и отладки устройств и плат STM32 производства STMicroelectronics. Он поддерживает несколько так называемых программируемых плат STLINK (и их клонов), которые используют микросхему микроконтроллера для перевода команд с USB на JTAG / SWD. На рынке доступно четыре поколения, которые поддерживаются этим набором инструментов:

  • STLINK / V1 [устарел с 21-11-2019, постоянная поддержка этим набором инструментов]
    • транспортный уровень: передача команд SCSI через USB
    • автономный программатор
    • встроенный в платы обнаружения STM32VL
  • STLINK / V2
    • транспортный уровень: необработанные команды USB
    • автономный программатор
    • встроенный в платы STM32L Discovery и STM32 Nucleo
  • STLINK / V2-1
    • транспортный уровень: необработанные команды USB
    • встроенный в некоторые платы STM32 Nucleo
  • STLINK-V3
    • транспортный уровень: необработанные команды USB
    • автономный программатор (STLINK-V3SET, STLINK-V3MINI, STLINK-V3MODS)
    • встроенный в некоторые платы STM32 Nucleo (STLINK-V3E)

На уровне пользователя нет разницы в обработке или работе между этими различными версиями.

Набор инструментов STlink включает:

  • st-info – инструмент для программирования и получения информации о микросхемах
  • st-flash – инструмент для управления флэш-памятью
  • st-trace – средство ведения журнала для записи информации о выполнении
  • st-util – сервер GDB (поддерживается в Visual Studio Code / VSCodium через плагин Cortex-Debug)
  • stlink-lib – библиотека связи
  • stlink-gui – графический интерфейс [необязательно]

Попробуте каждую из команд. Если будет сообщение об ошибке примерно такого содержания 

тогда необходимо установить права на управление USB. По этой ссылке можно прочесть инструкцию как это правильно сделать. Я поступаю просто:

Но я всё же напишу тут процедуру решения вопроса с ошибкой. За перевод сильно не пинайте.

  1. Выполните следующую команду:
    $ sudo chmod -R 777 /dev/bus/usb/
  2. Создайте файл ’xx-local.rules’ в папке /etc/udev/rules.d:
    $ sudo nano /etc/udev/rules.d/100-local.rules
  3. Добавьте следующее содержимое:
    SUBSYSTEM==”usb”, ATTRS{idVendor}==”0483″, ATTRS{idProduct}==”374f”, OWNER=”dima”, GROUP=”plugdev”, TAG+=”uaccess”
    где “ubuntu” – это ваше имя пользователя.
  4. Добавьте вашего пользователя в группу plugdev (замените своим именем пользователя):
    $ sudo adduser your_username plugdev
  5. Перезапустите правила udev:
    $ sudo udevadm control –reload-rules
  6. Отключите и подключите USB-устройство.

Нужно уточнить третий пункт выше. Необходимо получить данные своего USB устройства   ATTRS{idVendor}==”0c45″ и ATTRS{idProduct}==”6366″ можно узнать введя вот эту команду: 

Получим такой результат:

после ID следует два числа. В моём случае это ID 0483:374f Первое число до двоеточия это ATTRS{idVendor} второе число, после двоеточия это ATTRS{idProduct} Тем самым строка в файле 100-local.rules  будет выглядеть таким образом SUBSYSTEM==”usb”, ATTRS{idVendor}==”0483″, ATTRS{idProduct}==”374f”, OWNER=”dima”, GROUP=”plugdev”, TAG+=”uaccess” 

Пожалуйста, смотрите следующий URL для получения подробной информации:
https://askubuntu.com/questions/978552/how-do-i-make-libusb-work-as-non-root

Поддерживаемые операционные системы и комбинации оборудования

В настоящее время известные рабочие цели MCU перечислены в devices_boards.md .

Список поддерживаемых операционных систем можно найти в version_support.md .

Учебное пособие и ИНСТРУКЦИИ

Наш учебник может помочь вам с некоторыми расширенными задачами и дополнительной информацией.

Установка

Linux / Unix:

Мы рекомендуем устанавливать stlink-toolsиз репозитория пакетов используемого дистрибутива:

Примечание: Поскольку пакеты, распространяемые через репозитории Debian и Ubuntu, отличаются от нашего автономного deb-пакета, мы рекомендуем использовать последний (см. Ссылку ниже). Он предоставляет возможность обрабатывать и исправлять проблемы с пакетами, о которых сообщают пользователи, непосредственно в рамках проекта и не является избыточным для каких-либо ограничений, вытекающих из внешних рекомендаций по обслуживанию.

  • Debian Linux: (Ссылка)
  • Ubuntu Linux: (Ссылка)
  • Arch Linux: (Ссылка)
  • Alpine Linux: (Ссылка)
  • Fedora: (Ссылка)
  • FreeBSD: пользователи могут устанавливать из freshports
  • macOS: поддержка macOS закончится с версией v1.7.1. Вместо этого используйте версию v1.7.0 (текущая основная ветка) и соответствующую документацию.

Утилита fbt (Flipper Build Tool) Подробное описание.

Теперь подробно про ./fbt 

Ссылка на оригинал статьи.

Инструмент для сборки Flipper

FBT – это точка входа для команд и утилит, связанных с прошивкой. Он вызывается ./fbt в корневом каталоге проекта прошивки. Внутренне это оболочка вокруг системы сборки scons.

Окружающая среда

Для использования fbt вам нужно только git установить в вашей системе.

fbt по умолчанию загружает и распаковывает предварительно созданный набор инструментов, а затем изменяет переменные среды для себя, чтобы использовать его. Это не загрязняет путь вашей глобальной системы с помощью набора инструментов.

Однако, если вы хотите использовать инструменты, поставляемые с набором инструментов снаружи fbt, вы можете открыть оболочку fbt с правильно настроенной средой.

  • В Windows просто запустите scripts/toolchain/fbtenv.cmd.
  • В Linux и macOS запускайте source scripts/toolchain/fbtenv.sh в новой оболочке.

Если ваша система не поддерживается готовыми вариантами набора инструментов или вы хотите использовать пользовательские версии зависимостей, вы можете set FBT_NOENV=1fbt пропустит настройку набора инструментов и среды и будет ожидать, что все инструменты будут доступны в вашей системе PATH. (эта опция недоступна в Windows)

Если FBT_TOOLCHAIN_PATH задана переменная, fbt будет использовать этот каталог для распаковки toolchain. По умолчанию он загружает toolchain в toolchain корневой каталог репозитория.

Если вы хотите включить дополнительный отладочный вывод для fbt сценариев управления набором инструментов и скриптов, вы можете set FBT_VERBOSE=1.

fbt всегда выполняется git submodule update –init при запуске, если вы не установили FBT_NO_SYNC=1 в среде:

  • В Windows он set “FBT_NO_SYNC=1” находится в оболочке, из которой вы работаете fbt
  • На * nix это $ FBT_NO_SYNC=1 ./fbt

Есть и другие переменные, управляющие базовым fbt поведением. Подробности см. в fbt источниках & fbt envscripts.

Вызов FBT

Чтобы выполнить сборку с помощью FBT, вызовите его и укажите параметры конфигурации и цели для сборки. Например:

Чтобы запустить очистку (подумать make clean) для указанных целей, добавьте -cопцию.

Каталоги сборки

fbt создает программу обновления и прошивку в отдельных подкаталогах build, и их имена зависят от настроек оптимизации (COMPACT & DEBUGoptions). Однако для простоты интеграции с IDE каталог последнего встроенного варианта всегда связан как built/latest. Кроме того, compile_commands.json генерируется в этой папке (используется для поддержки завершения кода в IDE).

build/latest символьная ссылка и база данных компиляции обновляются только при достижении целей сборки прошивки, то есть при повторной сборке самой прошивки. Выполнение других задач, таких как прошивка прошивки или создание пакетов обновлений для другой конфигурации отладки / выпуска или целевого оборудования, не обновляет built/latest каталог, указывающий на эту конфигурацию.

Интеграция с VSCode

fbt включает базовую конфигурацию среды разработки для VS Code. Запустите,

чтобы развернуть его. Это скопирует исходную конфигурацию среды в .vscode папку. После этого вы можете использовать эту конфигурацию, запустив VS Code и выбрав корневую папку прошивки в меню “Файл> Открыть папку“.

  • При первом запуске вам будет предложено установить рекомендуемые плагины. Мы настоятельно рекомендуем установить их для лучшего опыта разработки. Вы можете найти их список в .vscode/extensions.json .
  • Основные задачи сборки вызываются в меню Ctrl + Shift + B.
  • Для отладки требуется поддерживаемый зонд. Это включает в себя:
    • Плата разработки Wi-Fi со стандартной прошивкой (blackmagic).
    • ST-Link и совместимые устройства.
    • J-Link для прошивки и отладки (только в VSCode). Обратите внимание, что инструменты J-Link не входят в наш набор инструментов, и вы должны загрузить их самостоятельно и поместить в свой системный ПУТЬ.
  • Без поддерживаемого зонда вы можете установить прошивку на Flipper, используя метод установки USB.

Цели FBT

fbt отслеживает внутренние зависимости, поэтому вам нужно только создать цель самого высокого уровня, которая вам нужна, и fbt убедиться, что все, от чего они зависят, актуально.

Высокий уровень (то, что вам, скорее всего, нужно)

  • fw_dist – сборка и публикация прошивки в dist папке. Это цель по умолчанию, когда другие не указаны.
  • fap_dist – создание внешних плагинов и публикация в dist папке.
  • updater_packageupdater_minpackage– создайте пакет самообновления. Минимальная версия включает только DFU-файл прошивки; полная версия также включает в себя радиостек и ресурсы для SD-карты.
  • copro_dist – пакет двоичных файлов Core2 FUS + stack для qFlipper.
  • flash – прошить подключенное устройство с помощью OpenOCD через ST-Link.
  • flash_usbflash_usb_full– сборка, загрузка и установка пакета обновлений на устройство через USB. Подробнее см. updater_packageи updater_minpackage.
  • debug – сборка и прошивка прошивки, затем подключение с помощью gdb с загруженным файлом firmware .elf.
  • debug_otherdebug_other_blackmagic– присоединить GDB без какой-либо загрузки .elf. Это позволит вам вручную добавлять внешние .elf файлы add-symbol-fileв GDB.
  • updater_debug – прикрепите GDB с .elf загруженным обновлением.
  • blackmagic – отладка прошивки с помощью Blackmagic probe (плата разработки WiFi).
  • openocd – просто запустите OpenOCD.
  • get_blackmagic – вывод адреса blackmagic в удаленном формате GDB. Полезно для интеграции в IDE.
  • get_stlink – вывод серийных номеров для подключенных датчиков STLink. Используется для указания адаптера с OPENOCD_ADAPTER_SERIAL=…помощью .
  • lintformat – запустите clang-format в исходном коде C, чтобы проверить и переформатировать его в соответствии со .clang-format спецификациями.
  • lint_py, format_py – запустите черный цвет в исходном коде Python, создайте системные файлы и манифесты приложений.
  • firmware_pvs – создайте отчет PVS Studio для прошивки. Требуется, чтобы PVS Studio была доступна в вашей системе PATH.
  • cli – запуск сеанса командной строки Flipper через USB.

Цели прошивки

  • faps – создайте все внешние и подключаемые приложения как .faps.
  • fbt также определяет цели для каждого приложения. Например, для приложения с appid=snake_game целевыми именами являются:
    • fap_snake_game и т.д. – создайте отдельное приложение .fap по его идентификатору приложения.
    • Проверьте–extra-ext-apps, не требуется ли принудительное добавление дополнительных приложений во внешнюю сборку.
    • fap_snake_game_list и т.д. – сгенерировать исходный код + список ассемблеров для приложений .fap.
  • flashfirmware_flash – прошить текущую версию на подключенное устройство с помощью OpenOCD по ST-Link.
  • jflash – прошейте текущую версию на подключенное устройство с помощью JFlash с помощью J-Link probe. Исполняемый файл JFlash должен быть на вашем $PATH компьютере.
  • flash_blackmagic – прошейте текущую версию на подключенное устройство с помощью Blackmagic probe.
  • firmware_allupdater_all – создайте базовый набор двоичных файлов.
  • firmware_listupdater_list– сгенерировать исходный код + список ассемблера.
  • firmware_cdbupdater_cdb – сгенерировать compilation_database.json файл для внешних инструментов и IDE. Он может быть создан без фактической сборки прошивки.

Активы

  • resources – ресурсы сборки и их файлы манифеста
    • dolphin_ext – обрабатывать анимацию дельфинов для SD-карты
  • icons – создание .c +.h значков из ресурсов PNG
  • proto – генерировать .pb .c +.pb .h для .proto исходных текстов
  • proto_ver – генерировать .h с помощью версии protobuf
  • dolphin_internaldolphin_blocking– генерировать .c +.h для соответствующих ресурсов dolphin

Параметры командной строки

  • –options optionfile.py (значение по умолчанию fbt_options.py) – загрузить файл с несколькими значениями конфигурации
  • –extra-int-apps=app1, app2, appN – принудительно создавать перечисленные приложения как внутренние с firmwareцелью
  • –extra-ext-apps=app1, app2, appN – принудительно создавать перечисленные приложения как внешние с firmware_extapps целью
  • –proxy-env=VAR1, VAR2 – дополнительные переменные среды для предоставления доступа к подпроцессам, порожденным fbt. По умолчанию fbt очищает среду выполнения и не пересылает все унаследованные переменные среды. Вы можете найти список переменных, которые всегда пересылаются в environ.sconsфайле.

Конфигурация

Переменные конфигурации по умолчанию устанавливаются в файле конфигурации: fbt_options.py. Значения, установленные в командной строке, имеют более высокий приоритет над файлом конфигурации.

Вы можете узнать доступные опции с ./fbt -h помощью .

Набор приложений для прошивки

Вы можете создавать индивидуальные сборки встроенного программного обеспечения, изменяя список приложений, которые будут включены в сборку. Предустановки приложений настраиваются с FIRMWARE_APPS помощью опции, которая является map(configuration_name:str -> application_list:tuple(str)). Чтобы указать набор приложений для использования в сборке, задайте FIRMWARE_APP_SET его имя. Например, чтобы создать образ прошивки с модульными тестами, запустите ./fbt FIRMWARE_APP_SET=unit_tests.

Ознакомьтесь с fbt_options.py подробностями.

Ну вот вроде и всё. Если я замечу ошибки или будут дополнения я просто буду корректировать или редактировать свой пост. Всем спасибо. Буду рад знять, что моя статья кому то да пригодилась.