Windows 10 64bit 上で OpenOCD (Open On-Chip Debugger)をビルドし、インストールする。
「Building OpenOCD under Windows using MSYS2」に従い、MSYS2をインストールし、 OpenOCDをビルド、インストールした。
背景
nRF52832 のフラッシュ書き込みにSegger/J-Linkではなく、小型で安価なST-Link v2を利用してみることにした。ST-Link v2をWindows10 でnRF52832 のフラッシュ書き込みに利用するために OpenOCD が必要になった。
OpenOCD は Free and Open On-Chip Debugging, In-System Programming and Boundary-Scan Testing のためのツールである。オンチップデバッガーやフラッシュメモリへのライターなどとして使われる。この記事ではフラッシュメモリライターとして利用することが主たる目的である。
ただし、フラッシュメモリライターとしてつかう場合には、チップのメーカーから提供されているツールの方が面倒が少ないように思う。別記事「nRF52832 のファームウェアが読み出し禁止だとOpenOCD と ST-Link v2 では書き換えできない」に書いたように、nRF52832のフラッシュが読み出し禁止になっている場合には、それを解除して書き込むことがOpenOCD と ST-Link v2ではうまくできていない。
ビルド・インストール環境
- Windows10 64bit
MSYS2 のインストール
Source Forge のサイト https://sourceforge.net/projects/msys2/ からダウンロードをする。
執筆の時点では、 最新版として msys2-x86_64-20180531.exe がダウンロードされた。
これをダブルクリックしてインストールする。
セキュリティの警告がでるので、問題がないようなら「実行」ボタンをクリックして進める。
セットアップウィザード
セットアップウィザードが表示されるので、「次へ」進む。
インストール先フォルダ
インストール先フォルダを選ぶ。以下ではC:\msys64 にインストールしたとする。
スタートメニューのショートカット
インストール
「次へ」をクリックするとインストールが開始される。
完了
時間がかかるが待っていれば完了するはず。
シェルの起動
シェルが起動できればインストールができたことを確認できる。
プレビルドOpenOCDではnRF52にフラッシュ書き込みできなかった
プレビルドOpenOCDのインストール
pacmanコマンドを用いて次を実行することで、プレビルド(コンパイル済み)のOpenOCDをインストールすることができる。
1 |
pacman -S mingw-w64-x86_64-openocd-git |
プレビルドOpenOCDの起動準備
プレビルドのOpenOCDをインストール後に OpenOCD起動するならPATHの設定をしておく方がよい。OpenOCDがインストールされた場所に依存するが、たとえば次のように。
1 |
export PATH="$PATH:/mingw64/bin" |
プレビルドOpenOCDはnRF52に対応していなかった
ブレビルドの OpenOCDは古く、nRF52 に対応していない。nRF52(nRF5)シリーズ用コンフィギュレーションファイルがない。
このためOpenOCD をビルドする必要があった。
nRF52シリーズ用のcfgファイルなどを Arduino のGitから持ってきて動作させてみたが、結果的には正常に動作させることができなかったので、OpenOCDのビルドは必要である。
以下は、ブレビルドの OpenOCDをとりあえず動作させた場合についてである。
初回起動時のファイアウォール警告
初回の起動時にはファイアウォールの警告がある場合がある。利用しているセキュリティソフトウェアに応じて適切にアクセスができるように対応する。
プレビルドOpenOCDの起動
まずは、OpenOCDが正常に起動できれば以下のようになるはず(プレビルド版なのでバージョン番号が古い)。もっとも、この後、nRF52832の操作などをしようとしたらプレビルドのOpenOCDではできなかった。
OpenOCDをビルドする準備
OpenOCDをビルドするための環境構築が必要である。ここも、「Building OpenOCD under Windows using MSYS2」に従って進める。
MSYS2パッケージの更新
まず、パッケージデータベースの更新、プリインストールされているパッケージの最新版への更新をする。
1 |
pacman -Syuu |
上記のコマンドを更新されるパッケージがなくなるまで繰り返し実行する。その際に、更新するたびに、MSYS2 を起動しなおす必要があるとのこと。
ちなみに、pacman のオプションは次の通り
- -Sy
- パッケージデータベースの更新
- -Suu
- インストールされているパッケージを最新版に更新
ベース開発キットのインストール
次のコマンドでベース開発キットのインストールをする。
1 |
pacman -S base-devel |
mingw toolchain をインストール
OpenOCDをビルドする際に必要な、64-bitバージョンのmingw toolchain を次のコマンドでインストールする。
1 |
pacman -S mingw-w64-x86_64-toolchain |
Gitのインストール・設定
Gitのインストール
次のコマンドの実行で Git をインストールする。
1 |
pacman -S git |
Gitの設定
1 2 |
git config --global user.name "Nanashino Gonbei" git config --global user.email "nobody@example.com" |
OpenOCDをビルドする際にエラーになったり、進まなくなったりすることを防ぐために、以下も実行しておいた方が良いと思われる。
1 2 3 |
git config --global pack.windowMemory "100m" git config --global pack.packSizeLimit "100m" git config --global pack.threads "1" |
上記を設定しないで実行したところ、エラーで異常終了したり、かなり長い時間経過しても進まなくなって、ビルドが失敗した。
OpenOCDのビルド・インストール
OpenOCDのビルド
開発環境が整ったらOpenOCDをビルドする。
以下のコマンドを実行して OpenOCDをビルドする。
1 2 3 |
export MINGW_INSTALLS=mingw64 cd ~/MINGW-packages/mingw-w64-openocd-git makepkg-mingw -sLf |
ビルドにはかなり時間がかかった。気長に待つ必要がある。
最後に以下のようなエラーがでたが、使わないコンフィギュレーションファイルに関してと考えて、そのまま先に進めた。
1 |
: Can't translate pathname 'mingw64/share/openocd/scripts/target/1986ве1т.cfg' to UTF-8: Can't translate pathname 'mingw64/share/openocd/scripts/target/к1879xб1я.cfg' to UTF-8==> 作成完了: mingw-w64-openocd-git 0.10.0.r541.g723fc07dd-1 (2018年09月27日 19時58分41秒) |
ビルドしたOpenOCDのインストール
以下のコマンドを実行する。
1 |
pacman -U mingw-w64-*-openocd-*-any.pkg.tar.xz |
スタンドアロンとしてOpenOCDをエクスポート
必要に応じて、「Building OpenOCD under Windows using MSYS2」の Exporting the fresh built OpenOCD as stand alone の手順を実行する。
OpenOCDの動作確認例
ST-Link v2とRF52832 を接続して起動できることを確認した例を示す。
OpenOCDの起動
interface や target があるscripts パスの指定が必要。試した環境では以下のパスに scriptがあった。
1 |
/mingw64/share/openocd/scripts |
ST-Link v2 をインタフェースとして使い ( -f interface/stlink-v2.cfg )、対象のプロセッサが nrf52 シリーズの場合には ( -f target/nrf52.cfg )、次のコマンドを実行する。
1 |
openocd -s /mingw64/share/openocd/scripts -f interface/stlink-v2.cfg -f target/nrf52.cfg |
ST-Link v2 を使えるようにする手順については「ST-Link v2 を OpenOCDで利用できるようにする」を参照のこと。
telnetの接続
次のコマンドでOpenOCDに接続する。
1 |
telnet localhost 4444 |
以下のように接続されたというメッセージが表示され、プロンプト「>」でコマンド入力待ちになれば、一応 OpenOCDは利用できる状態になっている。
1 2 3 4 5 6 7 8 |
$ telnet localhost 4444 Trying ::1... Connection failed: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Open On-Chip Debugger > |
コメント
openOCD の git cloneが抜けています。
openOCDビルドするディレクトリ(フォルダ?)も違うかな。