【macOS】J-Link LITE ARMでRaspberry pi 2/ZeroにGDBでJTAG接続する

スポンサーリンク
728×90 ビッグバナー

前の記事で、「Olimex ARM-USB-TINY-H」からRaspberry piへのJTAG接続にチャレンジした。どうもうまく動かせなかったので「J-Link LITE ARM」を使ってGDBからの接続を試したので備忘録を残す。

以前の記事でRaspberry PiのJTAGピンを有効にし、J-Linkで接続した。 今回、macパソコンから「Olimex ARM-US...

J-Link Software のインストール

下記、SEEGERのホームページから「J-Link Software for Mac」をダウンロードしインストール。

https://www.segger.com/downloads/jlink/

Macの場合は、下記のようにCUI版がインストールされる。

画像01

J-Link LITE ARMとRaspberry Pi 2を接続

下記記事に従って、JTAGピンを有効にし接続。

Raspberry Piで、ベアメタルなソフト開発をするのに、JTAGデバックできた方が便利なのだが、初期状態ではJTAGの信号がGPIOコ...

画像10

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は下記記事でインストールしたものを利用。

Macでの、ARM用のGNUクロスコンパイル環境を構築する。 そこで「GNU ARM Embedded Toolchain」のツールチェーン...

別のコマンドプロンプトから、下記コマンドで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」とも接続して確認。

画像20

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ではまだ未サポートのようです。

参考

  1. J-Link LITE ARM
  2. A question about Cortex-a53 support
スポンサーリンク
レシポンシブ広告
レシポンシブ広告

シェアする

フォローする