- stm32: работа с st-link в linux
- Программирование микроконтроллеров stm32 при помощи stlink
- Отладка программы для stm32 при помощи st-link
- ABUKSIGUN
- Eclipse + gcc + stlink
- Общая схема
- ST-LINK
- Eclipse
- Прошивка и отладка
- Возможные проблемы
- How to install the debugging components
- Quicklinks
- Overview
- GDB client
- Non-GNU toolchains
- GDB server & drivers
- Alternate solutions
- OpenSDA
- Eclipse debugging plug-ins
- Ubuntu + Eclipse + Code Sourcery + OpenOCD + j-link + ARM, или «Быстрый старт для сомневающихся»
stm32: работа с st-link в linux
Микроконтроллеры stm32 прошиваются разными способами, например, через COM порт, или по USB, используя режим dfu. Также прошивку можно заливить по интерфейсу SWD.
Для подключения к SWD используется или отдельное устройство st-link, или st-link, входящий в отладочные платы семейства discovery.
Программирование микроконтроллеров stm32 при помощи stlink
Для того чтобы залить прошивку на микроконтроллер stm32 из под linux потребуется утилита st-flash. Готовых пакетов с этой утилитой нет, поэтому её надо собирать из исходников.
Скачиваем исходники st-link:
Добавляем правило для udev, чтобы к st-link был доступ не только у root’a:
Теперь можно прошивать:
Отладка программы для stm32 при помощи st-link
Используя st-link можно не только заливать прошивку но и отлаживать её. Для этого запускаем gdb сервер st-util.
Затем запускаем arm-none-eabi-gdb и в нем выполняем команды.
Подключаемся к gdb серверу:
Загруженный файл заливаем в микроконтроллер:
Устанавливаем breakpoint на функцию main:
Запускаем выполнение программы:
Поле того, как отладчик остановится на функции main, можно выполнять пошаговую отладку:
В арсенале отладчика gdb есть ещё куча полезных команд. А если связать gdb c eclipse, то получиться довольно удобная среда с графическим интерфейсом.
Источник
ABUKSIGUN
Eclipse + gcc + stlink
- Получить ссылку
- Электронная почта
- Другие приложения
Общая схема
Рис 1. Схема работы |
На схеме,
- Eclipse — открытая, широко известная IDE.
- arm-none-eabi-gdb — Клиентская часть отладчика для исполняемых файлов платформы ARM, без eabi.
- arm-none-eabi-gcc — Кросскомпилятор. На выходе исполняемые файлы для ARM без eabi.
- st-util — Программа из набора stlink, которая подключается к ST-LINK по USB и работает как серверная часть отладчика. Таким образом, arm-none-eabi-gdb подключается к st-util по TCP/IP и обменивается с ним отладочной информацией.
Теперь, в чем плюсы и минусы, в сравнении с другими средствами прошивки и отладки.
- Приходится запускать st-util перед тем, как станет возможной прошивка.
- Периодические глюки разных элементов системы.
- Нет возможности смотреть состояние переменных без остановки отладки.
- Разумеется, абсолютная бесплатность решения.
- Возможность отладки платы, подключенной к удаленному компьютеру. Для этого, нужно просто запустить st-util на удаленной машине.
- Среда Eclipse с плагином CDC имеет очень удобную подсветку синтаксиса, ошибок и систему автодополнения кода. Такого нет в IAR.
- Кроссплатформенное решение, может работать под ARM. STLINK можно скомпилировать под любую Windows и Linux систему (в том числе, Android).
- Возможность параллельной отладки нескольких программ, запущенных на разных платформах.
ST-LINK
./autogen.sh
./configure
make && sudo make install
Эта команда запустить st-util в цикле, в фоновом режиме и не будет беспокоить вас вводом пароля. Завершить цикл можно удерживанием сочетания клавиш Ctrl+C.
sudo apt-get install arm-none-eabi-gcc
Eclipse
Процесс настройки Eclipse для отладки через stlink.
1) Качаем Eclipse Kepler тут
1.1) Распаковываем архив командой tar -xvf
1.2) В архиве запускаем исполняемый файл eclipse
4) Отмечаем галочками (некоторые пакеты могут быть уже установлены в версии Eclipse для C++)
C/C++ Development Tools
C/C++ Development Tools SDK
C/C++ GCC Cross Compiler Support
C/C++ GDB Hardware Debugging
Жмем Next и устанавливаем.
5) Help->Install New Software.
Жмем Add
Name: arm-plugin
Location: http://gnuarmeclipse.sourceforge.net/updates
Отмечаем галочками все
Жмем Next и устанавливаем.
6) File->New->Other
Выбираем C++ Project
Шаблон проекта выбираем в зависимости от версии контроллера.
Все настройки в соответствии с вашей версией контроллера. Еще, вас попросят указать путь к тулчейну и решить, что сделать с библиотеками.
Мой тулчейн находится тут: /usr/arm-none-eabi.
На счет библиотек, если не знаете, что выбирать — выбирайте libnosys. libnosys — это заглушка для функций стандартной библиотеки.
Рис 2. Окно настройки микроконтроллера |
Все! Проект создан.
Теперь вы можете скомпилировать проект.
Прошивка и отладка
Идем Run->Debug Configurations
Дважды кликаем на GDB Hardware Debugging.
И настраиваем все как на скришотах (За исключением поля C/C++Application. Тут должен быть путь к бинарнику с расширением .elf):
Рис 3. Окно настройки отладчика. |
Рис 4. Окно настройки отладчика. |
На этом все. Дальше, вы работаете только с Eclipse. Главное, не забывать запускать отладчик.
Возможные проблемы
gcc-arm-none-eabi 4-8-2014q2-0saucy9
linux-libc-dev 3.13.0-32.57
Источник
How to install the debugging components
Quicklinks
If you know what you are doing, you can directly skip to:
Overview
When debugging Arm applications, generally two main components are required:
- a hardware JTAG/SWD probe
- several software components
The hardware probe can be either a separate device, connected via a flat cable to the debugged board, or, for many affordable discovery boards, can be directly integrated on the evaluation board, having a separate USB connector.
For several specific cases, the hardware probe is not mandatory, debugging being possible inside emulators, like QEMU.
As for software, debugging is generally a complex operation, and in Eclipse it requires multiple components:
- one or more Eclipse Debugging plug-ins
- the GDB debugger (client) application
- the GDB server application
- the hardware drivers required by the JTAG/SWD probe
The Eclipse Embedded CDT project recommends three debugging solutions:
- the SEGGER J-Link probe & GDB server, as a highly professional solution, supporting both JTAG and SWD, plus SWO trace output;
- the OpenOCD application as an universal tool, supporting most cheap JTAG probes, but with limitations (currently it does not support SWD and implicitly no SWO, it is slower, configuration might be sometimes cryptical, there are many driver incompatibilities on Windows, etc);
- the xPack QEMU Arm emulator, supporting several Cortex-M boards.
For an explanation why the SEGGER J-Link was selected, please go to the J-Link Debugging page and read the introduction section.
GDB client
The GDB client (GDB stands for GNU Debugger) is part of the GNU Toolchains, and is located in the same folder as all GNU toolchain binaries (compiler, linker, etc). The application name uses the same prefix/suffix as the compiler (for example, the debugger for embedded applications is arm-none-eabi-gdb).
To check if GDB is functional on your machine, use the following command (adjust the path for your system):
The presence of a GDB as part of a GNU toolchain is mandatory, and it is recommended that the version of the GDB client matches the toolchain version. Generally only debugging .ELF applications is possible, and these applications must be compiled to include GNU compatible debugging information (like dwarf).
Non-GNU toolchains
Debugging applications generated by non-GNU toolchains (like the obsolete Arm CC), although not completely excluded, is not supported.
GDB server & drivers
For the GDB server, there are three recommended solutions, J-Link GDB Server, OpenOCD and QEMU. Detailed installation instructions are available in separate pages:
Normally if you already have a J-Link probe (or an OpenSDA J-Link compatible evaluation board), there is no absolute need to install OpenOCD, but it is sometimes useful to have a back-up solution in case you want to compare different behaviours, so the recommendation is to have both installed.
Similarly, if you do not have a J-Link (yet), there is no need to install the J-Link support at this moment; you can very well start your tests with OpenOCD alone. However, especially if your evaluation board has an integrated JTAG, once you overcome the initial apprentice status and want to use more advanced debug techniques, like SWO traces, or even want to debug your own boards, you will need an external JTAG, and in this case the recommended solution is to use J-Link.
Alternate solutions
J-Link and OpenOCD are not the only existing solutions, but probably are the most portable ones. J-Link is a single piece of hardware that can be used with most Arm processors. At the other end of the spectrum is OpenOCD, a single piece of software that, within limits, can be used with most JTAG probes, especially on GNU/Linux.
If portability is not your concern, and you prefer other GDB servers, please feel free to use them, but Eclipse Embedded CDT does not provide support for them.
To save you time, we compiled a list of other GDB servers, with some of their features and limitations:
- the original STM32 ST-Link Utility software, available from STM as part number STSW-LINK004, also implements a GDB server for the ST-LINK probes; runs on Windows only
- the stlink GDB server from texane, a GitHub project, implements the ST-LINK protocol; can be compiled from sources on GNU/Linux and macOS; on Windows can be compiled using mingw;
- the CooCox GDB server; supports multiple JTAG probes; runs on Windows only
- the Atollic GDB server, part of the Atollic suite; the server seems to start separately, but attempts to connect to it fail, probably due to some protection checks
OpenSDA
Another interesting solution is Freescale’s OpenSDA debug/programming interface. For the Kinetis L based Freedom Development Boards, SEGGER provides a high performance OpenSDA implementation fully compatible with the J-Link Lite, so the J-Link plug-in can be successfully used for these evaluation boards without having a physical J-Link probe. More details on installing OpenSDA can be found on MCU on Eclipse.
Eclipse debugging plug-ins
The debugging plug-ins come together with the other Eclipse Embedded CDT plug-ins; if you install the full Eclipse IDE for Embedded C/C++ Developers, package, they are includded; if you use an alternate install method the debug plug-ins should be installed in the same step, detailed in the [plug-ins install]/plugins/install-alternate/ page.
Be sure you enable the entries named Embedded C/C++ J-Link Debugging, Embedded C/C++ OpenOCD Debugging and Embedded C/C++ QEMU Debugging.
Specific plug-in documentation is available from separate pages:
Comments on the content of this page that might be useful for other readers are welcomed here. For question and general support, please use the project forums.
Источник
Ubuntu + Eclipse + Code Sourcery + OpenOCD + j-link + ARM, или «Быстрый старт для сомневающихся»
Цель этой статьи — показать, что установка, наладка и «запуск в эксплуатацию» тулчейна для работы с ARM’ами довольно проста и занимает вместе с перекурами около получаса. Ключевое слово в названии — Ubuntu, или, вообще говоря, Linux. Большинство материала в сети рассчитано на аудиторию пользователей MS Windows, и перейти на Linux мешает, или пугает, отсутствие руководства, в котором был бы более-менее популярно описан процесс. Да, это немного сложнее, чем установка Keil+SEGGER, но зато потом, надеюсь, вы оцените преимущества работы в Linux.
Эта процедура проверена для Ubuntu 11.04 и Linux Mint 12.
Имеем:
с одной стороны — Linux,
с другой стороны — пациент с ARM мозгом + j-link brain surgery helper.
План действий:
1. Установка Code Sourcery G++ Lite for ARM EABI
2. Установка Eclipse и GNU ARM плагина
3. Настройка GNU ARM плагина
4. Установка OpenOCD
5. Заставить всё это работать
6. Прибраться
1. Установка Code Sourcery G++ Lite for ARM EABI
Можно браузером скачать инсталятор вот по этой ссылке, но мы выберем путь попроще. Поэтому откроем консоль…
После окончания загрузки распакуем полученный архив
Добавитм путь к бинарникам Code Sorcery в переменную PATH
Добавим туда строчкуЧтобы изменения вступили в силу, нужно перелогиниться.
2. Установка Eclipse IDE for C/C++ Developers
Скачать можно браузером отсюда, но мы…
После окончания загрузки
Теперь нужно в Eclipse добавить поддержку для GDB Hardware Debugging
Меню Help->Install New Software…
В поле Work With добавляем жмём Enter и ставим вот эту галочку
Далее продолжаем пока не закончится установка, после чего выбираем Restart Now.
Тепер установим GNU ARM плагин.
Снова Меню Help->Install New Software…
В поле Work With добавляем и жмём Enter
Далее продолжаем пока не закончится установка, после чего выбираем Restart Now.
3. Настройка GNU ARM плагина
Cоздаём новый проект:
Меню File->New->C Project…
Выглядит это вот так
Сразу жмём Finish и получаем пустой проект для ARM’ов. Дальнейший путь зависит от того, с каким МК вы будете работать. Рассмотрим на примере горячо любимого народными массами, легендарного STM32, ибо я других не знаю. Итак, вы уже скачали последнюю версию библиотеки стандартной периферии с сайта STMicroelectronics. Нет? Тогда
Из всего этого нам нужны исходники для ядра и для периферии. Положим их в нужное место, например вот так:
Для решения минимальной задачи необходим скрипт для линкера. Его можно взять из какого-нибудь шаблона для Atollic TrueSTUDIO. Скопируем нужный файл в корень проекта:
и сообщим об этом линкеру
Меню Project->Properties->C/C++ Build->Settings->вкладка Tool Settings->ARM Sourcery Linux GCC C Linker->General
В поле Script File укажем путь к файлу
Теперь средствами Eclipse добавим в проект файл со startup-кодом. Возьмём нужный файл из какого-то примера для TrueSTUDIO
Меню File->Import…
Комментарий по поводу файла startup-кода. Во-первых, изза глюка в CDT плагине, нужно изменить расширение файла с .s на .S. Во вторых, в самом файле закомментируйте пару строчек.
Подробнее говорить не буду, т.к. это не входит в рамки нашей задачи.
Теперь добавим main.c
Меню File->New->Source File…
и наполним его минимальным смыслом
Теперь можно собрать проект. Жмём Ctrl-B и на этом пункт №3 будем считать завершённым.
4. Установка OpenOCD
Cоберём OpenOCD из исходников, добавив поддержку j-link, с которым и будем в дальнейшем сотрудничать.
Теперь j-link. Подключаем его к компу, и
Надо разрешить системе работать с j-link’ом. Для этого создаём файлик .rules
добавляем текущего пользователя в группу plugdev, хотя он уже там должен быть
и перезагрузим систему
Теперь создаём минимальный скрипт для OpenOCD
Подключаем j-link к пациенту, подаем на пациента питание. Затем
Получаем такую картину
Подключаемся к OpenOCD по telnet, через порт 4444. Я использую PuTTY.
Можно что-нибудь поделать с пациентом, например, посмотреть регистры ядра. (я уже ранее зашил в пациента кое-что)
Тут мы плавно переходим к выполнению 5-го пункта нашего плана.
Откроем Eclipse. Вы уже добавили ярлычок на панель? Нет? Ну тогда…
1) Запуск OpenOCD из Eclipse.
В сети можно найти немало рекоммендаций по этому поводу.
Я для себя сделал запуск OpenOCD через скрипт, в отдельном окне, т.к. выяснилось, что Eclipse почему-то не завершет процесс OpenOCD, который оно выполняет в своей консоли, а OpenOCD иногда нужно перезапускать.
Права на запуск
Создадим конфигурацию для запуска OpenOCD сервера.
Меню Run->External Tools->External Tools Configurations…
2) Отладчик.
Создадим конфигурацию для запуска GDB.
Меню Run->Debug Configurations…
Теперь компилируем и запускаем…
Создадим ещё одну конфигурацию для отладчика, но без команды заливки прошивки в контроллер, чтобы не терзать флэш когда нужно ещё раз запустить и поотлаживать. Конечно, исходный код при этом меняться не должен.
6. Прибираемся
Вот и всё. Надеюсь, статейка будет для кого-то полезной.
Спасибо организаторам этого ресурса за возможность поучиться и поучить.
Спасибо всем кто занимается разработкой замечательного ПО, которое позволяет нам нескучно жить.
Источник