/home/tnishinaga/TechMEMO

日々行ったこと、面白かったことを書き留めます。

Raspberry Pi2をJTAGデバッグできました

タイトルのとおりです. BareMetalなRaspberry Pi2にJTAGデバッガをつなげて,gdbレジスタ読んだり実行止めたり出来ました.

とりあえず,メモだけ残します.

参考にしたサイト

用意するもの

  • JTAGデバッガ : ARM-USB-TINY-H

使ったソフト

  • OpenOCD 0.9.0-dev-00358-gd3c2679-dirty

手順

1. OpenOCDのビルド

0.8.0リリース以降にCortex-A7/A15用のサポートが入ったので,最新版のコードを持ってきて各環境でビルドする.

ビルド方法は時間がないので省略.

ARM-USB-TINY-Hを使うには

$ ./configure --enable-ftdi

としなければならないことに注意.

2. configファイルの用意

RasPi2用のターゲットファイルは,フォーラムの情報を参考に作成したので,これを使う

OpenOCD target config file for Raspberry Pi 2

最初,dbgbaseアドレスの意味がわからず苦戦したが,ざますさん(@At_Zamasu_Zansu)のお力添えにより,解決した.

dbgbaseアドレスの場所は,以下の資料を参照する.

3. OpenOCDでGDBサーバーを建てる

$ openocd -f interface/ftdi/olimex-arm-usb-tiny-h.cfg -c "transport select jtag" -f rpi2.cfg

とすると,OpenOCDがGDBサーバーを立ち上げてくれる

4. GDBサーバーに接続する

$ arm-none-eabi-gdb
(gdb) target remote localhost:3333

GDBサーバーに接続できる. あとはデバッグするだけ.

余談

enable-legacy-ft2232_libftdi オプションは,OpenOCD 0.9.0では非推奨となっていた.

イマドキのやり方は,

$ ./configure --enable-ftdi

を指定し,インターフェース設定ファイルは interface/ftdi/ 以下のものを使うらしい.

しかし,この新しいインターフェース設定ファイルと既存のターゲット設定ファイルを混ぜると,エラーが出て動かなくなる.

$ openocd -f interface/ftdi/olimex-arm-usb-tiny-h.cfg  -f rpi2.cfg
Open On-Chip Debugger 0.9.0-dev-00358-gd3c2679-dirty (2015-04-03-21:53)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.sourceforge.net/doc/doxygen/bugs.html
adapter speed: 1000 kHz
adapter_nsrst_delay: 400
none separate
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
embedded:startup.tcl:160: Error: session transport is "jtag" but your config requires JTAG
in procedure 'script'
at file "embedded:startup.tcl", line 58
in procedure 'jtag' called at file "rpi2.cfg", line 19
in procedure 'default_to_jtag' called at file "embedded:startup.tcl", line 165
at file "embedded:startup.tcl", line 160

原因はよくわからない.後日調べて動くようにしたい.

ついでに,BareMetalなRasPi2について語っているところを,フォーラムに見つけた

今日は,もう眠いので,寝ます. おやすみなさい.

追記

イマドキのやり方でARM-USB-TINY-H使えました.

変更点はopenocdの起動オプションに

-c "transport select jtag"

をつけるだけです. つまり,openocdの起動を

$ openocd -f interface/ftdi/olimex-arm-usb-tiny-h.cfg -c "transport select jtag" -f rpi2.cfg

とすると,エラーをださずに起動できます.

他のFTDI系JTAGデバッガも同じ方法でエラーを回避できるはずです.