-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: Anleitung: avrgcc + avrdude installieren

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    32
    Beiträge
    172

    Anleitung: avrgcc + avrdude installieren

    Anzeige

    avrgcc und avrdude installieren

    Es gibt bereits eine sehr gute Anleitung für das installieren vom avrgcc, aber sie ist etwas
    veraltet. Für den original Text siehe: http://www.tldp.org/linuxfocus/Engli...ticle352.shtml
    Ich werde im folgenden nur das nötigste von diesem Artikel kopieren.

    Es gibt drei Teile. Im ersten Teil wird die Installation erklaert, im zweiten wird gezeigt wie man
    damit denn nun seine Programme fuer den MCU erstellt. Im dritten Teil stehen noch ein paar
    typische Fehlermeldungen und die Loesungen.

    == Teil 1==

    Also los. Wir brauchen folgende Software:

    binutils-2.16.1.tar.bz2 Zu finden bei ftp://ftp.gnu.org/gnu/binutils/
    gcc-core-4.0.2.tar.bz2 ftp://ftp.gnu.org/gnu/gcc/gcc-4.0.2/
    avr-libc-1.2.5.tar.bz2 http://savannah.nongnu.org/download/avr-libc/ Dort findet ihr auch das Manual fuer die avrlib
    avrdude-5.0.tar.gz http://savannah.nongnu.org/download/avrdude/

    Als erstes erstellen wir das Verzeichnis in das der avrgcc installiert wird:

    # Als root:
    mkdir /usr/local/avr

    Und das Verzeichnis in dem die Programme liegen werden:

    # Als root:
    mkdir /usr/local/avr/bin

    Dieses Verzeichnis wird auch gleich in die PATH Variable geschrieben:
    export PATH=$PATH:/usr/local/avr/bin

    Achtung, dieser Befehl ist nur in dieser eine Konsole in der ihr seit gueltig und auch nur solange
    wie sie offen ist. Um die Aenderung Systemweit wirksam zu machen muesst ihr in die Datei /etc/profile
    den PATH nachtragen. Bei mir sieht das z.B. so aus:

    # Set the default system $PATH:
    PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/usr/local/avr/bin"


    Installation von binutils:

    Mit den binutils bekommt ihr Programme wie z.b. avr-as (Assembler), avr-ld (Linker), avr-objcopy (Um die Hex-Files zu erstellen).
    Und so wirds gemacht:

    tar jxf binutils-2.16.1.tar.bz2 (Das entpacken kann eine Weile dauern)
    cd binutils-2.16.1/
    mkdir obj-avr
    cd obj-avr
    ../configure --target=avr --prefix=/usr/local/avr --disable-nls
    make

    # Als root:
    make install

    Installation vom avr-gcc

    Der avr-gcc ist unser eigentlicher Compiler. Er installiert sich wie folgt:
    tar jxf gcc-core-4.0.2.tar.bz2
    cd gcc-4.0.2

    mkdir obj-avr
    cd obj-avr
    ../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-language=c

    make

    Hinweis: Falls ihr jetzt beim installieren Fehler bekommt die sich z.B so aeussern:
    make[2]: avr-ranlib: Command not found
    Dann liegt /usr/local/avr/bin wider erwarten nicht in PATH. Fuehrt diesen Befehl als root nochmal aus, dann sollte es gehen:
    export PATH=$PATH:/usr/local/avr/bin
    /Hinweis Ende

    # Als root:
    make install


    Installation der AVR C-library

    tar jxf avr-libc-1.2.5.tar.bz2
    cd avr-libc-1.2.5

    PREFIX=/usr/local/avr
    export PREFIX
    sh -x ./doconf
    ./domake

    cd build

    # Als root:
    make install


    Installation vom avrdude

    tar xzf avrdude-5.0.tar.gz
    cd avrdude-5.0
    ./configure --prefix=/usr/local/avr
    make

    #Als root:
    make install

    Wer den AVR910 Programmer benutzt, muss avrdude erst fit fuer einige neue Controller machen.
    (tini2313, mega162, ...). Dazu muesst ihr die Configdatei von avrdude anpassen. Ihr findet
    sie hier: /usr/local/avr/etc/avrdude.conf

    Folgende Zeilen muessen ergaenzt werden:

    #------------------------------------------------------------
    # ATtiny2313
    #------------------------------------------------------------

    part
    id = "t2313";
    desc = "ATtiny2313";
    stk500_devcode = 0x23;
    ## Try the STK500 devcode:
    AVR910_devcode = 0x23;
    .....

    #------------------------------------------------------------
    # ATmega8535
    #------------------------------------------------------------

    part
    id = "m8535";
    desc = "ATMEGA8535";
    stk500_devcode = 0x64;
    AVR910_devcode = 0x69;

    Genauso Verfahren für die ATMega 64, 162 und 169. Die devicecodes hiefür sind:

    m64: AVR910_devcode = 0x45;
    m162: AVR910_devcode = 0x62;
    m169: AVR910_devcode = 0x78;


    Werbung ;)
    Wer sich uebrigends einen eigenen AVR910 Programmer bauen will, dem sei diese Seite ans Herz gelegt:
    http://www.klaus-leidinger.de/mp/Mik...rogrammer.html
    Ich habe die Version genommen und um ein Buffer erweitert. Die Bauanleitung dafuer gibt es bald auf unserer Roboterseite: http://www.amee-bot.de
    / Werbung Ende


    Somit haetten wir nun alles was wir brauchen installiert.

    == TEIL 2 ==

    Hier erstmal ein winziges Beispielprogramm fuer den ATTiny2313.
    Code:
    /*
     *  blink.c
     *  ATTiny2313 mit 1 MHz
     *  PORTB wird ueber ein Timer alle 0.263s ein- und ausgeschaltet. Das entspricht  3.81Hz
     */
    
    #include <stdlib.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    
    SIGNAL(SIG_TIMER0_OVF)
    {
    
      PORTB =~ PORTB; // PORTB inventieren
    
    }
    
    int main()
    {
    
      DDRB  = 0xFF; // PORTB als Ausgang schalten
      PORTB = 0x00; // Alle Ausgaenge auf 0 schalten
    
      TCCR0B |= (1 << CS02) | (1 << CS00); //Prescaler auf 1024 stellen
      TIMSK  |= (1 << TOIE0);              // Timer 0 Overflow Interrupt enable
    
      sei(); // Interrupts einschalten
    
      for(;;); //ever
    
    }
    Den Quelltext nehmt ihr und speichert ihn in die Datei blink.c.

    Jetzt kommt das Makefile. Ich habe schonmal ein einfaches vorbereitet:
    Code:
    TARGET=blink
    MCU=attiny2313
    CC=avr-gcc
    OBJCOPY=avr-objcopy
    CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues -save-temps
    
    all: $(TARGET).hex
    
    $(TARGET).hex : $(TARGET).out
    	$(OBJCOPY) -R .eeprom -O ihex $(TARGET).out $(TARGET).hex
    
    $(TARGET).out : $(TARGET).o
    	$(CC) $(CFLAGS) -o $(TARGET).out -Wl,-Map,$(TARGET).map $(TARGET).o
    
    $(TARGET).o : $(TARGET).c
    	$(CC) $(CFLAGS) -c $(TARGET).c
    
    
    load: $(TARGET).hex
    	avrdude -p t2313 -c AVR910 -U flash:w:$(TARGET).hex -v
    
    clean:
    	rm -f *.o *.map *.out *.hex *.s *.i
    Das speichert ihr in der Datei Makefile im selben Ordner in der auch die Datei blink.c liegt.
    Dann einfach in der Konsole make tippen und es sollte compiliert werden. Mit make load wird das Hexfile dann in den MCU uebertragen.

    Und nun zur Erklaerung.

    MCU=attiny2313 ist eine Variable mit dem Inhalt attiny2313. Ueberall wo jetzte $(TARGET) steht, wird der Variabelninhalt benutzt. Genauso funktioniert das auch mit CC, OBJCOPY und CFLAGS. Nachdem ihr make erfolgreich ausgefuehrt habt, liegt in dem Ordner nun die Hexfile und eine Datei mit der Endung .s .
    Darin sind die Assemblerbefehle die der Compiler aus dem C-Code gemacht hat. Wer so etwas nicht braucht, der kann den Parameter -save-temps in der Variable CFLAGS getrost entfernen.

    Wenn ihr make load ausfuert wird avrdude gestarte. -p gibt an um welchen MCU es sich handelt. Mit -c gebt ihr an um welchen Programmer es sich handelt. Hier koennte z.B stk500 stehen.
    -U flash:w:$(TARGET).hex bedeutet einfach, das dass Programm in den Flash geschrieben werden soll.
    w steht fuer schreiben, r fuer lesen und v fuer verify. Dann kommt die Variable $(TARGET) die besagt
    welche Datei genau uebertragen werden soll. Und am Schluss steht noch ein -v. v Bedeutet Verbose Output und gibt euch mehr Informationen auf der Konsole aus.

    Mit make clean werden alle Temp Dateien geloescht.


    == TEIL 3==

    FEHLER

    sollten eigentlich keine vorkommen. Wenn doch, vergewissert euch, dass ihr euch genau an die
    Anleitung gehalten und nichts falsch abgeschrieben habt.

    Hier ein paar typische Fehlermeldungen und ihr Loesungen:

    Wenn ihr Fehlermeldungen ala "Permission denied" erhaltet, hab ihr nicht die Rechte um diesen Befehl auszufueren. Hoechswahrscheinlich muesst ihr den Befehl als root ausfueren.


    make[2]: avr-ranlib: Command not found
    /usr/local/avr/bin liegt nicht in $PATH. Folgendes Command ausfueren:
    export PATH=$PATH:/usr/local/avr/bin

    Programmer is not responding
    Es kann keine Verbindung zum Programmer aufgenommen werden. Defektes Kabel, Programmer an der
    falschen Schnittstelle angeschlossen (default: /dev/ttyS0), kein Strom am Programmer etc.

    can't open device "/dev/ttyS0": Permission denied
    Als normaler User darf man auf die Serielle Schnittstelle nicht lesen oder schreiben. Folgenden
    Befehl als root ausfueren:
    chmod 666 /dev/ttyS0

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2005
    Ort
    Muri bei Bern
    Beiträge
    20
    Vielen Dank für die sehr schöne Anleitung. Ich habe dank fertiger Pakete für Debian keine Probleme mit der Installation gehabt, aber ich denke dieser Artikel wird vielen nicht Debian Anwendern eine grosse Hilfe sein.

    Grüsse
    Christian

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2004
    Ort
    Karlsruhe
    Beiträge
    223
    wobei ich keinen Grund sehe das nach --prefix=/usr/local/avr zu tun -- ich hab das bei mir unter /usr/local. Da liegt eh nur Zeug was ich von Hand installiert hab und ich muss keinen Pfad anpassen -- find ich sinnvoller.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    32
    Beiträge
    172
    Es ist eben etwas geordneter. Alles was mit dem avrgcc zu tun hat liegen dann unter avr/ und nicht versteut in /usr/local/. Ist vorallem sinnvoll wenn man es wieder loeschen will. Kann aber natuerlich jeder machen wie er will.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2005
    Ort
    Muri bei Bern
    Beiträge
    20
    Um eine bessere Verwaltung der Software zu ermöglichen ist es am besten man erzeugt sich ein eigenes Paket für die Distribution. Bei Debian wäre dies ein deb und bei Redhat und vielen anderen ein rpm. Dann kann man mit den Distributionseigenen Tools die Software verwalten.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Um eine bessere Verwaltung der Software zu ermöglichen ist es am besten man erzeugt sich ein eigenes Paket für die Distribution. Bei Debian wäre dies ein deb und bei Redhat und vielen anderen ein rpm. Dann kann man mit den Distributionseigenen Tools die Software verwalten.
    Du magst schonmal recht haben, aber so wie der Kater es beschrieben hat ist es Distriunabhängig und zum Teil auch auf andere Systeme anwendbar z.B. Mac

    Am sonsten schöne Beschreibung, was man noch hinzufügen könnte, ist daß man für avrdude und Parportprogrammer das modul ppdev und /dev/parport0 benutzen soll, es gab schon Probleme damit hier im Forum.

    Gruß Sebastian

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    17.10.2005
    Ort
    Eberswalde
    Alter
    30
    Beiträge
    40
    Unter Gentoo ist es auch möglich avr-bitutils, avr-gcc, avr-libc und einige weitere Tools über Emerge (den Paketmanager) zu installieren.
    Dabei muss man nur mit Layman folgenden Overlay einfügen:
    * erazor [Rsync ] (source: rsync://erazor-zone.de/port...)

    Anleitung zu layman gibts hier:
    http://www.gentoo.de/main/de/downloads.xml

    ...ich finde so ist es etwas einfacher (habe den beschriebenen Weg auch schon hinter mir).
    Ich habe diesen Weg vorallem gewählt weil Binutils target=avr nicht annhemen wollte.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    ein
    Code:
    crossdev -t AVR
    unter Gentoo bewirkt Wunder.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Ich hab's mal nach MediaWiki transcriptet: avr-gcc und avrdude installieren.

    Noch eine Frage: Offenbar ist es GCC 4.x, in dem C-Beispiel sehe ich aber avr/signal.h, die in 4.x deprecated ist...;

    Und der ISR-Name scheint mir auch nicht auf 4.x zu passen, sie haben doch die Suffix _vect?
    Disclaimer: none. Sue me.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    32
    Beiträge
    172
    Das hat weniger was mit dem gcc-4.x zu tun sonder ehr mit der avr-libc.
    Ich weiss nicht ab welcher Version avr/signal.h deprecatet ist. In meinem Beispiel hatte ich jedenfalls keine Compiler Meldungen bekommen, sonst waer ich der Sache erst nachgegangen bevor ich es hier veroeffentlich haette.

    Wenn ich in den Ferien Zeit finde, werd ich mich mal auf den aktuellesten Stand lesen.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •