Remote access to OpenOCD running on Pi 3 B

I have installed OpenOCD onto a Raspberry Pi 3, following the instructions here:

https://github.com/TurtleRover/Turtle-R … 32-and-RPi

OpenOCD appears to run ok and says that it is listening on port 3333 for GDB commands and on port 444 for telnet commands (it can be issued commands via either protocol)

According to the link above, it should be possible to send GDB or telnet commands remotely from a PC connected to the same network as the RPi.

However, when I try to connect to OpenOCD on port 3333 from a Windows 10 PC running a a gdb client:

(gdb) target remote 169.254.199.164:3333

I get the error message:

169.254.199.164:3333: No connection could be made because the target machine actively refused it.

Similarly, if I try to connect to OpenOCD on port 4444 from a Windows 10 PC via telnet

C:\WINDOWS\system32>telnet 169.254.199.164 4444

I get the error message:

Connecting To 169.254.199.164…Could not open connection to the host, on port 4444: Connect failed

If I run the following command on the Raspberry Pi

netstat -an | grep tcp

I get:

tcp 0 0 127.0.0.1:3333 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:6666 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:36842 127.0.0.1:33593 ESTABLISHED

tcp 0 0 169.254.199.164:5900 169.254.224.200:54052 ESTABLISHED

tcp 0 0 127.0.0.1:33593 127.0.0.1:36842 ESTABLISHED

tcp6 0 0 :::5900 :::* LISTEN

tcp6 0 0 :::22

I can establish the following PC to RPi connections:

SSH, VNC and telnet on the standard port 23.

On the RPi, I can connect via telnet to port 4444 at the loopback address 127.0.0.1.

I can also connect to port 3333 at 127.0.0.1. The connection is immediately dropped , presumably because the GDB protocol is not used, however I thing this proves that OpenGDB is listening on this port.

I am not a network expert but I think the problem may be that OpenGDB is listening to ports 3333 and 4444 at the local loopback address 127.0.0.1 instead of the generic 0.0.0.0 (all addresses) address. So connection requests to the RPi’s address on the local network are being ignored.

Earlier versions of Raspian and or RPi hardware did seem to work with OpenOCD so I am assuming that this has something to do with changes to the standard RPi network setup.

But eaqualy this could be a fault with OpenOCD not choosing the address correctly.

Does anyone have any ideas on how to solve this?

Here is the contents of my hosts file on the RPi:

127.0.0.1 localhost

::1 localhost ip6-localhost ip6-loopback

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

127.0.1.1 raspberrypi

I have not been fiddling with any of the standard setup and have only installed OpenOCD and various application like telnet, telnetd and iperf in an attempt at diagnosing the problem.

I had an exactly same problem today. After a few minutes searching “127.0.0.1” in the source code. I found the solution is actually in manual.

http://openocd.org/doc/html/General-Commands.html

Command: bindto [name]
Specify hostname or IPv4 address on which to listen for incoming TCP/IP connections. By default, OpenOCD will listen on the loopback interface only. If your network environment is safe, bindto 0.0.0.0 can be used to cover all available interfaces.

So just add “bindto 0.0.0.0” in your cfg file then it will work.

Thanks iamseer. I have only just seen your post. I will give that a try.

Thanks again iamseer, that did work.

I now have a new problem when I try to load software:

pi@raspberrypi:~/OpenOcd $ sudo openocd

Open On-Chip Debugger 0.10.0+dev-00430-g06123153 (2018-06-08-21:58)

Licensed under GNU GPL v2

For bug reports, read

http://openocd.org/doc/doxygen/bugs.html

BCM2835 GPIO nums: swclk = 25, swdio = 24

BCM2835 GPIO config: srst = 18

srst_only separate srst_gates_jtag srst_push_pull connect_deassert_srst

adapter speed: 2000 kHz

adapter_nsrst_delay: 100

srst_only separate srst_nogate srst_push_pull connect_deassert_srst

cortex_m reset_config sysresetreq

adapter_nsrst_delay: 100

adapter_nsrst_assert_width: 100

Info : BCM2835 GPIO JTAG/SWD bitbang driver

Info : SWD only mode enabled (specify tck, tms, tdi and tdo gpios to add JTAG mode)

Info : clock speed 2002 kHz

Info : SWD DPIDR 0x5ba02477

Warn : Silicon bug: single stepping will enter pending exception handler!

Info : stm32f7x.cpu: hardware has 8 breakpoints, 4 watchpoints

Info : Listening on port 3333 for gdb connections

TargetName Type Endian TapName State


0* stm32f7x.cpu cortex_m little stm32f7x.cpu running

target halted due to debug-request, current mode: Thread

xPSR: 0x01000000 pc: 0x0800cbdc msp: 0x20050000

Info : Listening on port 6666 for tcl connections

Info : Listening on port 4444 for telnet connections

Info : accepting ‘gdb’ connection on tcp/3333

Info : device id = 0x10016449

Info : flash size = 1024kbytes

Info : SWD DPIDR 0x5ba02477

Error: Failed to read memory at 0xfffffffe

Info : SWD DPIDR 0x5ba02477

Error: Failed to read memory at 0xfffffffe

Info : SWD DPIDR 0x5ba02477

Error: Failed to read memory at 0x20050000

I should say that I am trying to upload firmware via VisualGDB running under Windows 10 so I think I need to understand how this package drives OpenOCD when it writes to flash. I think I probably need to add some commands into the config file on the RPi side because the config file and command line settings normally used on the PC side (for non remote driving) are being circumvented.

I will post here again if I figure it out.