タイトルのとおりです. 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アドレスの場所は,以下の資料を参照する.
- http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337gj/BABBDBHJ.html
- http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0464f/ch10s06s01.html
- http://www2.lauterbach.com/pdf/debugger_arm.pdf
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
余談
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デバッガも同じ方法でエラーを回避できるはずです.