Forum: Mikrocontroller und Digitale Elektronik Mit Eclipse und OpenOCD LPC1768 debuggen - Fehlermeldungen statt Breakpoints


von Zoonk (Gast)


Lesenswert?

Hi,

ich habe hier ein LPC1768-Board, welches ich gerne per OpenOCD Debuggen 
möchte (also ein paar Breakpoints setzen und Variablen untersuchen).

OpenOCD läuft und hat auch schon verbindung zum Board. Dann bin ich nach 
der Anleitung unter 
http://www.makingthings.com/documentation/tutorial/debug-with-openocd/configure-eclipse 
vorgegangen, um mit Eclipse arbeiten zu können.

Allerdings produzieren die dort angegebenen Kommandos bei mir nur 
Fehlermeldungen:

    target remote localhost:3333
    Remote 'g' packet reply is too long: 
2b3253542b3253542b3253542b3253542b3253542b3253542b3253542b3253542b325354 
2b3253542b3253542b3253542b3253542b3253542b3253542b3253540000000000000000 
000000000000000000000000000000000000000000000000000000000000000000000000 
000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000002b325354
    monitor reset
    "monitor" command not supported by this target.
    monitor wait 500
    "monitor" command not supported by this target.
    monitor soft_reset_halt
    "monitor" command not supported by this target.
    monitor arm7_9 force_hw_bkpts enable
    "monitor" command not supported by this target.

Scheinbar ist das monitor-Kommando unbekannt. Wie kann ich die 
Geschichte sonst noch zum laufen bringen?

Ach ja, ich nutze den Codesourcery ARM-GDB arm-none-eabi-gdb

von dfg (Gast)


Lesenswert?

und was passsiert wenn Du den gdb startest
und diese Kommandos am gdb-Prompt eingibst?

Bevor das nicht geht, musst Du gar nicht mit der Eclipse
kommen.

Dann: Sicherstellen, dass eclipse den CS arm-gdb aufruft und
nicht etwa den Host-gdb.

von dfg (Gast)


Lesenswert?

"monitor" command not supported by this target.

scheint eine Folge des

    Remote 'g' packet reply is too long:

zu sein.

Passiert auch dann wenn ich den gdb starte
und ein "monitor" Kommando eingebe, ohne vorher
"target remote" aufgerufen zu haben.



Remote 'g' packet reply is too long:
hatte ich auch schon mit bestimmten CodeSourcery Versionen.
Benutzt Du die Neueste?

von Zoonk (Gast)


Lesenswert?

dfg schrieb:
> hatte ich auch schon mit bestimmten CodeSourcery Versionen.
> Benutzt Du die Neueste?

Ja, es ist die aktuellste Version. Ich habe inzwischen herausgefunden, 
dass das elf-File eine falsche CPU vorgaukelt. Also das File aus der 
Eclipse-Config herausgenommen und die Commands geändert:

    target remote localhost:3333
    set arch armv5
    monitor reset
    monitor sleep 500
    monitor poll
    monitor soft_reset_halt
    monitor arm7_9 force_sw_bkpts enable
    break PreStackEntry
    load firmware/myprog.elf
    continue

Jetzt startet er irgend wie ohne die Fehlermeldungen, hängt sich bei 27% 
auf und hat mir dabei den Flashinhalt zerschossen.

Meine Frage: ist "armv5" als Architektur für den LPC1768 überhaupt 
richtig?

Und wie kann ich das elf-File laden lassen, ohne dass auf dem Flash 
rumgepopelt wird?

von dfg (Gast)


Lesenswert?

> Meine Frage: ist "armv5" als Architektur für den LPC1768 überhaupt
richtig?

Selbstverständlich nicht. LPC1768 ist ein Cortex-M3 und
damit ARMv7-M

>Ja, es ist die aktuellste Version. Ich habe inzwischen herausgefunden,
>dass das elf-File eine falsche CPU vorgaukelt


Was heisst "falsche CPU"? Woher willst Du das wissen?
Wenn das stimmen sollte, dann hast Du die falschen 
Compiler/Linkeroptionen benutzt.


>monitor arm7_9 force_sw_bkpts enable

Dürfte bei CM3 fehl am Platz sein...

von dfg (Gast)


Lesenswert?

und ausserdem:

CodeSourcery hat ein gdb.pdf dabei. Da sind die meisten Deiner
Fragen beantwortet.

von Zoonk (Gast)


Lesenswert?

dfg schrieb:
> Selbstverständlich nicht. LPC1768 ist ein Cortex-M3 und
> damit ARMv7-M

Das bietet der gdb aber nicht an, da gibt es nur

arm, armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, 
armv5te, xscale, ep9312, iwmmxt, iwmmxt2, auto

>>Ja, es ist die aktuellste Version. Ich habe inzwischen herausgefunden,
>>dass das elf-File eine falsche CPU vorgaukelt
>
> Was heisst "falsche CPU"? Woher willst Du das wissen?

Seit ich die Architektur explizit setze, sind die 
"monitor"-Fehlermeldungen weg

von Zoonk (Gast)


Lesenswert?

dfg schrieb:
> Was heisst "falsche CPU"? Woher willst Du das wissen?
> Wenn das stimmen sollte, dann hast Du die falschen
> Compiler/Linkeroptionen benutzt.

-mcpu=cortex-m3

Sollte ja passen.

Im übrigen treten die "monitor"-Fehlermeldungen immer dann auf, so bald 
das .elf-File im Spiel ist. Aktuell habe ich jetzt das hier:

    target remote localhost:3333
    set arch auto
    monitor reset
    monitor wait 500
    monitor soft_reset_halt

Damit komme ich auf das Target, er startet mir meinen Code neu, und dann 
erhalte ich eine Fehlermeldung "No symbol table loaded, use the file 
command". So bald ich aber ein

file firmware/meinprog.elf

anhänge, dann stolpere ich wieder über das Problem mit der Fehlermeldung 
"Remote 'g' packet reply is too long". D.h. das ELF-File bringt mir 
alles ins stolpern.

von Jim M. (turboj)


Lesenswert?

> LPC1768-Board, welches ich gerne per OpenOCD Debuggen möchte
> [...]
> Codesourcery ARM-GDB arm-none-eabi-gdb

Genau diese Kombination habe ich hier am Laufen. Welcher Versionen 
benutzt Du?

von Zoonk (Gast)


Lesenswert?

arm-none-eabi-gcc (Sourcery G++ Lite 2010.09-51) 4.5.1

GNU gdb (Sourcery G++ Lite 2010.09-51) 7.2.50.20100908-cvs

von dfg (Gast)


Lesenswert?

>Sourcery G++ Lite 2010.09-5

Irgendein Grund, dass Du mit dem alten Zeug rummachst?

Aktuell ist:

 /scratch/jwlemke/2011.09-arm-eabi-lite/src/gcc-4.6-2011.09/configure 
--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu 
--target=arm-none-eabi --enable-threads --disable-libmudflap 
--disable-libssp --disable-libstdcxx-pch 
--enable-extra-sgxxlite-multilibs --with-gnu-as --with-gnu-ld 
--with-specs='%{save-temps: -fverbose-asm} -D__CS_SOURCERYGXX_MAJ__=2011 
-D__CS_SOURCERYGXX_MIN__=9 -D__CS_SOURCERYGXX_REV__=69 
%{O2:%{!fno-remove-local-statics: -fremove-local-statics}} 
%{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: 
-fremove-local-statics}}}' --enable-languages=c,c++ --disable-shared 
--enable-lto --with-newlib --with-pkgversion='Sourcery CodeBench Lite 
2011.09-69' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ 
--disable-nls --prefix=/opt/codesourcery --with-headers=yes 
--with-sysroot=/opt/codesourcery/arm-none-eabi 
--with-build-sysroot=/scratch/jwlemke/2011.09-arm-eabi-lite/install/arm- 
none-eabi 
--with-gmp=/scratch/jwlemke/2011.09-arm-eabi-lite/obj/host-libs-2011.09- 
69-arm-none-eabi-i686-pc-linux-gnu/usr 
--with-mpfr=/scratch/jwlemke/2011.09-arm-eabi-lite/obj/host-libs-2011.09 
-69-arm-none-eabi-i686-pc-linux-gnu/usr 
--with-mpc=/scratch/jwlemke/2011.09-arm-eabi-lite/obj/host-libs-2011.09- 
69-arm-none-eabi-i686-pc-linux-gnu/usr 
--with-ppl=/scratch/jwlemke/2011.09-arm-eabi-lite/obj/host-libs-2011.09- 
69-arm-none-eabi-i686-pc-linux-gnu/usr 
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic 
-lm' 
--with-cloog=/scratch/jwlemke/2011.09-arm-eabi-lite/obj/host-libs-2011.0 
9-69-arm-none-eabi-i686-pc-linux-gnu/usr 
--with-libelf=/scratch/jwlemke/2011.09-arm-eabi-lite/obj/host-libs-2011. 
09-69-arm-none-eabi-i686-pc-linux-gnu/usr  --disable-libgomp 
--enable-poison-system-directories 
--with-build-time-tools=/scratch/jwlemke/2011.09-arm-eabi-lite/install/a 
rm-none-eabi/bin 
--with-build-time-tools=/scratch/jwlemke/2011.09-arm-eabi-lite/install/a 
rm-none-eabi/bin
Thread model: single
gcc version 4.6.1 (Sourcery CodeBench Lite 2011.09-69)

und Freunde.

Ist Dein OpenOCD auch so alt?

von Zoonk (Gast)


Lesenswert?

dfg schrieb:
> Irgendein Grund, dass Du mit dem alten Zeug rummachst?

Ja, dem neueren ARM-GCC scheint was elementares zu fehlen:

    /usr/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.3/../../../../arm-none-li 
nux-gnueabi/bin/ld:  cannot find -lcs3
    /usr/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.3/../../../../arm-none-li 
nux-gnueabi/bin/ld:  cannot find -lcs3unhosted
    /usr/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.3/../../../../arm-none-li 
nux-gnueabi/bin/ld:  cannot find -lcs3micro

OpenOCD ist der aktuellste, der mit Fedora 17 mitkommt.

von dfg (Gast)


Lesenswert?

>Ja, dem neueren ARM-GCC scheint was elementares zu fehlen:

Nein.

Bei dem gcc, den ich gerade ausgepackt habe, ist alles da.

Bitte informiere Dich über die "-L" option.
Evtl. liegt es aber auch daran, dass Du bei CS das falsche
Paket heruntergeladen hast. Du
brauchst
arm-2012.03-56-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

>/usr/bin/../lib/gcc/arm-none-linux-gnueabi

deutet drauf, hin, dass Du das Paket für ein Linux Target hast.
Ich bezweifle, dass auf Deinem LPC Board ein Linux läuft.


>OpenOCD ist der aktuellste, der mit Fedora 17 mitkommt.

Das heisst nicht viel. Welche Versionsnummer?

von A. W. (uracolix)


Lesenswert?

Ich hatte das gleiche Problem mit folgendem Setup
 - Tools: self compiled Yagarto @ Linux
   yagarto-bu-2.22_gcc-4.7.1-c-c++_nl-1.20.0_gdb-7.4.1_eabi_20120616
 - openocd 0.6.1
 - SAM3S (cortex-m3) + JLINK (Atmel SAM-ICE)

Der folgende Patch http://pastebin.com/rdFF2eZd löste das Problem, die 
aktuellen OpenOCD-Quellen mussten allerdings manuell gepatcht werden.

Der Link zum Patch stammt von: 
http://stackoverflow.com/questions/7053067/arm-none-eabi-gdb-and-openocd-malformed-response-to-offset-query-qoffsets
(Answer 3).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.