Forum: Mikrocontroller und Digitale Elektronik AT91SAM7 openocd flashen funktioniert nicht - RAM aber schon


von Karl Z. (griffin27)


Lesenswert?

hallo,

ich hab nun schon seit längerem das Problem, dass ich meinen Controller 
nicht mehr flashen kann.
Im RAM funktioniert alles super. Runterspielen und debuggen; alles kein 
Problem.

Ich arbeite mit ubuntu, eclipse, openocd, openocd-usb, gcc, usw.
Das Problem hab ich auch schon vor längerer Zeit im openocd-forum 
gepostet, jedoch ohne resonanz.
http://forum.sparkfun.com/viewtopic.php?t=13895

Ich hoffe, dass mir hier jemand weiterhelfen kann. Ich weiß absolt 
nicht, wo ich da zum Fehlersuchen beginnen soll.

Die toolchain hab ich mir bis auf eclipse selber compiliert.

lg, Karl

von gerhard (Gast)


Lesenswert?

hallo,
lt. eclipse output versucht der debugger einen software breakpoint auf 
eine adresse im flash zu setzen, was mit openocd aber sicher nicht 
funktioniert.

ich habe zwar keine ahnung von einer linux-umgebung aber das das 
debuggen vor der linux-neuinstallation funktioniert hat kann ich mir 
nicht vorstellen. da hast du an den einstellungen des gdb etwas geändert 
(oder das passiert bei einer linux-neuinstallation?)?

gruss
gerhard

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

>...
> http://forum.sparkfun.com/viewtopic.php?t=13895
>...
Warning am Anfang der Ausgabe deutet darauf hin, daß gdb nicht mit XML 
support zusammengebaut wurde. Damit funktioniert die recht praktische 
Funktion gdb_memory_map nicht, mit der der Speicherbereich für Flash und 
RAM und somit die Notwendigkeit für SW und HW-Breakpoints zwischen 
OpenOCD und Client ausgetauscht wird. Weiteres dann 
Folgefehler/-probleme.

Man kann irgendwie OpenOCD auch manuell vorgeben, ob HW oder SB BP 
erzwungen werden sollen, habe diese Funktion aber nicht mehr genutzt, 
seit gdb_memory_map existiert.

> Die toolchain hab ich mir bis auf eclipse selber compiliert.
Nur Vorschlag: gdb configure nochmal neu laufen lassen (vorher 
aufräumen), Ausgabe genau anschauen, falls expat-Library (libexpat.a 
o.ä., nicht genau in der Erinnerung) nicht automatisch gefunden wird, 
nachsehen ob diese überhaupt installiert ist, gegf. installieren, dann 
noch evtl. bei configure mit --with-libexpat-prefix Hinweis auf 
Ablageort geben.

Zum eigentlichen Problem:
Ob die Einstellungen für Flash-Setup und Working-Area überhaupt stimmen, 
kann man wegen fehlender Angaben nicht beurteilen. Zum SAM7A3 müßte aber 
ohnehin jemand anderes Hinweise aus erster Hand geben, selbst nur mit S 
und SE etwas gemacht.

von Karl Z. (griffin27)


Lesenswert?

Vielen Dank euch beiden erstmal.

@Gerhard:
Das debuggen im Flash hat vorher wunderbar funktioniert! Ganz ehrlich!

@Thomas:
gdb configure schau ich mir gleich nochmal an.
Die Einstellungen an sich sollten ja passen. Also Reset-Skript und 
config-Skript für openOCD. "Memory-Map"-file sollte ja auch passen. Ist 
direkt von ATMEL und hat ja alles schon mal prima funktioniert.
Du hast gemeint, dir fehlen Angaben. Was musst du denn wissen, um mehr 
sagen zu können?



Ich muss ehrlich gestehen, dass ich da noch nicht so den Durchblick 
habe, was da alles genau passiert.
Wo ist zB der Unterschied zwischen HW und SW Breakpoints?

Seltsamerweise wird ja nichteinmal das aktuelle Programm im Flash 
überschrieben! D.h. das Programm das jetzt im Flash ist, läuft selbst 
nach dem "flashen" als ob nie was gewesen wäre.

Ich bin echt froh, dass sich endlich einmal ein paar "Profis" meinem 
Problem widmen. Vielen Dank!
Ich hoffe, wir werden das gemeinsam hinbringen!

von Karl Z. (griffin27)


Lesenswert?

Hab nun probiert, den gdb neu zu kompilieren und installieren.
Leider funktioniert da etwas mit der libexpat nicht.

libexpat1 war schon am system installiert (standardmäßig) und 
libexpat1-dev hab ich sicherheitshalber mal nachinstalliert (mit dem 
Paketmanager).

ich habe nun im wesentlichen folgendes ausgeführt:
$ sudo make clean
$ sudo ./configure --target=arm-elf --prefix=/usr/local/arm7/ 
--with-expat=yes
$ sudo make all install
hier kommt nun eine Fehlermeldung:
...
checking whether to use expat... yes
checking for ld used by GCC... (cached) ld
checking if the linker (ld) is GNU ld... (cached) yes
checking for shared library run path origin... (cached) done
checking for libexpat... (cached) no
configure: error: expat is missing or unusable
make[1]: *** [configure-gdb] Error 1
make[1]: Leaving directory 
`/home/karl/Projektseminar/GNU_ARM_Toolchain/linux/build-gdb'
make: *** [all] Error 2

Mit dieser Fehlermeldung konnte ich leider nichts anfangen. Auch google 
bracht mir keine direkten Hinweise.
Ich bin auch leicht verwirrt, weil der Paketname einen '1'er angehängt 
hat. also libexpat1. kann das möglicherweise stören?

Beim installieren hab ich mich zum großteil an die Anleitung von Adam 
Pierce gehalten.

Hier meine Installationsanleitung:
1
Installieren der gnu-arm toolchain auf ubuntu 8.04.1 LTS
2
3
Inhalt:
4
1) binutils
5
2-4) gcc
6
5) newlib
7
6) gdb
8
7) eclipse cdt
9
8) zylin embedded cdt plugin
10
9) openocd
11
12
13
Dazu benötigen wir die Sorucen von www.gnuarm.com für 
14
binutils-2.17, gcc-4.1.1 und newlib-1.14.0
15
Von http://ftp.gnu.org/gnu/gdb/ laden wir uns die Sourcen für den GNU Debugger (gdb-6.8) herunter. 
16
17
18
packages installieren:
19
------------------------
20
$ sudo apt-get install libc6-dev
21
wird benötigt, um den configure befehl ausführen zu können. 
22
23
24
1) binutils compilieren und installieren
25
$ tar jxvf binutils-2.17.tar.bz2
26
$ mkdir build-binutils
27
$ cd build-binutils
28
$ ../binutils-2.17/configure --target=arm-elf --prefix=/usr/local/arm7
29
$ sudo make all install
30
31
2*) ubuntu im recovery mode starten und als root arbeiten
32
Muss deswegen gemacht werden, da mit dem sudo Befehl die binaries nicht direkt verwendet werden können. 
33
Ist ein bekanntes Problem (siehe Internet). 
34
35
3) die im Punkt 1 installierten binaries im PATH eintragen
36
$ export PATH=$PATH:/usr/local/arm7/bin
37
38
4) gcc kopilieren und installieren
39
In das Verzeichnis wechseln, in dem die Sourcecode Tarballs liegen. 
40
$ tar jxvf gcc-4.1.1.tar.bz2
41
$ mkdir build-gcc
42
$ cd build-gcc
43
$ ../gcc-4.1.1/configure --target=arm-elf --prefix=/usr/local/arm7 --enable-languages=c --with-newlib
44
$ sudo make all-gcc install-gcc
45
46
*) Statt Punkt 2) und können wir auch folgendes machen:
47
In die datei ~/.bashrc wird ganz unten folgendes hinzugefügt:
48
  PATH=$PATH:/usr/local/arm7/bin
49
  alias sudo='sudo env PATH=$PATH'
50
Somit ist der PATH auch unter sudo bekannt, sonst würde der securepath verwendet werden. Siehe dazu 
51
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/50797
52
Neustart der Konsole nicht vergessen!
53
54
5) newlib kompilieren und installieren (standard c Bibliothek)
55
Unter Ubuntu 8.04 müssen wir einen Patch auf die configure datei anwenden:
56
57
Dieser Patch ist downloadbar unter:
58
http://kriewitz.eu/projects/gnuarm/newlib-1.14.0-missing-makeinfo.patch
59
Dieser Patch wird auch im Verzeichnis mit den Tarballs abgelegt.
60
61
62
Wir gehen also wie folgt vor:
63
64
$ sudo apt-get install texinfo
65
$ sudo apt-get install patch
66
67
$ tar xzvf newlib-1.14.0.tar.gz
68
$ cd newlib-1.14.0
69
$ patch configure ../newlib-1.14.0-missing-makeinfo.patch
70
71
$ cd ..
72
$ mkdir build-newlib
73
$ cd build-newlib
74
$ ../newlib-1.14.0/configure --target=arm-elf --prefix=/usr/local/arm7
75
$ sudo make all install info
76
77
6) GNU Debugger kompilieren und installieren
78
79
$ sudo apt-get install ncurses-dev
80
81
$ tar xzvf gdb-6.8.tar.gz
82
$ mkdir build-gdb
83
$ cd build-gdb
84
$ ../gdb-6.8/configure --target=arm-elf --prefix=/usr/local/arm7
85
$ sudo make all install
86
87
7) Eclipse CDT Genymade installieren:
88
http://flurdy.com/docs/eclipse/install.html
89
90
8) Zylin Embedded CDT Plugin installieren:
91
Eclipse Starten und auf Help->Software Updates gehen.
92
Available Software -> Add Site:
93
http://www.zylin.com/zylincdt
94
Install!
95
96
9) openOCD installieren
97
$ sudo apt-get install libftdi0
98
$ sudo apt-get install subversion
99
$ sudo apt-get install autoconf
100
$ sudo apt-get install automake
101
Bin mir nicht sicher ob folgendes Package notwendig ist:
102
$ sudo apt-get install libftdi-dev
103
104
Check out SVN 977:
105
($ svn co http://svn.berlios.de/svnroot/repos/openocd)
106
Für neuere Versionen sind wieder Änderungen in dem Config-File notwendig. 
107
Derzeit liegt keine Notwendigkeit für eine Neuere Version vor. Die 977er funktioniert sehr gut. 
108
109
$ cd openocd/trunk
110
$ ./bootstrap
111
$ ./configure --enable-parport --enable-ft2232-libftdi
112
$ make
113
$ sudo make install
114
$ make clean
115
116
OpenOCD kann nun mit dem openOCD-USB (embedded-projects.net) gestartet werden:
117
/GNU_ARM_Toolchain$ sudo openocd -f openocd-usb.cfg
118
Immer mit sudo starten!!
119
120
121
10) Als terminal empfielt sich GTK-Term
122
123
124
125
126
Referenzen:
127
http://www.doctort.org/adam/index.php?s=arm-elf-gcc
128
http://www.doctort.org/adam/nerd-notes/arm-helloworld.html
129
http://shop.embedded-projects.net/product_info.php?info=p75_OpenOCD-USB-Adapter.html
130
http://www.atmel.com
131
http://developer.berlios.de/projects/openocd/
132
http://www.ubuntu.com


Sollte ich vielleich nochmals die komplette Iinstallation neu machen?

lg, Karl

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

>...Was musst du denn wissen, um mehr sagen zu können?
Alle Angaben, die OpenOCD gegeben werden (per -f, -c und evtl. implizit, 
also openocd.cfg).

>...Wo ist zB der Unterschied zwischen HW und SW Breakpoints?
HW-BP notwendig für Anwendung im Flash-Speicher, gibt nur wenig davon. 
Ist eine Besonderheit des Cores. Die ARM-Techn.-Library sowie beherztes 
googlen sollten ausreichend Information dazu liefern.

>...Seltsamerweise wird ja nichteinmal das aktuelle Programm im Flash
>überschrieben!
Evtl. wird gar nicht geflasht. Im Zweifel erstmal per Telnet-Interface 
OpenOCD ausprobieren (erase, write, verify). Vgl. OpenOCD Dokumentation. 
Damit wäre dann auch getestet, ob flashen auf SAM7A3 unterstützt wird.

>...checking for libexpat... (cached) no
gibt es eine Datei libexpat.a oder libexpat.la im System? Wenn ja per 
o.g. Option (...prefix...) beim configure den Pfad angeben.
Im Moment grade keinen Zugriff auf meine Toolchain-Zusammenbau-Rechner, 
kann also nicht nachschauen, würde aber ohnehin nicht helfen da 
mingw/msys/WinXP.

>...Check out SVN 977
Ist ziemlich alt. Es gibt inzwischen auch eine "offizelle" Version 
0.1.0. Unterstützung von den wirklichen OpenOCD-Profis (=OpenOCD ML) 
wird wahrscheinlich für Fragen zur alten Version eher spärlich 
ausfallen.

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.