Перейти к содержанию

OpenOCD

Отладчик GDB не умеет сам говорить с выводами SWD или JTAG микроконтроллера. Между ними нужен посредник, который управляет адаптером и понимает ядро и флеш-память конкретного чипа. Самый распространённый открытый посредник — OpenOCD.

Обновлено Редакция GAW

OpenOCD (Open On-Chip Debugger) — открытая программа для отладки, внутрисхемного программирования и граничного сканирования встраиваемых систем. Сама по себе она не касается выводов микроконтроллера: по руководству OpenOCD, работа идёт через отладочный адаптер — модуль, который выдаёт на плату сигналы JTAG или SWD. Адаптер бывает отдельным «свистком» или встроен в отладочную плату. Руководство отдельно напоминает разницу транспортов: JTAG умеет и отладку, и граничное сканирование, SWD — только отладку.

Из чего складывается запуск

OpenOCD настраивают файлами конфигурации, которые лежат в его библиотеке скриптов (гл. 5–6 руководства):

ФайлЧто описывает
interface/…cfgадаптер: драйвер, частоту, выбранный транспорт
target/…cfgкристалл: ядро, TAP, банки флеш-памяти
board/…cfgплату: какой target, как разведены сигналы сброса, что делать при reset init

В простом случае хватает двух файлов: openocd -f interface/ADAPTER.cfg -f board/MYBOARD.cfg (разд. 4.1). Для адаптеров по стандарту CMSIS-DAP есть драйвер cmsis-dap: версия 1 работает через отчёты USB HID, версия 2 — через bulk-передачи USB.

Порты и подключение GDB

После запуска OpenOCD открывает три сервера (гл. 7):

  • 3333 — GDB. Если целей несколько, вторая слушает 3334 и так далее. GDB подключается командой target extended-remote localhost:3333; режим extended-remote руководство называет предпочтительным.
  • 4444 — telnet. Здесь команды OpenOCD вводит человек: reset halt, flash info 0, mdw 0x08000000.
  • 6666 — Tcl. Машинный интерфейс для скриптов и сред разработки.

Как устроена связь GDB с отладочным сервером, разобрано в термине GDB-сервер. Внутри сеанса GDB команды самого OpenOCD передают через monitor: пример из гл. 20 — monitor reset halt, затем load для записи программы и continue. Список доступных команд выдаёт monitor help.

Запись флеш-памяти без отладки

Для прошивки в производстве или из скрипта есть команда program (гл. 13). Она выполняет init, затем reset init, стирает и пишет флеш командой flash write_image, по флагу verify сверяет записанное, по reset запускает программу, по exit завершает OpenOCD:

openocd -f board/stm32f3discovery.cfg -c "program firmware.elf verify reset exit"
openocd -f board/stm32f3discovery.cfg -c "program firmware.bin exit 0x08000000"

Файлы ELF, HEX и S19 несут адреса сами, а у двоичного файла .bin адрес нужно указать. OpenOCD входит в набор серверов отладки STM32CubeIDE, работает с большинством адаптеров из обзора программаторов и отладчиков, а выводы и разъёмы отладки описаны в статье JTAG и SWD.

Частые вопросы

Какие порты открывает OpenOCD?

По руководству OpenOCD, если порты не заданы в конфигурации: 3333 — для GDB, 4444 — для telnet, через который команды вводит человек, и 6666 — для машинного Tcl-интерфейса. Если целей несколько, вторая получает порт GDB 3334, третья 3335 и так далее. Любой порт можно сменить командами gdb port, telnet port и tcl port или отключить словом disabled.

Как прошить микроконтроллер OpenOCD без GDB?

Командой program прямо из командной строки: openocd -f board/<плата>.cfg -c "program firmware.elf verify reset exit". OpenOCD инициализирует адаптер, сбрасывает и останавливает ядро, стирает и записывает флеш, сверяет записанное, запускает программу и завершается. Для файла .bin нужно указать адрес, например 0x08000000 для STM32.

Чем OpenOCD отличается от GDB?

GDB — сам отладчик: он знает символы программы, ставит точки останова по строкам исходника и показывает переменные. OpenOCD — сервер, который управляет адаптером SWD или JTAG, знает ядро и флеш-память конкретного чипа и выполняет команды GDB на железе. GDB подключается к нему по TCP командой target extended-remote localhost:3333.

Источники

  1. The OpenOCD Project. OpenOCD User's Guide for release 0.12.0+dev, 26 October 2026 (GNU FDL 1.2) — About: OpenOCD предназначен для отладки, внутрисхемного программирования и граничного сканирования, работает через отладочный адаптер; JTAG поддерживает отладку и граничное сканирование, SWD — только отладку; разд. 4.1: запуск openocd -f interface/ADAPTER.cfg -f board/MYBOARD.cfg; гл. 6: файлы interface, board и target; гл. 7: gdb port по умолчанию 3333 (следующей цели — порт + 1), tcl port 6666, telnet port 4444; разд. 8: драйвер cmsis-dap, backend hid (v1) и usb_bulk (v2); гл. 12: команда program filename [preverify] [verify] [reset] [exit] [offset]; гл. 13: program выполняет init, reset init, flash write_image, verify_image, reset run, пример program filename.bin exit 0x08000000; гл. 20: target extended-remote localhost:3333, monitor reset halt, load, monitor help
  2. Free Software Foundation. Debugging with GDB, 20.1 Connecting to a Remote Target (GNU FDL) — режимы target remote и target extended-remote; в extended-remote GDB остаётся подключённым после выхода программы; подключение по TCP: target remote host:port; команда monitor передаёт произвольную команду удалённому монитору

Нашли ошибку?