STM32CubeIDE mit blackmagic hosted server verbinden - wie?

OP #7460601
Lesenswert?

Ich habe zwei BMP probes, mit denen ich derzeit in STM32CubeIDE 13 GDB-Hardware Debugging eingestellt habe. Die entsprechende Zeile in der Konfiguration des Debuglaunchers sieht so aus:

1
 set mem inaccessible-by-default off
2
 target extended-remote /dev/cu.usbmodem86764DA91
3
 shell sleep 5
4
 monitor swdp_scan

Jetzt will ich zum blackmagic server (BMDA) verbinden. Der läuft auf port 2000 (default).

Wie sehen da die Initialisierungskommados aus? Ich habe angefangen mit

1
set mem inaccessible-by-default off
2
tar extended-remote :2000
3

4
Bekomme aber nach timeout:
5

6
Error in final launch sequence:
7

8
Failed to execute MI command:
9
-target-select remote localhost:1234
10

11
Error message from debugger back end:
12
localhost:1234: Operation timed out.
13
Failed to execute MI command:
14
-target-select remote localhost:1234

Das sieht so aus, als funkt eine andere Voreinstellung dazwischen. (hab schon gesehen, da ist Remote Target konfiguriert und da steht die 1234). Aber ohne die Konfiguration von remote target klappt's auch nicht. Weiß jemand Rat?

#7460621
Lesenswert?

Christoph K. schrieb:

Ich habe zwei BMP probes, mit denen ich derzeit in STM32CubeIDE 13 GDB-Hardware Debugging eingestellt habe. [...] Jetzt will ich zum blackmagic server (BMDA) verbinden. Der läuft auf port 2000 (default). [...]

1
> Failed to execute MI command:
2
> -target-select remote localhost:1234
3
>

Leider habe ich nicht die geringste Ahnung, wovon Du sprichst, daher ist meine Antwort das berühmte Stochern im Nebel. Aber wenn ich die Meldung korrekt interpretiere, versucht Deine Software, etwas auf Port 1234 auf Deinem Localhost zu erreichen. Da Du aber weiter oben schreibst, daß Du Deinen Server auf Port 2000 laufen läßt...

Du hättest jetzt zwei Möglichkeiten: entweder sorgst Du dafür, daß Deine Software auf Port 2000 zugreift, und wenn ich Deine Frage hier richtig verstanden habe, zielst Du genau darauf ab. Leider kann ich Dir nicht sagen, wie Du das mit Deiner Software umsetzen kannst, tut mir leid.

Zwei andere Lösungen für Dein Problem könnten aber sein, daß Du entweder den Server umkonfigurierst, so daß er auf Port 1234 lauscht, oder -- das ist eher unelegant, fürchte ich -- Du verwendest einen Reverse Proxy, der auf Port 1234 lauscht und zwischen den Ports 1234 und 2000 vermittelt.

HTH, YMMV, viel Glück und Erfolg!

OP #7460630
Lesenswert?

Danke. Dein Versuch in allen Ehren. Aber es war etwas zu allgemein gefaßt und hilft nicht wirklich weiter. Ich hatte die Ursache des "Nichtverbindens" ja bereits ausgemacht (remote Target war eingeschaltet und da standen die Parameter): DIe habe ich mittlerweile so angepaßt, daß da auch 2000 steht. Aber es müßte schon jemand hier antworten, der die Konfiguration von STM32CubeIDE kennt. Beim Remote Target gibt es ja eine ganze Menge "Gegenstellen", die man konfigurieren kann. Ich sehe jetzt auch schon, daß STM32CubeIDE zum blackmagic server (BMDA) verbindet. Kann den mit blackmagic -v 3 starten und da erscheinen auch schon die Pakete, die hin- und hergesendet werden. Es sind aber einige dabei, die BMDA nicht kennt. STM ist in den Foren immer ganz zugeknöpft, wenn man mit BMP ankommt, insbesondere mit Dongles. Aber hier handelt es sich ja primär nicht um einen Dongle (der ist zwar hinter dem Server), sondern um ein Stück Serversoftware, die von GDB aus STM32CubeIDE angesprochen werden muß.

Ich bin zwar auf Discord mit den BMP Entwicklern im Gespräch, aber die weisen alles von sich, wenn es um STM32CubeIDE-Konfiguration geht.

Ich glaube aber, ich bin schon ein STück weiter. Mein GDB ist zu alt (2018).

OP #7460730
Lesenswert?

Uwe B. schrieb:

M.e.a. kann blackmagic nicht die MI GDB Kommandos, "nur" die gdb server Kommandos.

Punkt ist: ich habe zwei BMP, eine (ältere Version) läuft unter STM32CubeIDE 13, die neuere nicht. Unter STM32CubeIDE 11 lief die alte Version problemlos. Die neuere hatte ich unter 11 noch nicht getestet.

Jetzt sagen mir die Entwickler (und Uwe, Du bist ja, glaube ich, da auch "federführend" beteiligt), ich es könne am IDE liegen, es könne aber auch an BMP iegen. Um das zu debuggen, sollte ich am besten zu der BMDA verbinden. Dann könne man die verbose laufen lassen und sähe, was passiert.

Mittlerweile sieht man auch etwas und ich wurde nach der Version meines GDB gefragt. Den wollte ich auch gerade auf den neuesten Stand bringen.

Hier habe ich mal den log mit dem BMP server (BMDA):

1
$ ./blackmagic  -v 3
2
Black Magic Debug App v1.9.0-997-g0e792331
3
 for Black Magic Probe, ST-Link v2 and v3, CMSIS-DAP, J-Link and FTDI (MPSSE)
4
Using 1d50:6018 86764DA9 Black Magic Probe (ST-Link/v2) (Black Magic Debug)
5
 
6
Listening on TCP port: 2000
7
Got connection
8
gdb_getpacket: qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+
9
gdb_putpacket: PacketSize=400;qXfer:memory-map:read+;qXfer:features:read+
10
gdb_getpacket: vMustReplyEmpty
11
gdb_putpacket: 
12
gdb_getpacket: !
13
gdb_putpacket: OK
14
gdb_getpacket: Hg0
15
gdb_putpacket: OK
16
gdb_getpacket: qXfer:features:read:target.xml:0,3fb
17
gdb_putpacket: E01
18
gdb_getpacket: qTStatus
19
*** Unsupported packet: qTStatus
20
gdb_putpacket: 
21
gdb_getpacket: ?
22
gdb_putpacket: W00
23
gdb_getpacket: qXfer:memory-map:read::0,3fb
24
gdb_putpacket: E01
25
gdb_getpacket: qfThreadInfo
26
gdb_putpacket: m1
27
gdb_getpacket: qsThreadInfo
28
gdb_putpacket: l
29
gdb_getpacket: qAttached
30
*** Unsupported packet: qAttached
31
gdb_putpacket: 
32
gdb_getpacket: Hg1
33
gdb_putpacket: OK
34
gdb_getpacket: g
35
gdb_putpacket: EFF
36
gdb_getpacket: qfThreadInfo
37
gdb_putpacket: m1
38
gdb_getpacket: qsThreadInfo
39
gdb_putpacket: l
40
gdb_getpacket: qThreadExtraInfo,1
41
*** Unsupported packet: qThreadExtraInfo,1
42
gdb_putpacket: 
43
gdb_getpacket: qP0000001f0000000000000001
44
*** Unsupported packet: qP0000001f0000000000000001
45
gdb_putpacket: 
46
gdb_getpacket: g
47
gdb_putpacket: EFF
48
gdb_getpacket: qfThreadInfo
49
gdb_putpacket: m1
50
gdb_getpacket: qsThreadInfo
51
gdb_putpacket: l
52
gdb_getpacket: vKill;a410
53
gdb_putpacket: OK
54
gdb_getpacket: ?
55
gdb_putpacket: W00
56
Error on socket 8, got error 60: Operation timed out
57
Got connection
58
gdb_getpacket: qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+
59
gdb_putpacket: PacketSize=400;qXfer:memory-map:read+;qXfer:features:read+
60
gdb_getpacket: vMustReplyEmpty
61
gdb_putpacket: 
62
gdb_getpacket: !
63
gdb_putpacket: OK
64
gdb_getpacket: Hg0
65
gdb_putpacket: OK
66
gdb_getpacket: qXfer:features:read:target.xml:0,3fb
67
gdb_putpacket: E01
68
gdb_getpacket: qTStatus
69
*** Unsupported packet: qTStatus
70
gdb_putpacket: 
71
gdb_getpacket: ?
72
gdb_putpacket: W00
73
gdb_getpacket: qfThreadInfo
74
gdb_putpacket: m1
75
gdb_getpacket: qsThreadInfo
76
gdb_putpacket: l
77
gdb_getpacket: qAttached
78
*** Unsupported packet: qAttached
79
gdb_putpacket: 
80
gdb_getpacket: Hg1
81
gdb_putpacket: OK
82
gdb_getpacket: qXfer:memory-map:read::0,3fb
83
gdb_putpacket: E01
84
gdb_getpacket: X8000000,0:
85
gdb_putpacket: EFF
86
gdb_getpacket: X8000000,10c:\x00P\x00 !\x15\x00\x08\xFFFFFFB1\x14\x00\x08\xFFFFFFB7\x14\x00\x08\xFFFFFFBD\x14\x00\x08\xFFFFFFC3\x14\x00\x08\xFFFFFFC9\x14\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFFFFFFCF\x14\x00\x08\xFFFFFFDB\x14\x00\x08\x00\x00\x00\x00\xFFFFFFE7\x14\x00\x08\xFFFFFFF3\x14\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08\x01\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08i\x15\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_\xFFFFFFF8\x08\xFFFFFFF1
87
gdb_putpacket: EFF
88
gdb_getpacket: g
89
gdb_putpacket: EFF
90
gdb_getpacket: g
91
gdb_putpacket: EFF
92
gdb_getpacket: g
93
gdb_putpacket: EFF
94
gdb_getpacket: qfThreadInfo
95
gdb_putpacket: m1
96
gdb_getpacket: qsThreadInfo
97
gdb_putpacket: l
98
gdb_getpacket: g
99
gdb_putpacket: EFF
100
gdb_getpacket: qfThreadInfo
101
gdb_putpacket: m1
102
gdb_getpacket: qsThreadInfo
103
gdb_putpacket: l
104
gdb_getpacket: g
105
gdb_putpacket: EFF
106
gdb_getpacket: qfThreadInfo
107
gdb_putpacket: m1
108
gdb_getpacket: qsThreadInfo
109
gdb_putpacket: l
110
gdb_getpacket: vKill;a410
111
gdb_putpacket: OK
112
gdb_getpacket: ?
113
gdb_putpacket: W00
114
Error on socket 8, got error 60: Operation timed out
115
^C$
#7460746
Lesenswert?

Man kann in der CubeIDE weitere Toolchains installieren. Mit der 11.2/11.3 hatte ich auch nur Probleme, disconnect beim debuggen hatte ich ja auch schon geschrieben. In der 10.x ist ein Speicherleck im malloc für CM0, in Mbed wurde ein Workaround dafür eingebaut und die newlib Version abgefragt. In der 11er Toolchain war dann eine neuere newlib drin, aber mit kaputter Versionsnummer und der Workaround ließ sich damit nicht kompilieren. Weiteres Highlight: der gdb in der 11er Toolchain hat eine Abhängigkeit zu Python 3.6, diese Version wurde aber vom OS deinstalliert. Mit der 12er toolchain sieht das besser aus, ich weiß nicht warum ST diese fehlhafte toolchain in Cube 1.13.0 verwendet. Tests wurden wohl wegen Urlaub ausgelassen. Andere Toolchain aber nicht in Cube 1.10.0 (oder war es 1.11?) installieren, das schreddert die IDE Installation.

OP #7460780
Lesenswert?

J. S. schrieb:

Man kann in der CubeIDE weitere Toolchains installieren. Mit der 11.2/11.3 hatte ich auch nur Probleme, disconnect beim debuggen hatte ich ja auch schon geschrieben. ...

Ich bin ja froh, daß ich eine Toolchain installiert habe, mit der build usw. funktioniert. Es ging jetzt zuletzt nur um den GDB (zuvor 8.2.50.20181213-git), den ich jetzt auf GDB 13.1.90.20230307-git aktualisiert habe, um da alle Eventualitäten im Zusammenhang mit der BMP auszuschließen. Aber das hat letztlich nichts gebracht. Ich muß warten, was sich bei den Entwicklern tut.

OP #7463724
Lesenswert?

Wollte mich noch mal kurz melden. Das Entwicklerteam hat das Problem gefixt und ich arbeite im Moment mit einer gepatchten Version von BMP (v1.9.0-1005-gf61b937b). Das wird dann in 1.10 drin sein.

Und noch der Vollständigkeit halber (weil das ja eigentlich meine Ursprungsfrage war): Die Verbindung im GDB-Hardware-Debug-Launcher (Startup) geht so:

1
set mem inaccessible-by-default off
2
tar extended-remote :2000
3
monitor swdp_scan
4
attach 1

Eigentlich verbindet man ja direkt über das Serial Device, das der BMP-Dongle anlegt. Aber in dem Falle wurde ein Logging gebraucht, um den Fehler einzukreisen. Blackmagic kann ja auch mit PROBE_HOST=hosted HOSTED_BMP_ONLY=0 übersetzt werden und fungiert dann als GDB-Server vor dem BMP-Dongle. Ähnlich OpenOCD. Aber das brauche ich Euch ja nicht zu sagen :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren