目次

OpenOCD

Open On-Chip Debugger

オープンソース,フリーのワンチップデバッガ(OneChipDebugger)

インストール

MacOS

MacOSならhomebrewから入れよう

brew install openocd

「–enable_stlink」はOpenOCDにて使うJTAGインターフェイスとしてST-Linkを使えるようにするためのオプション
↑だと思っていたけど0.10.0では不要?JATGインターフェイスのオプションを渡しても

Warning: open-ocd: this formula has no --enable-stlink option so it will be ignored!

と返ってくる。
https://libraries.io/homebrew/openocd

OpenOCD User’s Guide

Windows

VisualGDB売ってるSYSPROGSが定期的にビルド済みのバイナリ配布してくれてるのでここのを展開してパス通すのが楽かな.
Download pre-built OpenOCD for Windows
またはEclipseのMCUプラグインやxpack OpenOCD projectを管理してるLiviu Ionescuさんがマルチプラットフォームのバイナリを公開してくれているのでこちらでもいい.→xPack OpenOCD release
2022年1月26日に環境構築時xpack OPpenOCDのバイナリをを入れることにした.OSに合わせてバイナリをDL,展開してパスを設定.
Windowsの環境変数PATHF:\xpack-openocd-0.11.0-3\binを追加

2023年11月30日更新
GitHubに公式のビルド済みバイナリがあるのでこれがいいと思う
https://github.com/openocd-org/openocd/releases

ビルドしたい

今のところ(2020年3月28日時点)だとOpenOCDはstm32G4には正式に対応していない模様.
パッチを張ってソースからビルドすればいけど,WSL使ったりMSYS2使ったりと方法があってどれにするといいのかは迷う.
仕方いないのでしばらくはSTM32G4はCubeIDEで開発していこうと思う.
SYSPROGSの20200729ビルドのOpenOCDの中にはstm32G4用の設定も入っていた.
試したところ無事に書き込めたので,これでOpenOCDデバッグができる様になった.
MSYS2を使ってインストールする.
手順はOpenOCD (Open On-Chip Debugger) のWindows10上でのビルド を参照.
注意として,生成されるファイルはmingw-w64-*-openocd-*-any.pkg.tar.xzではなくmingw-w64-*-openocd-*-any.pkg.tar.zst だった.最後の拡張子が異なるので注意.

4 Running

bash$ openocd --help
 
--help       | -h       display this help
--version    | -v       display OpenOCD version
--file       | -f       use configuration file <name>
--search     | -s       dir to search for config files and scripts
--debug      | -d       set debug level to 3
             | -d<n>    set debug level to <level>
--log_output | -l       redirect log output to file <name>
--command    | -c       run <command>

使うJTAGインターフェースやターゲットにあわせて適宜設定をしてやる必要があるが,大抵はcfgファイル(hoge.cfg)にまとめておき,openocdへ渡してやることがたいてい.-fオプションを用いてcfgファイルへのパスをしていすれば読み込んでくれる.cfgファイルは複数渡すこともできる.

openocd -f config1.cfg -f config2.cfg -f config3.cfg

cfgファイルを探しに行く順番としては

  1. カレントディレクトリ
  2. -sオプションを用いて指定されたディレクトリ
  3. add_script_search_dirコマンドによって指定されたディレクトリ
  4. $HOME/.openocdディレクトリ(Windowsでは無効)
  5. (設定されていれば)環境変数OPENOCD_SCRIPTSのディレクトリ
  6. $pkgdatadir/site
  7. $pkgdatadir/scripts

21.7 RTOS Support

RTOSのスレッドをすべて追えるようにするオプション

$_TARGETNAME configure -rtos auto

autoの部分には以下のリアルタイムOS種類を指定する.
autoのままでもいいと思うけど未検証

OSごとに特定のシンボルをエクスポートする必要がある.
サポートされるRTOSごとに必要なシンボルが異なる.詳細はユーザマニュアルの原文参照

FreeRTOS使用時の注意

reeRTOS-openocd.cこのファイルをコンパイル対象に追加し、 Makefileのリンカフラグに以下を追加する。FreeRTOSで参照している変数uxTopUsedPriorityを最適化によって削除しないようにする (--gc-sections有効時は必要。)

-undefined=uxTopUsedPriority

Eclipse+GDB+openocdでFreeRTOSの複数のタスクを追う

参考文献

Eclipse/ARMプロセッサによる組込み開発 【第4回】OpenOCD
株式会社ベストテクノロジー OpenOCD
OpenOCD + ST-LinkでFirmware書き込み uragami note
[Interface 2015 3月号]
Adding FreeRTOS Thread Awareness to GDB and Eclipse