OpenOCD
オープンソース,フリーのワンチップデバッガ(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!
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の環境変数PATH
にF:\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ファイルを探しに行く順番としては
- カレントディレクトリ
-s
オプションを用いて指定されたディレクトリadd_script_search_dir
コマンドによって指定されたディレクトリ$HOME/.openocd
ディレクトリ(Windowsでは無効)- (設定されていれば)環境変数
OPENOCD_SCRIPTS
のディレクトリ $pkgdatadir/site
$pkgdatadir/scripts
21.7 RTOS Support
RTOSのスレッドをすべて追えるようにするオプション
$_TARGETNAME configure -rtos auto
auto
の部分には以下のリアルタイムOS種類を指定する.
auto
のままでもいいと思うけど未検証
- eCos
- ThreadX
- FreeRTOS
- linux
- ChibiOS
- embKernel
- mqx
- uCOS-III
OSごとに特定のシンボルをエクスポートする必要がある.
サポートされるRTOSごとに必要なシンボルが異なる.詳細はユーザマニュアルの原文参照
FreeRTOS使用時の注意
reeRTOS-openocd.cこのファイルをコンパイル対象に追加し、
Makefileのリンカフラグに以下を追加する。FreeRTOSで参照している変数uxTopUsedPriority
を最適化によって削除しないようにする (--gc-sections
有効時は必要。)
-undefined=uxTopUsedPriority