mikrocontroller.net

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


Autor: Karl Zeilhofer (griffin27)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Zeilhofer (griffin27)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Karl Zeilhofer (griffin27)
Datum:

Bewertung
0 lesenswert
nicht 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:
Installieren der gnu-arm toolchain auf ubuntu 8.04.1 LTS

Inhalt:
1) binutils
2-4) gcc
5) newlib
6) gdb
7) eclipse cdt
8) zylin embedded cdt plugin
9) openocd


Dazu benötigen wir die Sorucen von www.gnuarm.com für 
binutils-2.17, gcc-4.1.1 und newlib-1.14.0
Von http://ftp.gnu.org/gnu/gdb/ laden wir uns die Sourcen für den GNU Debugger (gdb-6.8) herunter. 


packages installieren:
------------------------
$ sudo apt-get install libc6-dev
wird benötigt, um den configure befehl ausführen zu können. 


1) binutils compilieren und installieren
$ tar jxvf binutils-2.17.tar.bz2
$ mkdir build-binutils
$ cd build-binutils
$ ../binutils-2.17/configure --target=arm-elf --prefix=/usr/local/arm7
$ sudo make all install

2*) ubuntu im recovery mode starten und als root arbeiten
Muss deswegen gemacht werden, da mit dem sudo Befehl die binaries nicht direkt verwendet werden können. 
Ist ein bekanntes Problem (siehe Internet). 

3) die im Punkt 1 installierten binaries im PATH eintragen
$ export PATH=$PATH:/usr/local/arm7/bin

4) gcc kopilieren und installieren
In das Verzeichnis wechseln, in dem die Sourcecode Tarballs liegen. 
$ tar jxvf gcc-4.1.1.tar.bz2
$ mkdir build-gcc
$ cd build-gcc
$ ../gcc-4.1.1/configure --target=arm-elf --prefix=/usr/local/arm7 --enable-languages=c --with-newlib
$ sudo make all-gcc install-gcc

*) Statt Punkt 2) und können wir auch folgendes machen:
In die datei ~/.bashrc wird ganz unten folgendes hinzugefügt:
  PATH=$PATH:/usr/local/arm7/bin
  alias sudo='sudo env PATH=$PATH'
Somit ist der PATH auch unter sudo bekannt, sonst würde der securepath verwendet werden. Siehe dazu 
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/50797
Neustart der Konsole nicht vergessen!

5) newlib kompilieren und installieren (standard c Bibliothek)
Unter Ubuntu 8.04 müssen wir einen Patch auf die configure datei anwenden:

Dieser Patch ist downloadbar unter:
http://kriewitz.eu/projects/gnuarm/newlib-1.14.0-missing-makeinfo.patch
Dieser Patch wird auch im Verzeichnis mit den Tarballs abgelegt.


Wir gehen also wie folgt vor:

$ sudo apt-get install texinfo
$ sudo apt-get install patch

$ tar xzvf newlib-1.14.0.tar.gz
$ cd newlib-1.14.0
$ patch configure ../newlib-1.14.0-missing-makeinfo.patch

$ cd ..
$ mkdir build-newlib
$ cd build-newlib
$ ../newlib-1.14.0/configure --target=arm-elf --prefix=/usr/local/arm7
$ sudo make all install info

6) GNU Debugger kompilieren und installieren

$ sudo apt-get install ncurses-dev

$ tar xzvf gdb-6.8.tar.gz
$ mkdir build-gdb
$ cd build-gdb
$ ../gdb-6.8/configure --target=arm-elf --prefix=/usr/local/arm7
$ sudo make all install

7) Eclipse CDT Genymade installieren:
http://flurdy.com/docs/eclipse/install.html

8) Zylin Embedded CDT Plugin installieren:
Eclipse Starten und auf Help->Software Updates gehen.
Available Software -> Add Site:
http://www.zylin.com/zylincdt
Install!

9) openOCD installieren
$ sudo apt-get install libftdi0
$ sudo apt-get install subversion
$ sudo apt-get install autoconf
$ sudo apt-get install automake
Bin mir nicht sicher ob folgendes Package notwendig ist:
$ sudo apt-get install libftdi-dev

Check out SVN 977:
($ svn co http://svn.berlios.de/svnroot/repos/openocd)
Für neuere Versionen sind wieder Änderungen in dem Config-File notwendig. 
Derzeit liegt keine Notwendigkeit für eine Neuere Version vor. Die 977er funktioniert sehr gut. 

$ cd openocd/trunk
$ ./bootstrap
$ ./configure --enable-parport --enable-ft2232-libftdi
$ make
$ sudo make install
$ make clean

OpenOCD kann nun mit dem openOCD-USB (embedded-projects.net) gestartet werden:
/GNU_ARM_Toolchain$ sudo openocd -f openocd-usb.cfg
Immer mit sudo starten!!


10) Als terminal empfielt sich GTK-Term




Referenzen:
http://www.doctort.org/adam/index.php?s=arm-elf-gcc
http://www.doctort.org/adam/nerd-notes/arm-helloworld.html
http://shop.embedded-projects.net/product_info.php?info=p75_OpenOCD-USB-Adapter.html
http://www.atmel.com
http://developer.berlios.de/projects/openocd/
http://www.ubuntu.com


Sollte ich vielleich nochmals die komplette Iinstallation neu machen?

lg, Karl

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.