Forum: Mikrocontroller und Digitale Elektronik AVR debuggen unter linux


von Thomas W. (lodentoni)


Lesenswert?

Hallo,

ich bin mitlerweile an dem Punkt angekommen, an dem mir printf-debugging 
nicht mehr ausreicht. Um noch mehr lernen zu können brauche ich mehr 
Mittel. Ich arbeite unter Linux (OpenSuse) und möchte auch damit 
debuggen. Ich bastle viel mit ATMega-AVR (hauptsächlich ATMega644) und 
möchte in naher Zukunft erste Experimente mit Cortex M3 machen. Was mir 
noch fehlt sind Antworten auf einige Fragen die ich habe. Wenn mir da 
einer Helfen könnte wär das super.

Mein aktueller Stand ist, das ich drei Dinge benötige um unter Linux 
cross-debuggen zu können:
1. JTAG Interface
2. gdb debug server
3. debugger frontend (gdb, Insight, DDD)

Eine Funktionale Kombination scheint JTAG-ICemk2 + avarice + DDD zu 
sein. Die 300€ für das Gerät kann ich mir aber nicht leisten.

Daher habe ich mir hier bei mikrocontroller.net einige Links zu 
debuggern angeschaut. Auf den meisten Herstellerseiten gibts aber nur 
Windows Treiber und Software, was mir nicht weiter hilft. Irgendwie bin 
ich beim Olimex AVR-JTAG-USB hängen geblieben. Allerdings steht da nur 
dass er die selben Controller wie das Original unterstützt. Auf der 
Atmel Homepage gibt es aber dazu keine Datenblätter. Weiß einer wo man 
die unterstützten Controller in Erfahrung bringt?

Des weiteren würde mich interessieren welche gdb server es gibt, und 
welche Hardware sie unterstützen. Ich habe oft vom avarice gelesen, 
allerdings noch keine liste mit unterstützter Hardware gefunden. Es gibt 
eine Sourceforge Seite aber keinerlei Infos.


Wär schön wenn jemand ein paar Tipps / Alternativen für mich hat.

Vielen Dank, toni

von ... (Gast)


Lesenswert?

Thomas Weinhold schrieb:
> Irgendwie bin
> ich beim Olimex AVR-JTAG-USB hängen geblieben. Allerdings steht da nur
> dass er die selben Controller wie das Original unterstützt. Auf der
> Atmel Homepage gibt es aber dazu keine Datenblätter. Weiß einer wo man
> die unterstützten Controller in Erfahrung bringt?

Vergiß den am besten ganz schnell wieder.
Die unterstützten µC sind: ATmega16, ATmega32, ATMega323, ATmega162, 
ATmega169, ATmega128
Steht aber auch so im auf der Seite verlinkten user guide:
http://www.olimex.com/dev/pdf/avr-usb-jtag.pdf

Bei Atmel ist dazu nichts mehr zu finden, weil das Teil schon seit 
etlichen Jahren obsolet ist und dafür nichts mehr entwickelt wird.

Wenn Dir das ICEmkII zu teuer ist, warum dann kein Dragon? Zumindest 
unter Windows wird der auch von avarice unterstützt.

von ... (Gast)


Lesenswert?

Thomas Weinhold schrieb:
> Ich habe oft vom avarice gelesen,
> allerdings noch keine liste mit unterstützter Hardware gefunden.

Hier mal ein paar Ausgaben von avarice 2.9 aus WinAVR-20100110:
1
>avarice -h
2
AVaRICE version 2.9, Jan  7 2010 22:42:57
3
4
Usage: avarice [OPTION]... [[HOST_NAME]:PORT]
5
6
Options:
7
  -h, --help                  Print this message.
8
  -1, --mkI                   Connect to JTAG ICE mkI (default)
9
  -2, --mkII                  Connect to JTAG ICE mkII
10
  -B, --jtag-bitrate <rate>   Set the bitrate that the JTAG box communicates
11
                                with the avr target device. This must be less
12
                                than 1/4 of the frequency of the target. Valid
13
                                values are 1000/500/250/125 kHz (mkI),
14
                                or 22 through 6400 kHz (mkII).
15
                                (default: 250 kHz)
16
  -C, --capture               Capture running program.
17
                                Note: debugging must have been enabled prior
18
                                to starting the program. (e.g., by running
19
                                avarice earlier)
20
  -c, --daisy-chain <ub,ua,bb,ba> Daisy chain settings:
21
                                <units before, units after,
22
                                bits before, bits after>
23
  -D, --detach                Detach once synced with JTAG ICE
24
  -d, --debug                 Enable printing of debug information.
25
  -e, --erase                 Erase target.
26
  -E, --event <eventlist>     List of events that do not interrupt.
27
                                JTAG ICE mkII and AVR Dragon only.
28
                                Default is "none,run,target_power_on,target_sleep,target_wakeup"
29
  -f, --file <filename>       Specify a file for use with the --program and
30
                                --verify options. If --file is passed and
31
                                neither --program or --verify are given then
32
                                --program is implied.
33
  -g, --dragon                Connect to an AVR Dragon rather than a JTAG ICE.
34
                                This implies --mkII, but might be required in
35
                                addition to --debugwire when debugWire is to
36
                                be used.
37
  -I, --ignore-intr           Automatically step over interrupts.
38
                                Note: EXPERIMENTAL. Can not currently handle
39
                                devices fused for compatibility.
40
  -j, --jtag <devname>        Port attached to JTAG box (default: /dev/avrjtag).
41
  -k, --known-devices         Print a list of known devices.
42
  -L, --write-lockbits <ll>   Write lock bits.
43
  -l, --read-lockbits         Read lock bits.
44
  -P, --part <name>           Target device name (e.g. atmega16)
45
46
  -p, --program               Program the target.
47
                                Binary filename must be specified with --file
48
                                option.
49
  -r, --read-fuses            Read fuses bytes.
50
  -R, --reset-srst            External reset through nSRST signal.
51
  -V, --version               Print version information.
52
  -v, --verify                Verify program in device against file specified
53
                                with --file option.
54
  -w, --debugwire             For the JTAG ICE mkII, connect to the target
55
                                using debugWire protocol rather than JTAG.
56
  -W, --write-fuses <eehhll>  Write fuses bytes.
57
  -x, --xmega                 AVR part is an ATxmega device.
58
HOST_NAME defaults to 0.0.0.0 (listen on any interface).
59
":PORT" is required to put avarice into gdb server mode.
60
61
e.g. avarice --erase --program --file test.bin --jtag /dev/ttyS0 :4242
62
63
64
>avarice -k
65
AVaRICE version 2.9, Jan  7 2010 22:42:57
66
67
List of known AVR devices:
68
69
Device Name       Device ID     Flash    EEPROM
70
---------------   ---------   -------   -------
71
at90can128           0x9781   128 KiB     4 KiB
72
at90can32            0x9581    32 KiB     1 KiB
73
at90can64            0x9681    64 KiB     2 KiB
74
at90pwm2             0x9381     8 KiB   0.5 KiB
75
at90pwm216           0x9483    16 KiB   0.5 KiB
76
at90pwm2b            0x9383     8 KiB   0.5 KiB
77
at90pwm3             0x9381     8 KiB   0.5 KiB
78
at90pwm316           0x9483    16 KiB   0.5 KiB
79
at90pwm3b            0x9383     8 KiB   0.5 KiB
80
at90usb1287          0x9782   128 KiB     4 KiB
81
at90usb162           0x9482    16 KiB   0.5 KiB
82
at90usb646           0x9682    64 KiB     2 KiB
83
at90usb647           0x9682    64 KiB     2 KiB
84
atmega128            0x9702   128 KiB     4 KiB
85
atmega1280           0x9703   128 KiB     4 KiB
86
atmega1281           0x9704   128 KiB     4 KiB
87
atmega1284p          0x9705   128 KiB     4 KiB
88
atmega128rfa1        0xA701   128 KiB     4 KiB
89
atmega16             0x9403    16 KiB   0.5 KiB
90
atmega162            0x9404    16 KiB   0.5 KiB
91
atmega164p           0x940A    16 KiB   0.5 KiB
92
atmega165            0x9407    16 KiB   0.5 KiB
93
atmega165p           0x9407    16 KiB   0.5 KiB
94
atmega168            0x9406    16 KiB   0.5 KiB
95
atmega168p           0x940B    16 KiB   0.5 KiB
96
atmega169            0x9405    16 KiB   0.5 KiB
97
atmega16hva          0x940C    16 KiB   0.2 KiB
98
atmega2560           0x9801   256 KiB     4 KiB
99
atmega2561           0x9802   256 KiB     4 KiB
100
atmega32             0x9502    32 KiB     1 KiB
101
atmega323            0x9501    32 KiB     1 KiB
102
atmega324p           0x9508    32 KiB     1 KiB
103
atmega325            0x9505    32 KiB     1 KiB
104
atmega3250           0x9506    32 KiB     1 KiB
105
atmega3250p          0x956E    32 KiB     1 KiB
106
atmega325p           0x955D    32 KiB     1 KiB
107
atmega328p           0x950F    32 KiB     1 KiB
108
atmega329            0x9503    32 KiB     1 KiB
109
atmega3290           0x9504    32 KiB     1 KiB
110
atmega3290p          0x950C    32 KiB     1 KiB
111
atmega329p           0x9503    32 KiB     1 KiB
112
atmega32c1           0x9586    32 KiB     1 KiB
113
atmega32hvb          0x9510    32 KiB     1 KiB
114
atmega32m1           0x9584    32 KiB     1 KiB
115
atmega32u4           0x9587    32 KiB     1 KiB
116
atmega406            0x9507    40 KiB   0.5 KiB
117
atmega48             0x9205     4 KiB   0.2 KiB
118
atmega48p            0x920A     4 KiB   0.2 KiB
119
atmega64             0x9602    64 KiB     2 KiB
120
atmega640            0x9608    64 KiB     4 KiB
121
atmega644            0x9609    64 KiB     2 KiB
122
atmega644p           0x960A    64 KiB     2 KiB
123
atmega645            0x9605    64 KiB     2 KiB
124
atmega6450           0x9606    64 KiB     2 KiB
125
atmega649            0x9603    64 KiB     2 KiB
126
atmega6490           0x9604    64 KiB     2 KiB
127
atmega88             0x930A     8 KiB   0.5 KiB
128
atmega88p            0x930F     8 KiB   0.5 KiB
129
attiny13             0x9007     1 KiB   0.1 KiB
130
attiny167            0x9487    16 KiB   0.5 KiB
131
attiny2313           0x910A     2 KiB   0.1 KiB
132
attiny24             0x910B     2 KiB   0.1 KiB
133
attiny25             0x9108     2 KiB   0.1 KiB
134
attiny261            0x910C     2 KiB   0.1 KiB
135
attiny43u            0x920C     4 KiB   0.1 KiB
136
attiny44             0x9207     4 KiB   0.2 KiB
137
attiny45             0x9206     4 KiB   0.2 KiB
138
attiny461            0x9208     4 KiB   0.2 KiB
139
attiny48             0x9209     4 KiB   0.1 KiB
140
attiny84             0x930C     8 KiB   0.5 KiB
141
attiny85             0x930B     8 KiB   0.5 KiB
142
attiny861            0x930D     8 KiB   0.5 KiB
143
attiny88             0x9311     8 KiB   0.1 KiB
144
atxmega128a1         0x974C   136 KiB     2 KiB
145
atxmega128a1revd      0x9741   136 KiB     2 KiB
146
147
>

von Roland H. (batchman)


Lesenswert?

Warum reicht die printf-Methode nicht mehr aus? Ein Protokoll in Form 
eines "log files" ist m. A. nach jedem Debugger überlegen, auch weil es 
später in der Produktionsphase unschätzbare Dienste erweisen kann. 
Spätestens unter Hochlast mit vielen Threads geht's eh nicht anders. 
Aber jeder Jeck ist anders :-)

Abgesehen davon, wenn die Reise Richtung Cortex-M3 gehen soll, dann 
kaufe Dir ein STM32VL Discovery. Kostet 13 EUR inkl. Programmierer und 
Debugger via USB. gdb-Anbindung unter Linux, alles als Open-Source. Aber 
rechne mit Problemen, die arm-utilities sind noch nicht ganz ausgereift, 
ich hab's inzwischen stabil am Laufen und bin sehr zufrieden.

Alternativ ein LPCXpresso für 24 EUR. NXP legt diesem eine Code Red IDE 
Umgebung bei. Damit soll wohl Debugging funktionieren, mir kam dieses 
Ding nicht auf die Platte, da es zwingend mit root-Rechten zu 
installieren ist und ggf. z. B. libusb überschreibt. Auch mit dem Teil 
bin ich sehr zufrieden.

In beiden Fällen soll es sogar möglich sein, den Programmierer/Debugger 
auch "separat" einsetzen zu können. Da musst Du ggf. selbst 
recherchieren.

Wenn ich mir diese Preise ansehe, dazu die Leistung des Cortex-M3, dann 
stellt sich die Frage nach AVR-Debugging nicht mehr. Es gibt nur ein 
Hindernis, und das nennt sich DIP.

von Thomas W. (lodentoni)


Lesenswert?

Das ist doch mal eine Aussage.

Ich denke wenn avarice den Dragon unter Windows unterstützt wird das 
auch unter Linux funktionieren. Der Dragon an sich hat ja eine lange 
Liste von unterstützten Controllern, das finde ich gut.

Muss man noch irgend etwas beachten, ein Datenblatt für den Dragon 
scheint es ja nicht zu geben? An sonsten werde ich mir das Gerät wohl 
zulegen.

Vielen Dank für die Info!

von Thomas W. (lodentoni)


Lesenswert?

Roland H. schrieb:
> Warum reicht die printf-Methode nicht mehr aus? Ein Protokoll in Form
> eines "log files" ist m. A. nach jedem Debugger überlegen, auch weil es
> später in der Produktionsphase unschätzbare Dienste erweisen kann.
> Spätestens unter Hochlast mit vielen Threads geht's eh nicht anders.
> Aber jeder Jeck ist anders :-)
>
> Abgesehen davon, wenn die Reise Richtung Cortex-M3 gehen soll, dann
> kaufe Dir ein STM32VL Discovery. Kostet 13 EUR inkl. Programmierer und
> Debugger via USB. gdb-Anbindung unter Linux, alles als Open-Source. Aber
> rechne mit Problemen, die arm-utilities sind noch nicht ganz ausgereift,
> ich hab's inzwischen stabil am Laufen und bin sehr zufrieden.
>
> Alternativ ein LPCXpresso für 24 EUR. NXP legt diesem eine Code Red IDE
> Umgebung bei. Damit soll wohl Debugging funktionieren, mir kam dieses
> Ding nicht auf die Platte, da es zwingend mit root-Rechten zu
> installieren ist und ggf. z. B. libusb überschreibt. Auch mit dem Teil
> bin ich sehr zufrieden.
>
> In beiden Fällen soll es sogar möglich sein, den Programmierer/Debugger
> auch "separat" einsetzen zu können. Da musst Du ggf. selbst
> recherchieren.
>
> Wenn ich mir diese Preise ansehe, dazu die Leistung des Cortex-M3, dann
> stellt sich die Frage nach AVR-Debugging nicht mehr. Es gibt nur ein
> Hindernis, und das nennt sich DIP.

Also Multithread versuch ich erst garnicht auf dem AVR. Ein OS mit 2kB 
RAM dürfte schwierig werden. Auch das printf debugging funktioniert nur 
dann, wenn es nicht printf ist, das man debuggen will ;) .
Die ersten Experimente mit Cortex M3 werden noch etwas dauern. Von daher 
lohnt es sich für mich schon noch für den AVR Geld auszugeben (wenn es 
im Rahmen bleibt).
Die DIP Problematik sehe ich nicht. Für den Einstieg hatte ich an ein 
Starterkit gedacht. Für richtige Projekte mach ich auch schon mal ein 
Platinendesign.
Für so ein discovery Board bin ich nicht zu begeistern. Mir ist es 
lieber wenn ich zwei Geräte habe: Einen Programmierer/Debugger und das 
Target. Wenn die Teile aber seperat einsetzbar sind wäre das für 
Hobby/Educational Zwecke Ok, Das schau ich mir dann aber an wenn die 
Zeit reif ist.

Ich danke Dir auf jeden Fall.

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.