前の記事で、「Olimex ARM-USB-TINY-H」からRaspberry piへのJTAG接続にチャレンジした。どうもうまく動かせなかったので「J-Link LITE ARM」を使ってGDBからの接続を試したので備忘録を残す。
【macOS】ARM-USB-TINY-HでRaspberry pi 2にJTAG接続する
以前の記事でRaspberry PiのJTAGピンを有効にし、J-Linkで接続した。今回、macパソコンから「Olimex ARM-USB-TINY-H」で、Raspberry piへのJTAG接続にチャレンジしてみたので備忘録を残す。O...
J-Link Software のインストール
下記、SEEGERのホームページから「J-Link Software for Mac」をダウンロードしインストール。
SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace
Download the latest SEGGER trial versions, eval packages and user manuals!
Macの場合は、下記のようにCUI版がインストールされる。
J-Link LITE ARMとRaspberry Pi 2を接続
下記記事に従って、JTAGピンを有効にし接続。
【Raspberry Pi】u-bootでJTAGピンを有効にする
Raspberry Piで、ベアメタルなソフト開発をするのに、JTAGデバックできた方が便利なのだが、初期状態ではJTAGの信号がGPIOコネクタに割り当てられていない。そこで、u-bootの初期化ソースコードを修正して、JTAGピンを有効...
J-Link GDBサーバを起動
コマンドプロンプトから、下記コマンドで実行。device指定は「cortex-a7」。
$ /Applications/SEGGER/JLink_V618a/JLinkGDBServer -device cortex-a7
SEGGER J-Link GDB Server V6.18a Command Line Version
JLinkARM.dll V6.18a (DLL compiled Aug 11 2017 17:53:42)
Command line: -device cortex-a7
-----GDB Server start settings-----
GDBInit file: none
GDB Server Listening port: 2331
SWO raw output listening port: 2332
Terminal I/O port: 2333
Accept remote connection: yes
Generate logfile: off
Verify download: off
Init regs on start: off
Silent mode: off
Single run mode: off
Target connection timeout: 0 ms
------J-Link related settings------
J-Link Host interface: USB
J-Link script: none
J-Link settings file: none
------Target related settings------
Target device: cortex-a7
Target interface: JTAG
Target interface speed: 1000kHz
Target endian: little
Connecting to J-Link...
J-Link is connected.
Firmware: J-Link ARM Lite V8 compiled Oct 29 2014 09:03:16
Hardware: V8.00
S/N: *********
Feature(s): GDB
Checking target voltage...
Target voltage: 3.33 V
Listening on TCP/IP port 2331
Connecting to target...
起動したら「2331」ポートの通信待ちとなる
GDBの起動
GDBは下記記事でインストールしたものを利用。
【macOS】ARMのGCCコンパイル環境を構築する
Macでの、ARM用のGNUクロスコンパイル環境を構築する。そこで「GNU ARM Embedded Toolchain」のツールチェーンをインストールして使う。ARMツールチェーンのダウンロード下記URLから、Mac OSX 64bit版...
別のコマンドプロンプトから、下記コマンドでGDBを実行。
$ arm-none-eabi-gdb tmonitor
GNU gdb (GNU Tools for ARM Embedded Processors) 7.10.1.20160616-cvs
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin10 --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from tmonitor...done.
(gdb) target remote localhost:2331
Remote debugging using localhost:2331
0x07f5c0cc in ?? ()
(gdb) load
Loading section .eitbra, size 0x1a0 lma 0x8000
Loading section .startup, size 0x1a0 lma 0x8200
Loading section .text, size 0xffd0 lma 0x83a0
Loading section .data, size 0xc0 lma 0x18370
Loading section .flashwr, size 0x684 lma 0x18430
Start address 0x8000, load size 68180
Transfer rate: 61 KB/sec, 3409 bytes/write.
(gdb) break resetSystem
Breakpoint 1 at 0x98fc: file ../src/system.c, line 146.
(gdb) c
Continuing.
Breakpoint 1, resetSystem (boot=0) at ../src/system.c:146
146 if (!boot) DipSw = DipSwStatus();
(gdb) list
141 {
142 MEMSEG *mp;
143 UW i, va;
144
145 /* obtain DipSw status */
146 if (!boot) DipSw = DipSwStatus();
147
148 #if 0
149 setCacheMMU(DIS_CACHEMMU); /* MMU turned off */
150 #else
(gdb) c
Continuing.
^C
Program received signal SIGTRAP, Trace/breakpoint trap.
0x00009d88 in waitUsec (usec=982) at ../src/waitusec.c:45
45 for (usec = usec * delay64us / 64; usec > 0; usec--);
(gdb) quit
A debugging session is active.
Inferior 1 [Remote target] will be killed.
Quit anyway? (y or n) y
$
問題なく動きそう!!
次は、EclipseからのGUIデバックに挑戦していきたい。
J-Link LITE ARMとRaspberry Pi Zeroを接続
同様に「Raspberry Pi Zero」とも接続して確認。
J-Link GDBサーバを起動
コマンドプロンプトから、下記コマンドで実行。device指定は「arm11」。
$ /Applications/SEGGER/JLink_V618a/JLinkGDBServer -device arm11
SEGGER J-Link GDB Server V6.18a Command Line Version
JLinkARM.dll V6.18a (DLL compiled Aug 11 2017 17:53:42)
Command line: -device arm11
-----GDB Server start settings-----
GDBInit file: none
GDB Server Listening port: 2331
SWO raw output listening port: 2332
Terminal I/O port: 2333
Accept remote connection: yes
Generate logfile: off
Verify download: off
Init regs on start: off
Silent mode: off
Single run mode: off
Target connection timeout: 0 ms
------J-Link related settings------
J-Link Host interface: USB
J-Link script: none
J-Link settings file: none
------Target related settings------
Target device: arm11
Target interface: JTAG
Target interface speed: 1000kHz
Target endian: little
Connecting to J-Link...
J-Link is connected.
Firmware: J-Link ARM Lite V8 compiled Oct 29 2014 09:03:16
Hardware: V8.00
S/N: *********
Feature(s): GDB
Checking target voltage...
Target voltage: 3.35 V
Listening on TCP/IP port 2331
Connecting to target...
GDBサーバが無事起動して「2331」ポートの通信待ちとなる。GDBからの接続手順はRaspberry Pi 2の時と同様の手順で動作確認できた。
補足
- この方法だと、現状、Core 0にしかデバックに対応していないが、とりあえずハードウェアデバックはできる。
- この「J-Link Lite ARM」は、某評価ボードに付属してた物だが非売品らしい。正規のJ-Linkアダプタは、多少高価だが購入は可能。
- OpenOCDからだと、J-Link LITEでもエラーとなった。設定か使い方に問題あるのか? 少しづつでも究明していきたい。
- 「Raspberry pi 3」のCortex-A53については、参考(2.)にあるように、2017/8/20現在、J-Linkではまだ未サポートのようです。
コメント