www.mikrocontroller.net

Forum: Projekte & Code Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain


Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist Peter Danneggers Bootloader, umgemodelt von Atmel-Assembler auf 
die GNU-Tools.

Beschreibung des Bootloader-Originals in 
[[http://www.mikrocontroller.net/articles/AVR_Bootlo...]]

Kurzanleitung: Auspacken, ins ausgepackte Verzeichnis gehen, README 
(englisch) lesen.  Es muss das Atmel-.def-File hinzugefügt werden und 
der Makefile auf den MCU-Typ angepasst werden.

Bisher getestet mit ATmega168.  Ein Makefile-Ziel, das bei Problemen 
binär mit dem Original vergleicht, ist vorgesehen -- auch dazu: README 
lesen.

Vielen Dank an Peter für den feinen Bootloader und die Erlaubnis, seinen 
Code weiterzuverbreiten.

Bitte schreibt eure Erfahrungen mit anderen MCU-Typen hier ins Forum.

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Da ist ein Makefile ohne Erzeugung der Debugging-Symbole durchgerutscht.

Dasselbe also nochmal (erzeugter Code identisch, lässt sich aber mit gdb 
und AVR Studio symbolisch debuggen).  Build 18.

Autor: eku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuche es gerade unter Linux mit dem avr-gcc. Eine atmel_def.mak 
existiert nicht. Woher kommt die?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte die Datei README lesen.  Falls das Englische Probleme macht: 
nochmal fragen, dann erläutere ich's auf deutsch.

Autor: eku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, ich konnte den Bootloader nun generieren. Aber wieso braucht es die 
AVRStudio Headerdateien. Die avrlibc bringt doch avr/iom*.h mit. Warum 
kann man die nicht nehmen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eku schrieb:
> Gut, ich konnte den Bootloader nun generieren. Aber wieso braucht es die
> AVRStudio Headerdateien.

Hä.
AVRStudio ist eine IDE. Die bringt keine Headerdateien mit.

> Die avrlibc bringt doch avr/iom*.h mit. Warum
> kann man die nicht nehmen?

Die will man aber nicht nehmen.
Man möchte beim Aufruf des Compilers den Prozessortyp angeben und die 
io.h sucht aufgrund dieser Angabe die richtige iom*.h heraus.
Eine Source ... für verschiedene Prozessoren verwendbar indem man beim 
Aufruf des Compilers den Prozessortyp angibt.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eku schrieb:
> Gut, ich konnte den Bootloader nun generieren. Aber wieso braucht es die
> AVRStudio Headerdateien. Die avrlibc bringt doch avr/iom*.h mit. Warum
> kann man die nicht nehmen?

Das Original verwendet Symbole, die in den C-Headerdateien nicht zu 
finden sind, beispielsweise die Flashgröße.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> eku schrieb:
>> Gut, ich konnte den Bootloader nun generieren. Aber wieso braucht es die
>> AVRStudio Headerdateien.
>
> Hä.
> AVRStudio ist eine IDE. Die bringt keine Headerdateien mit.
Er meint vermutlich die AVR Definitionsdateien.

>> Die avrlibc bringt doch avr/iom*.h mit. Warum
>> kann man die nicht nehmen?
>
> Die will man aber nicht nehmen.
> Man möchte beim Aufruf des Compilers den Prozessortyp angeben und die
> io.h sucht aufgrund dieser Angabe die richtige iom*.h heraus.
> Eine Source ... für verschiedene Prozessoren verwendbar indem man beim
> Aufruf des Compilers den Prozessortyp angibt.
Darum ging es gar nicht :-)

Autor: neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche den Bootloader für einen AT90CAN128 zu Kompilieren.
Ich habe im Makefile folgende Änderungen vorgenommmen:
MCU = at90can128
ATMEL_INC = can128def.inc
F_CPU = 16000000
CFLAGS += -I . -I ./added -I ./converted -I /opt/avr/include 

Wenn ich nun versuche den Bootloader zu kompilieren erhalte ich folgende 
Fehler und Warnungen:
$ make
./_conv.awk can128def.inc | gawk '/SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -mmcu=at90can128 -DF_CPU=16000000  -I . -I ./added -I ./converted -I /opt/avr/include  \
-ffreestanding -gstabs+ -Wa,-adhlns=bootload.lst,-L,-gstabs+ -DRAM_START=0x0100 -DSRAM_SIZE=4096 added/bootload.S -o bootload.o
./converted/progmega.inc: Assembler messages:
./converted/progmega.inc:38: Warning: constant out of 8-bit range: 65535
./converted/progmega.inc:61: Warning: constant out of 8-bit range: 508
./converted/password.inc:6: Error: invalid sections for operation on `L0' and `Password'
./converted/message.inc:8: Error: invalid sections for operation on `L0' and `Messages'
./converted/progmega.inc:38: Error: operand out of range: 65535
./converted/progmega.inc:61: Error: operand out of range: 508
make: *** [bootload.o] Fehler 1

Hat da einer von euch eine Idee wie ich das lösen kann?

Schonmal Danke

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Bootloader funktioniert nur bis zu Flashgrößen von 64k.  Für den 
Bereich darüber wären andere Pointerarten nötig.

Autor: avion23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B. für den atmega2560 wurde das weiter mit 16bit pointern gelöst. 
Intern hat der PC zwar 17bit. Das oberste Bit wird aber von Hand 
gesetzt. Also hat man zwei Bereiche, an der Trennlinie liegt ein 
Codestück welches das MSB setzt und damit das hochhüpfen in den oberen 
Bereich erlaubt.

Hintergrund ist der, dass der gcc entweder 16bit oder 32bit pointer 
verwendet. 24bit ist nicht. 17bit schon gar nicht. Man hat sich dann 
entschieden, es bei 16bit zu lassen weil man sonst immer 4byte für einen 
pointer bräuchte statt 2byte.


Ohne es mir angesehen zu haben: So etwas könnte man hier mit Sicherheit 
auch einführen.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Machen ließe sich das sicher.  Zumal ja nicht mal die Notwendigkeit 
besteht, innerhalb des Codes wie beschrieben zu springen, das Problem 
dürfte deutlich einfacher liegen.  Fragt sich nur noch, wer das macht 
;).  Ich komme in diesem Jahr jedenfalls nicht mehr dazu.

Es bleibt die Möglichkeit, das Original von Peda einzusetzen.

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche mit
fastboot_build18.tar.gz
den bootloader fuer einen ATtiny85 zu compilieren

und bekomme vom compiler

~/Devel/AVR/BootLoader/fastboot$ make
Makefile:96: atmel_def.mak: No such file or directory
./_conv.awk tn85def.inc | gawk '/SIGNATURE_|SRAM_|FLASHEND|BOOT/' > 
atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -mmcu=attiny85 -DF_CPU=8000000  -I . -I ./added -I 
./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ 
-Wa,-adhlns=bootload.lst,-L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=512 
added/bootload.S -o bootload.o
./converted/command.inc: Assembler messages:
./converted/command.inc:63: Error: illegal opcode jmp for mcu attiny85
./added/fastload.inc:77: Error: illegal relocation size: 1
./added/fastload.inc:78: Error: illegal relocation size: 1
./added/fastload.inc:79: Error: illegal relocation size: 1
make: *** [bootload.o] Error 1


die relevanten Zeilen im file ./converted/command.inc
sind

#if FlashEnd > 0x0FFF
        jmp     Application
#else
        rjmp    Application             ; run application
#endif


wenn der compiler das selbe Datenblatt verwendet wie ich dann kann ich 
den compiler verstehen, da steht nichts ueber einen jmp Befehl.

Kann mir jemand von den asm Gurus einen Tip geben.

Ju

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du die erzeugte atmel_def.h noch wiedergeben?  Interessant ist 
das Symbol FLASHEND.

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ändere es in

#if FlashEnd > 0x7FFF

um.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Äm, nö. Das würde zwar für diesen Fall funktionieren, in anderen -- 
jetzt funktionierenden -- Fällen aber abschmieren.  rjmp kann nun mal 
keine 0x7fff springen, da brauchen wir nicht mal klären, ob es sich um 
eine Byte- oder Wortadresse handelt.

Ich denke, der korrekte Wert wäre 1fff, ich möchte aber die Antwort 
abwarten.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#if __AVR_HAVE_JMP_CALL__
    jmp Application
#else
    rjmp Application
#endif

_AVR_HAVE_JMP_CALL_ ist für GCC >= 4.3 dokumentiert.  Wenn es auch
mit älteren Compilern gehen soll, müsstest du die entsprechenden
Architekturen explizit testen:
#if __AVR_ARCH__ == 2 || __AVR_ARCH__ == 25 || __AVR_ARCH__ == 4
   rjmp Application
#else
   jmp Application
#endif

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prima.  Das ist die beste Möglichkeit.  Ich werde das (voraussichtlich 
die 2. Version) in den Source übernehmen.  Da ich unterwegs bin, wird es 
noch 1..2 Tage dauern, bis ich den hier veröffentliche.

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bin erst jetzt dazugekommen

Weiss nicht ob es noch relevant ist, aber hier meine atmel_def.h


#define  SIGNATURE_000 0x1e
#define  SIGNATURE_001 0x93
#define  SIGNATURE_002 0x0b
; ***** BOOT_LOAD ********************
#define  FLASHEND 0x1FFF        // Note: Word address
#define  SRAM_START 0x0060
#define  SRAM_SIZE 512
; ***** BOOTLOADER DECLARATIONS 
******************************************

Als asm-Unwissender hab ich die Zeilen mal wie von Jörg Wunsch 
vorgeschlagen geaendert.

nun bleiben noch die Fehlermeldungen

./added/fastload.inc:77: Error: illegal relocation size: 1
./added/fastload.inc:78: Error: illegal relocation size: 1
./added/fastload.inc:79: Error: illegal relocation size: 1

der entsprechende code aus der Datei

.byte           UserFlash>>16
.byte           (UserFlash>>8) & 0xff
.byte           UserFlash & 0xff


Ju

Edit:

meine gcc's  sind
gcc --version
gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
avr-gcc --version
avr-gcc (GCC) 4.2.2

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also noch ein weiteres Problem.

Ich werde mich ab morgen darum kümmern.  Dann steht mir der Rechner, auf 
dem der Bootloader-Source sich befindet, zur Verfügung.

Autor: Hendrik P. (endrik)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend
ich wollte mich rstmal fuer diesen netten Bootloader bedanken, er 
verrichtet hier brav seine Dienste und erleichtert vieles.

Nun wollte ich fastboot_build18.tar.gz auch mal auf einen Atmega8 
spielen und stoße da leider auf ein paar Probleme.

Wie fuer Mega32 aendere ich einfach das Makefile auf atmega8 und die 
m8def.inc
Nur leider scheint hier das awk/gawk etwas mist zu bauen.

im atmel_def.h bzw atmel_def.mak ist
FLASHEND auf 0x1FFF gesetzt - wenn ich damit compile gibts einen jmp 
fehler... wenn ich FLASHEND auf 0x0FFF setzte (wie in der m8def.inc 
stehend) compiled er ohne Fehler. Die anderen Werte sehen richtig aus.
Koennt ihr den awk fehler reproduzieren?


Das ganze packe ich dann per avrdude auf den Mega8, wo ich vorher die 
fuses gesetzt habe. (Da mein USB-ISP Adapter noch nicht fertig ist noch 
per Bit-Banging)

avrdude -p m8  -c ponyser -P /dev/ttyUSB0 -v -U flash:w:bootload.hex
...
avrdude: Device signature = 0x1e9307
avrdude: safemode: lfuse reads as EF
avrdude: safemode: hfuse reads as DC
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "bootload.hex"
avrdude: input file bootload.hex auto detected as Intel Hex
avrdude: writing flash (8192 bytes):

Writing | ##                                                 | 4% 32.24s

Die fuses sollten richtig gesetzt sein, das ganze laeuft auf einem 
Pollin Eval Board.


Das ganze geht gut, Bootloader startet auch, nimmt per lboot auch meine 
.hex Datei entgegen, nur leider wird das Hauptprogramm nie gestartet.
Ohne ein Reset kann ich per lboot wieder was neues Flashen, er scheint 
also immer nur den Bootloader zu starten, aber nie ins Hauptprogramm zu 
springen.

Ich bin in Assembler nicht wirklich fit, deshalb hab ich mal den ganzen 
Ordner angehaengt, vllt seht ihr ja wo es hapert.

Sofware nutze ich folgende:
awk --version :GNU Awk 3.1.6 ,genauso wie gawk
avr-gcc --version : avr-gcc (GCC) 4.3.4
Das ganze auf einem Debian squeeze (zzt testing)


Vielen Dank schon einmal
Hendrik

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der gawk macht's schon richtig.  Während FLASHEND für den 
Atmel-Assembler eine Wortadresse ist, muss sie für avr-gcc in eine 
Byteadresse übersetzt werden.  Das macht das gawk-Skript.  8 kBytes sind 
dann 0x1fff.

Zum Problem mit dem jmp/rjmp siehe ein paar Beiträge höher.  Ich bin 
leider noch nicht dazu gekommen, mich darum zu kümmern.  Wenn Du 
FLASHEND einfach mitten in den Flash-Bereich setzst, kommt der Sprung 
zum Programmbeginn dorthin, aber dort gehört er nicht hin.

Autor: Hendrik P. (endrik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, hatte ich nicht so ganz verstanden mit Wort und Byte.

Hab mal den _AVR_ARCH_ Teil eingebaut.
Dann beschreibt
"avrdude: ERROR: address 0x3e10 out of range at line 1 of bootload.hex"
das rjmp Problem von oben?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das Problem noch nicht nachvollzogen, aber ich denke, dass die 
Lösung mit AVR_ARCH auch darauf zutrifft.

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die neue Version, die alle Fehler mit rjmps beheben sollte.

Für Neuanwender: bitte README lesen.  Es gibt einen Abschnitt "QUICK 
START", der alles nötige erklären sollte.

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ mizch

erst mal vielen Dank fuer Deine Version und fuer Dein bemuehen.

Hab leider immer noch Probleme beim compilieren

hier die Ausgabe vom Compiler


flaco:~/Devel/AVR/BootLoader/fastboot$ make
Makefile:102: atmel_def.mak: No such file or directory
./_conv.awk tn85def.inc | gawk '/SIGNATURE_|SRAM_|FLASHEND|BOOT/' > 
atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -mmcu=attiny85 -DF_CPU=8000000  -I . -I ./added -I 
./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ 
-Wa,-adhlns=bootload.lst,-L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=512 
added/bootload.S -o bootload.o
./added/fastload.inc: Assembler messages:
./added/fastload.inc:77: Error: illegal relocation size: 1
./added/fastload.inc:78: Error: illegal relocation size: 1
./added/fastload.inc:79: Error: illegal relocation size: 1
make: *** [bootload.o] Error 1


und die relevanten Zeilen aus ./added/fastload.inc


.byte UserFlash>>16
.byte (UserFlash>>8) & 0xff
.byte UserFlash & 0xff

Ju

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Du bist offensichtlich der Erste, der die avr-gcc/avr-gas-Version auf 
einem µC ohne Boot Section einsetzt.  Dann läuft einiges anders. 
Könntest Du bitte auch dann eine Rückmeldung geben, wenn alles 
funktioniert?

Hier die Version, die die von Dir gemeldeten Fehler behebt.

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@mizch

Klar doch gebe ich auch Rueckmeldung wenn ales tut wie es soll.

Das Problem mit dem Compiler hast Du im Griff, er laeuft durch ohne 
irgendetwas zu beanstanden, doch avrdude meckert beim flashen.


flaco:~/Devel/AVR/BootLoader/fastboot$ avrdude -cusbasp -pt85 
-Uflash:w:bootload.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.01s

avrdude: Device signature = 0x1e930b
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: current erase-rewrite cycle count is 1 (if being tracked)
avrdude: erasing chip
avrdude: reading input file "bootload.hex"
avrdude: input file bootload.hex auto detected as Intel Hex
avrdude: ERROR: address 0x3e2e out of range at line 1 of bootload.hex
avrdude: write to file 'bootload.hex' failed

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hat er recht.  0x3e2e ist "out of range" für ein 8k-Teil.  Ich 
kümmere mich darum.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woher hast Du Deine tn85def.inc?  Beim neuesten AVR Studio (4.18SP1) ist 
nur eine für den Tiny45 dabei.  Falls Du eine aus offiziellen Quellen 
hast, könntest Du sie mir zukommen lassen?

Falls Du sie Dir aus der tn45def.inc gebaut hast:  Hast Du beachtet, 
dass die Flashgröße dort in Worten (16 Bit) angegeben ist?

Autor: Juergen G. (jup)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die tn85def.inc habe ich aus diesem Thread

Beitrag "tn85def.inc tn84def.inc"

Ju

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du in Deiner atmel_def.h nachschauen, welchen Wert dort FLASHEND 
hat?

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vergiss die vorige Frage, es war mein Fehler.  Ich konnte das Problem 
jetzt reproduzieren.  Mitgeliefert eine Version, die es korrigiert.

Für Neueinsteiger:  Bitte README lesen.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte die Version mit 21 im Namen nur für den Tiny85 benutzen.  Sie 
behebt Probleme damit, schafft aber andere.  Alle anderen bitte bei 
Build#20 (fastboot_build20.tar.gz) bleiben.

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist eine neue, gründlich überarbeitete Version.  Ich habe sie 
querbeet mit den Typen Tiny45, Tiny85, mega8, mega64 und mega2560 
geprüft.  Auch die Typen "dazwischen" sollten keine Probleme bereiten.

Die 64k-Grenze ist also weg, ebenso das Problem mit dem Tiny85.  Was 
nicht geht, sind die ganz kleinen Typen ohne 'movw'-Instruktion wie der 
Tiny26.

Es muss nur noch der Makefile angepasst werden und das Atmel-def-File 
hinzugefügt werden; siehe README.  Bitte diesen lesen.

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab das jetzt mal fuer einen m8 konfiguriert

Der build22 meckert bei mir eine fehlende Datei an.

./get_bootsection_addrs.sh

fehlt ihm.


flaco:~/Devel/AVR/m8/BootLoader/fastboot$ make clean
rm -f atmel_def.h bootload.x *.defs *.o *.gas *.mak *.lst *.02x *.map
flaco:~/Devel/AVR/m8/BootLoader/fastboot$ make
Makefile:118: atmel_def.mak: No such file or directory
./_conv.awk m8def.inc | gawk '/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' 
> atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega8 -DF_CPU=16000000  -I . 
-I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gstabs+ -L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=1024 
-DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S 
-o bootload.o
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega8 -DF_CPU=16000000  -I . -I 
./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ 
-L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=1024 -DSTX_PORT=PORTD 
-DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/stub.S -o stub.o
vars="$(./get_bootsection_addrs.sh 0x0fff 0xf80 0xf00 0xe00 )"; \
  eval "$vars"; \
  sed -e "s/@LOADER_START@/$LOADER_START/g" \
      -e s'/@RAM_START@/0x0060/g' \
      -e s'/@RAM_SIZE@/1024/g' \
      -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
      bootload.template.x > bootload.x; \
  avr-ld -N -E -T bootload.x -Map=bootload.map \
    --cref bootload.o stub.o -o bootload.elf --defsym Application=0
/bin/bash: ./get_bootsection_addrs.sh: No such file or directory
avr-ld:bootload.x:21: syntax error
make: *** [bootload.elf] Error 1

Autor: Werner B. (werner-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuche es einmal mit der umbenannten get_text_addrs.sh.
Da steht etwas "plausibles" drin.

Werner

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
get_bootsection_addrs.sh ist neu und fehlt in der Liste der zu packenden 
Programme.  Das habe ich übersehen und deshalb ist sie leider nicht 
mitgeliefert.

Sie befindet sich im Anhang.  Morgen kommt eine neue gepackte Version, 
die dann komplett ist.

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die komplette neue Version.

Es muss nur noch der Makefile angepasst werden und das Atmel-def-File
hinzugefügt werden; siehe README.  Bitte diesen lesen.

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@mizch

Hut ab, "You got it".

Um das ganze mal laufen zu sehen habe ich es zuerst mit einem m8 
getestet. Und nachdem ich die fuses alle richtig gesetzt habe lief der 
bootloader astrein und mein Programm startet nach dem upload.

Dann zurueck zum t85.

Bootloader compiliert einwandfrei und laesst sich per ISP flashen.

efuse auf 0xFE gesetzt

Upload-Programm auf dem PC gestartet und es "uploaded"

Nur startet mein Programm nicht. :-(

Das Test-Programm was ich "uploade" wackelt nur an einem Pin. Wenn ich 
es per ISP flashe dann wackelt der Pin auch. Nur nach bootloader-upload 
wackelt er nicht.

Ich kann das upload-Programm auf dem PC mehrmals aufrufen und immer 
wieder "uploaded" es. (ich muss keinen Reset am ATTiny dazu machen).

hier die Ausgabe vom upload-Programm

flaco:~/Devel/AVR/tn85/FirstTry$ ./bootloader -p main.hex -d /dev/ttyS1 
-b 9600

=================================================
|             BOOTLOADER, Target: V2.1          |
=================================================
COM dev  : /dev/ttyS1
Baudrate : 9600
Program  : main.hex
-------------------------------------------------
Waiting for device... Press CTRL+C to exit. \
...Connected!
Bootloader    : V2.1
File "devices.txt" not found!
Target        : 1E930B (?)
Buffer        :     64 Bytes
Size available:   7678 Bytes

CRC enabled and OK.
Reading main.hex... File read.
Highest address in hex file: 0x0006D (109 Bytes)
Writing program memory...
Programming "main.hex": 00000 - 0006D SUCCESS

CRC: o.k.
Elapsed time: 1.292 seconds
...starting application


Wie bewegt man den t85 dazu das er erst den Bootloader und wenn nichts 
ueber serial rein kommt dann das Programm startet. Beim m8 war es die 
BOOTRST - Fuse, die der t85 nicht hat.


Ju

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei MCUs ohne Bootsection überschreibt der Lader den Reset-Vektor (biegt 
ihn auf sich um) und merkt sich den eigentlich dort geschriebenen Inhalt 
in den 2 Flash-Bytes direkt unterhalb seiner eigenen Beginnadresse.

Dadurch startet immer erst der Bootlader.  Wenn der ins Timeout fällt 
(0,3 sec oder so), wird das Anwenderprogramm gestartet.

Es gibt einen Punkt, den ich im Verdacht habe.  Nehme mal aus dem 
Makefile im Abschnitt
bootload.elf : bootload.o stub.o
das „-c” direkt nach get_text_addrs.sh heraus und probiere, ob das 
Anwenderprogramm dann startet.  Nach der Textersetzung den Bootlader 
komplett neu mit
make -B
 übersetzen.

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SUUUUPIIII, das wars.

jetzt tut er wie er soll.

1000000- Dank .

"realy great job"

Ju

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke fürs Testen.  Dann will ich die korrigierte Version mal hiermit 
unter's Volk bringen.

Für Neueinsteiger, die z.B. durch den Wiki hierher geleitet wurden:

Bitte die Datei 'README' als Erstes anschauen.  Es muss der Makefile 
angepasst werden und das Atmel-def-File hinzugefügt werden.

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo euch allen, ich wollt mir grad einen Bootloader für den atmega 8 
bauen ... aber ich bekomm es nicht hin. und ich hab es eigentlcih nach 
anleitung gemacht.
1. alles extrahiert
2. die m8def.inc datei ausm AVR studio in den ordner kopiert
3. MCU = atmega8,  ATMEL_INC = m8def.inc im makefile definiert
4. --> make all

Fehler:
Build started 22.1.2010 at 02:57:24
vars="$(./get_bootsection_addrs.sh 0x0fff 0xf80 0xf00 0xe00 )"; \
    eval "$vars"; \
    sed -e "s/@LOADER_START@/$LOADER_START/g" \
        -e s'/@RAM_START@/0x0060/g' \
        -e s'/@RAM_SIZE@/1024/g' \
        -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
        bootload.template.x > bootload.x; \
    avr-ld -N -E -T bootload.x -Map=bootload.map \
      --cref bootload.o stub.o -o bootload.elf --defsym Application=0
./get_bootsection_addrs.sh: objdump: command not found
c:\WinAVR-20081205\bin\avr-ld.exe:bootload.x:21: syntax error
make: *** [bootload.elf] Error 1
Build failed with 1 errors and 0 warnings...

an was liegt das?

bitte um Hilfe... danke

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ./get_bootsection_addrs.sh: objdump: command not found

Oha - da wird 'objdump' statt 'avr-objdump' aufgerufen.  Das fällt 
natürlich auf einem System wie meinem nicht auf, wo auch ein nativer gcc 
installiert ist und objdump deshalb existiert.  Ersetze in Datei 
get_bootsection_addrs.sh „objdump” durch „avr-objdump” (oder Du wartest 
bis heute abend, dann kommt eine korrigierte Version).

Der andere Fehler dürfte nur ein Folgefehler sein.

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ging schnell...
ich kann eh erst heut abend neu testen .. dann werde ich weiter 
probieren.

Hat jemand schon mal einen Bootloader für den AT90CAN128 via CAN 
realisiert.
ich suche schon ewig nach so einer lösung und finde nicht wirklich 
etwas.
Als verbindung würde ich den CAN <> USb adapter von mictronics 
nehmen....
der funktioniert wunderbar und ist einfach aufgebaut.
siehe link:  http://www.mictronics.de/projects/usb-can-bus/

Vielen Dank
für die hilfe

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die aktualisierte Version, die nicht objdump, sondern avr-objdump 
voraussetzt.  Letzterer ist u.a. Teil von WinAVR und sollte somit immer 
vorhanden sein.  Sonst hat sich nichts geändert.

Für Neueinsteiger, die z.B. durch den Wiki hierher geleitet wurden:

Bitte die Datei 'README' als Erstes anschauen.  Es muss der Makefile
angepasst werden und das Atmel-def-File hinzugefügt werden.

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute

ich versuche gerade den Bootloader auf einem ATmega2560 zu installieren. 
Makefile hab ich laut nach README angepasst, make ausgeführt. Versuche 
ich das hex-File zu flashen, gibts aber den folgenden 
verification-Fehler:
avrdude -p atmega2560 -P /dev/ttyUSB1 -c stk500v2 -U flash:w:bootload.hex:i -vvv
...

...
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 64.57s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1fc00
         0xff != 0xf8
avrdude: verification error; content mismatch

Was mich stutzig macht, ist der Ort 0x1fc00 -- das ist doch irgendwie in 
der nähe der Bootloadergrenze (0x1fe00) auf welche ich die BOOTSZ-Fuses 
gesetzt hab. Der Output von "make" lautet:
Makefile:118: atmel_def.mak: No such file or directory
./_conv.awk m2560def.inc | gawk '/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega2560 -DF_CPU=16000000  -I . -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ -L,-gstabs+ -DRAM_START=0x0200 -DSRAM_SIZE=8192 -DSTX_PORT=PORTE -DSTX=PE1 -DSRX_PORT=PORTE -DSRX=PE0 added/bootload.S -o bootload.o
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega2560 -DF_CPU=16000000  -I . -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ -L,-gstabs+ -DRAM_START=0x0200 -DSRAM_SIZE=8192 -DSTX_PORT=PORTE -DSTX=PE1 -DSRX_PORT=PORTE -DSRX=PE0 added/stub.S -o stub.o
vars="$(./get_bootsection_addrs.sh 0x1ffff 0x1fe00 0x1fc00 0x1f800 )"; \
  eval "$vars"; \
  sed -e "s/@LOADER_START@/$LOADER_START/g" \
      -e s'/@RAM_START@/0x0200/g' \
      -e s'/@RAM_SIZE@/8192/g' \
      -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
      bootload.template.x > bootload.x; \
  avr-ld -N -E -T bootload.x -Map=bootload.map \
    --cref bootload.o stub.o -o bootload.elf --defsym Application=0
LOADER_START=0x3fc00
STUB_OFFSET=0x3fe
*** Note: set BOOTSZ fuses for the word address 0x1fe00 ***
avr-objcopy -O ihex bootload.elf bootload.hex

Versuche ich mit lboot zu flashen, beginnt das Programm mit dem 
Flashvorgang, bricht aber immer bei 85% ab.

Hm, wo mache ich was falsch?

Vielen Danke und beste Grüße

Jochen

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir sieht es danach aus, als ob bei der Erzeugung des .hex-Files etwas 
schieflief.  Das wäre dann ein Fehler des Programms, nicht auf Deiner 
Seite.

Es dürfte 1 oder 2 Tage dauern, bis ich mich das genauer ansehen kann. 
Hab' solange Geduld.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe doch schon was.  Ich habe nämlich zufällig die Datei hier, mit 
der ich für dem m2560 getestet habe.  Könntest Du bitte verifizieren, ob 
Deine .hex-Datei mit
:020000023000CC
:10FC0000
beginnt (die zweite Zeile ist auf den Teil abgeschnitten, auf den es 
ankommt)?  Das ist die Startadresse des Bootloaders ((3000 << 4) + 
fc00).

Falls das zutrifft, könntest Du bitte noch überprüfen, dass nirgendwo 
anders im .hex-File eine Zeile auftritt, die mit
:02000002
beginnt?  Damit wäre sicher gestellt, dass das Hex-File nirgendwo unter 
0x30000 gehen kann (es bleibt - oder sollte bleiben - sowieso oberhalb 
3fc00, das fc00 wird aber dann durch die einzelnen Records bestimmt).

Ist beides der Fall, dürfte davon auszugehen sein, dass es sich um ein 
Problem beim Flashen handelt und dass im Bootloader-.hex nichts ist, was 
die von avrdude monierte Adresse 0x1fc00 betreffen kann.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens:  Obiges geht auch kürzer.  Mach' mal
avr-objdump -h bootload.hex
und schau nach, wo die Flashadressen (VMA oder LMA, sollte beides 
dasselbe sein) sich befinden.

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

kann beides bestätigen, den Anfang der hex-Datei und das 
nicht-auftauchen der Adresse...

Grüße

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, da war jemand schneller...

hier das Ergebniss:
avr-objdump -h bootload.hex

bootload.hex:     file format ihex

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .sec1         00000400  0003fc00  0003fc00  00000011  2**0
                  CONTENTS, ALLOC, LOAD

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist es ein Problem Deines AVRs oder Flashers, sorry.  Der 
Bootloader will ja nicht nach 0x1fc00, sondern nach 0x3fc00.

Die 0x1fe00 als Beginn der Boot-Section sind übrigens eine Wortadresse 
und liegen daher nur optisch nahe bei Byteadresse 0x1fc00 (avrdude 
verwendet Byteadressen), auf der der Fehler auftritt.

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Oh, das ist eine blöde Diagnose...

Was könnte ich denn mit dem vorhandenen Programmer (stk500v2) noch 
versuchen? Ansonsten würde mir nur bleiben einen neuen Flasher zu 
kaufen?

Das sieht ja schonmal nicht nach einem elektrischen Problem mit dem 
Flasher aus (Kabel defekt oder ähnliches), wegend er runden 
Speicheradresse bei der der Fehler auftritt. Könnte es vielleicht am 
Linux-Treiber liegen? Oder avrdude?

Grüße

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist nicht klar, was der avrdude mit der Adresse 0x1fc00 zu schaffen 
hat, wenn das zu flashende .hex ausschließlich Adressen im Bereich 
0x3fc00..0x3ffff enthält.  (Da Du die Option -D (disable auto erase) 
nicht angegeben hast, sollte übrigens ein Erase stattgefunden haben und 
dort 0xff stehen.  Das deutet auf einen Fehler des Chips hin.)

Meine allererste Vermutung war wegen der Fehleradresse, dass der 
Bootloader sich fälschlicherweise doch dorthin lädt, aber das ist ja nun 
ausgeschlossen.  Vielleicht kann jemand anderes etwas dazu sagen.

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

der Chip könnte defekt sein? Eieiei...

Könnte ich das testen, in dem ich eine hex-File erstelle welche nur 
0xff's enthält, flashe und wieder auslese? Das auslesen des ganzen 
Flashspeichers zur Zeit geht. Wie finde ich die Adresse 0x1fc00 ?

Habe gerade mal mit Windows und AVR-Studio versucht zu flashen (die 
exakt gleiche hex-Datei). Da sagt er mir direkt "content matches", und 
flashen wäre erfolgreich gewesen. Danach scheint der Controller aber tot 
zu sein,  mit lboot kann ich mich dann auch (wieder unter Linux) nicht 
verbinden.

Flashe ich (erfolglos) mit Linux, verbindet sich lboot beim 
Controller-Reset ja immerhin, bricht dann aber nach einer bestimmten 
Zeit mit einem Fehler ab...

BOOTSZ1 und BOOTSZ0 sind beide auf "unprogrammed" (Bit=1) gesetzt, um 
einen 512byte großen Bootloader anzugeben. Das BOOTRST Bit ist 
"programmed" (Bit=0). Das SPIEN ist auch "programmed" (Bit=0).

Aber vielen Dank schonmal für die Hilfe... Hat mir schonmal was 
gebracht!

Grüße
Jochen

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auffällig ist ja schon, dass auf 3fc00 der Inhalt 0xf8 steht und dieser 
Dir auf 1fc00 zurückgemeldet wird.  Neben einem Chipdefekt könnte bei 
serieller Programmierung auch ein Verschleifen mit dem Nachbar-Adressbit 
in Frage kommen, da sich beide Adressen nur in einem Bit unterscheiden.

Du könntest spaßeshalber die zweite Zeile im .hex herausnehmen (die 
erste mit :020000023000CC MUSS drinbleiben) und schauen, ob dann als 
Fehler 0x60 auf Adresse 1fc10 gemeldet wird.  Dann weißt Du zwar, dass 
die Adressen der oberen Flashhälfte in der unteren doppeln, aber viel 
bringt das Wissen eigentlich nicht.

Kannst Du denn andere größere Programme mit avrdude flashen?

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ja wenn ich die zweite Zeile im hex lösche, gibts den entsprechenden 
Fehler:
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1fc10
         0xff != 0x60
avrdude: verification error; content mismatch

Andere Programme kann ich problemlos flashen, das aktuelle Projekt hat 
14382 bytes (laut avrdude, die hex-Datei ist 40kB groß?). Leider komme 
ich auf die schnelle auch nicht an einen anderen Programmer, also werde 
ich das "Projekt Bootloader" wohl verschieben müssen...

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Größe der .hex-Datei kommt schon hin.  Je 16 Code-Bytes enthält sie 
42 Bytes.  Dazu kommen Vor-und Nachspannzeilen.

14k ist nicht besonders groß für einen 256k-Flash.  Ich denke, dass Du 
bei höheren Größen über dieselben Probleme stolpern wirst; einen 
Zusammenhang mit dem Bootloader kann ich jedenfalls beim besten Willen 
nicht erkennen.

Autor: eku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hc,

habe gerade den Umstieg von 1.7 auf 2.5 gewagt. Was läuft hier schief?

avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega8 -DF_CPU=8000000  -I . 
-I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gstabs+ -L,-gstabs+ -DRAM_START= -DSRAM_SIZE= -DSTX_PORT=PORTD 
-DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S -o bootload.o
./converted/password.inc: Assembler messages:
./converted/password.inc:13: Error: non-constant expression in ".if" 
statement
./converted/message.inc:17: Error: non-constant expression in ".if" 
statement
./converted/message.inc:23: Error: non-constant expression in ".if" 
statement
./added/fastload.inc:73: Error: illegal relocation size: 1
./added/fastload.inc:74: Error: illegal relocation size: 1
./added/fastload.inc:76: Error: illegal relocation size: 1
./added/fastload.inc:77: Error: illegal relocation size: 1
./added/fastload.inc:78: Error: illegal relocation size: 1
./added/fastload.inc:80: Error: illegal relocation size: 1
./added/fastload.inc:81: Error: illegal relocation size: 1
./added/fastload.inc:82: Error: illegal relocation size: 1
make: *** [bootload.o] Fehler 1

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es fehlen die defines für SRAM_START und SRAM_SIZE.

Mach' doch mal einen „make -B” und poste dann die Zeile, die mit 
./conf.awk beginnt.  Füge bitte als Anhang Deine m8def.inc, atmel_def.h 
und atmel_def.mak dazu (sie sind nicht gross).

Irgendetwas ist auf dem Weg von m8def.inc zu diesen beiden Dateien 
schief gegangen.

Autor: eku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
> Mach' doch mal einen „make -B” und poste dann die Zeile, die mit
>
> ./conf.awk beginnt.  Füge bitte als Anhang Deine m8def.inc, atmel_def.h
>
> und atmel_def.mak dazu (sie sind nicht gross).

make -B war der entscheidende Hinweis:
_conv.awk fehlte das x-bit


und gleich das nächste Problem:

$ make -B
./_conv.awk 
/home/erik/src/avr/fastboot/avr_gcc/../../avrasm2/defs/m8def.inc | gawk 
'/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega8 -DF_CPU=8000000  -I . 
-I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gstabs+ -L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=1024 
-DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S 
-o bootload.o
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega8 -DF_CPU=8000000  -I . -I 
./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ 
-L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=1024 -DSTX_PORT=PORTD 
-DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/stub.S -o stub.o
vars="$(./get_bootsection_addrs.sh 0x0fff 0xf80 0xf00 0xe00 )"; \
        eval "$vars"; \
        sed -e "s/@LOADER_START@/$LOADER_START/g" \
            -e s'/@RAM_START@/0x0060/g' \
            -e s'/@RAM_SIZE@/1024/g' \
            -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
            bootload.template.x > bootload.x; \
        avr-ld -N -E -T bootload.x -Map=bootload.map \
          --cref bootload.o stub.o -o bootload.elf --defsym 
Application=0
tee: /dev/stderr: Keine Berechtigung
*** Note: set BOOTSZ fuses for the word address 0xf00 ***

get_bootsection_addrs.sh ist neu. Was soll das 'tee /dev/stderr' 
bewirken?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das tee /dev/stderr soll bewirken, dass die Werte auch sichtbar 
ausgegeben werden, mehr nicht.  Es kann also auch wegbleiben, bis ich 
mir eine andere Anzeigemethode habe einfallen lassen.

Auf welchem System arbeitest Du (Linux, FreeBSD, Windows, ...)?  Weißt 
Du zufällig, welche Standard-Shell dort benutzt wird?

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier eine Version, in der der tee nach /dev/stderr herausgenommen und 
ersetzt wurde.  Sonst hat sich an der Funktionalität nichts geändert, es 
sollte aber auf einer größeren Vielfalt an Systemen durchlaufen.

Für Neuanwender: bitte README lesen.  Es gibt einen Abschnitt "QUICK
START", der alles nötige erklären sollte.

Autor: eku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
> Das tee /dev/stderr soll bewirken, dass die Werte auch sichtbar
> ausgegeben werden, mehr nicht.  Es kann also auch wegbleiben, bis ich
> mir eine andere Anzeigemethode habe einfallen lassen.

( printf... ) öffnet eine Subshell. Nichth so elegant. Nimm doch statt
tee die Ausgabeumleitung nach &2.

> Auf welchem System arbeitest Du (Linux, FreeBSD, Windows, ...)?  Weißt
> Du zufällig, welche Standard-Shell dort benutzt wird?

Linux. Wenn Du /bin/sh reinschreibst bekommst Du auch /bin/sh = Bourne
Shell. Nichts mehr und nicht weniger. Das schränkt zwar ein, bleibt
aber portabel.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ( printf... ) öffnet eine Subshell. Nichth so elegant.

Ich weiß nicht, was an einer Subshell unelegant sein soll.  Sie ist ein 
normales Programmierkunstrukt, um etwas zusammenzufassen.

> Nimm doch statt tee die Ausgabeumleitung nach &2.

Das ist gewiss nicht die Lösung.  Denn damit habe ich es auf stdout 
nicht mehr.  Dort wird es aber gebraucht.  Oder warum glaubst Du, dass 
das tee da ist?  Um Dich zu verwirren?  Das wäre ja geschafft.

> Linux. Wenn Du /bin/sh reinschreibst bekommst Du auch /bin/sh = Bourne
> Shell.

Dann bekomme ich ein Shell, die Boune-kompatibel sein sollte, aber mehr 
nicht.  Insbesondere nicht, wie Dein "/bin/sh = Bourne Shell"
vortäuscht, eine bestimmte.  Das kann nämlich dash, bash, ash, busybox, 
... sein.  Das nicht wissend, hast Du die Frage eben schnippisch mit 
"/bin/sh = Bourne Shell" beantwortet. Lassen wir's.

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo euch allen,

ich bin schon seit einiger Zeit auf der Suche nach einem CAN-Bootlader
für den AT90CAN. Leider konnte ich dazu aber kein fertiges Projekt
finden.
Genauere Informationen gibt es unter fogendem Link:

Titel - Beitrag "CAN BUS Bootloader AT90CAN"

Ich hoffe es finden sich einige um dieses Projekt zu realisieren oder 
die dabei helfen können.

Grüße martin

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könntet ihr die Diskussion bitte an eine passende Stelle verlagern?  Das 
hat mit dem Thema des Threads nichts zu tun und eine solche Unterhaltung 
gehört auch nicht in die Codesammlung.

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Thema soll auch nicht hier diskutiert werden.

Ich wollte mit dem Eintrag auf das Problem aufmerksam machen.
Da diesen Thread viele lesen, die Ahnung von der Programmierung von 
bootloadern und den zugehörigen Terminal-Programmen haben.
Mit dieser Erfahrung können Sie sehr wahrscheinlich bei einer Lösung 
helfen.

danke martin

Autor: eku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hc!

Noch eine Bitte fürs Makefile:
bootload.elf und bootload.hex in der clean-Regel löschen.

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich bins nochmal, in der Hoffnung an der rechten Stelle zu sein...

nachdem ich meinen avrisp2-Programmer in die Tonne getreten habe und mir 
einen neuen (AVRISPmkII) besorgt habe, klappte das Programmieren des 
Bootloaders. Bin genau nach der Anleitung im Wiki vorgegangen:
avrdude -p atmega2560 -P usb -c stk500v2 -U flash:w:"bootload.hex":i -U flash:v:"bootloader.hex":i -y

Leider erhalte ich dann beim Flashen mit lboot trotzdem einen 
CRC-Fehler:
./bootloader -v -d /dev/ttyUSB0 -b 115200 -p ../../version0.05/main.hex

=================================================
|           BOOTLOADER, Target: V2.1            |
=================================================
Port    : /dev/ttyUSB0
Baudrate: 115200
File    : ../../version0.05/main.hex
Reading : ../../version0.05/main.hex... File read.
Size    : 3767 Bytes
Program and verify device.
-------------------------------------------------
Waiting for device... connected!
Bootloader    : V2.1
Target        : 1E9801 
Buffer        : 7680 Byte
Size available: 261120 Byte
CRC enabled and OK.
Programming   : 00000 - 00EB7
Writing | ##################################################################################################################### | 100%
Elapsed time: 0.26 seconds, 14488 Bytes/sec.

 ---------- Programming failed (wrong CRC)! ----------

Verify        : 00000 - 00EB7
Verifying | ################################################################################################################### | 100%
Elapsed time: 0.54 seconds, 6976 Bytes/sec.

 ---------- Verification failed (wrong CRC)! ----------

...starting application



Das hier war eine minimal-Version, flashe ich meine komplette Firmware 
bricht lboot sogar nach einer Zeit ab (abhängig von der hex-Datei immer 
an der gleichen Stelle). Das USB-Kabel hab ich auch schon getauscht.

Bedeutet es das mein Flash wirklich defekt ist?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jochen:
Du könntest die Datei zur Überprüfung mit dem ISP flashen und 
verifizieren.  Aber auch so ist es eher unwahrscheinlich (wenn auch 
nicht ausgeschlossen), dass es sich um ein Problem des Bootloaders 
handelt.

@eku:
Das ist sinnvoll (in Übereinstimmung mit dem, was andere Makefiles bei 
'clean' machen).  Für die nächste Version notiert.

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die gleiche hex-Datei kann ich mit einem ISP ganz normal flashen, schon 
hundertmal gemacht -- läuft auch super. Aber das was im Flash steht, 
wird ja bei der Bootloader installation überschrieben, oder? Danach kann 
ich dann mit lboot nicht zugreifen.

Vielleicht ein Problem mit lboot?

Ich seh ein, das fastboot keine Probleme macht ;-) Vielen Dank für die 
Hilfe...

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann Dir leider keine endgültige Antwort geben, da ich nicht jeden 
ATmega-Typ einzeln testen kann.  Ich kann nur gewährleisten, dass der 
erzeugte Code identisch mit dem Original (fastboot von Peter Dannegger) 
ist.

Da auch dort kein entsprechender Fehler gemeldet ist und es den schon 
etwas länger gibt, vermute ich, dass Du in Deiner Hardware suchen musst. 
Aber sicher kann ich es nicht sagen.

Autor: F. Wuro (deichbiker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
ich habe zwei Fragen zum Bootloader, da meine Assembler-Kenntnisse nicht 
sonderlich groß sind:

1. Ich möchte den AtMega128 gerne über eine Modemverbindung 
aktualisieren. Hierzu boote ich meine Hauptapplikation und starte so den 
Bootloader und nehme das Update vor. Das funktioniert soweit auch ganz 
gut, wenn die Verbindung nicht unterbrochen wird. Kommt es aber zu einer 
Unterbrechung, dann ist das Gerät leider nicht mehr erreichbar. Es hilf 
dann nur noch ein Hardware-Reset, wozu man logischerweise am Gerät 
stehen muss. Ich wollte daher gerne wissen, ob im Bootloader keine 
Überprüfung beim Flashen vorgenommen werden kann, ob ALLE Daten korrekt 
geschrieben worden? Falls nicht, dann springt der Bootloader erst gar 
nicht in die Hauptapplikation und wartet auf das erneute Einspielen der 
Firmware. Woran erkennt der Bootloader aktuell, dass sich (angeblich) 
eine Applikation im Flash befindet?

2. Ist es möglich die Lockbits nach dem Firmwareupdate durch den 
Bootlader zu setzen. Ich möchte gerne das Auslesen der Firmware über ISP 
verhindern.

Vielen Dank schon mal!

Autor: Martin Gerken (mager)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde der Watchdog Dir helfen?

Autor: Rev (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Gerken schrieb:
> Würde der Watchdog Dir helfen?

Der Watchdog hilft leider nicht weiter wenn das Firmwareupdate 
"mittendrin" unterbrochen wird. Dann ist der Code ja potentiell 
überhaupt nicht mehr lauffähig.

Der Bootloader müsste halt bei Neustart eine Möglichkeit haben zu 
überprüfen ob der Flash-Vorgang erfolgreich war, bzw. ob eine 
funktionsfähige Firmware vorhanden ist.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
F. Wuro schrieb:
> Hierzu boote ich meine Hauptapplikation und starte so den
> Bootloader und nehme das Update vor. Das funktioniert soweit auch ganz
> gut, wenn die Verbindung nicht unterbrochen wird.

Wenn das Programm unvollständig geschrieben wurde, wird es bei der 
Ausführung mit hoher Wahrscheinlichkeit in den Watchdog laufen und der 
Bootlader wird neu gestartet, wenn die Fuses richtig gesetzt sind.  Von 
daher scheint mir der Watchdog schon ein möglicher Ausweg.

Ein Schreiben der Lockbits ist zwar für einen Bootloader theoretisch 
möglich.  Da die 512 Bytes für den Bootloader aber gesteckt voll sind, 
habe ich gewisse Zweifel, dass Peter Dannegger das implementiert (Du 
müsstest ihn fragen).  Ich möchte mit der AVR-GCC-Version jedenfalls 
immer seiner Vorlage folgen und keinen Fork machen.

Autor: F. Wuro (deichbiker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnelle Unterstützung!

In der Tat ist der Watchdog die Lösung. Wichtig dabei ist den Watchdog 
über die Fuse WDTON zu aktivieren und nicht über die Software, da diese 
im Falle einer Verbindungsabbruchs ja nicht korrekt geschrieben wird.

Bezüglich der Lockbits werde ich mich wie vorgschlagen an Peter 
Danneberger wenden.

Autor: F. S. (franke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
> Die 64k-Grenze ist also weg,...

Hallo zusammen,

ich habe das Problem, dass Applications >64k auf einem ATmega2561 nicht 
programmiert werden können (<64k ohne Probleme). Programmierung >64k mit 
ISP und avrdude oder AVR Studio ist ohne Probleme möglich.

@Hc Zimmerer du schreibst die Grenze ist weg. Kannst du mir einen Tip 
geben wo du was geändert hast? Ich verwende momentan den Bootloader v2.1 
aufm AVR - programmiert wird von einem externen Master gem. Protokoll.

mit Bootloader programmiert:

:10FFE0009F4F2817390739F481E08093AA084957B1
:10FFF0004093E110089550913310952F52FF0BC09C
:020000021000EC
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0

mit AVR Studio programmiert:

:10FFE0009F4F2817390739F481E08093AA084957B1
:10FFF0004093E110089550913310952F52FF0BC09C
:020000021000EC
:100000008091E50F873639F481E08093AA0887E470
:100010008093E210089593FF0BC08091E60F873222

Vielen Dank schon mal im Voraus.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
F. S. schrieb:
> du schreibst die Grenze ist weg. Kannst du mir einen Tip
> geben wo du was geändert hast?

Das war eine ganze Reihe von Änderungen, die aber alle darauf 
hinausliefen, dass der erzeugte Code identisch ist mit dem durch avrasm2 
erzeugten Original von peda.  Die Originale, mit denen geprüft wird, 
sind ein paar Tinys, der Mega8, Mega64 und Mega2560.  Der 2561 ist also 
nicht dabei, die Unterschiede dürften aber für einen Bootloader nicht 
ins Gewicht fallen.

Der Vergleich läuft so ab: Das Makefile besitzt ein Target (cmp), das 
die Codes vergleicht.  Dabei werden zunächst beide Versionen (avrasm2 
und avr-gcc) in reines Binärformat gewandelt, um Unterschiede im Aufbau 
der Intel-Hex-Dateien wegzubekommen. Diese beiden Binärdateien werden in 
einen Hexdump gewandelt und die zwei Hexdumps schließlich mit etwas 
Shellskript-Magie verglichen.  Die Magie sorgt dafür, dass die 
Unterschiede (falls vorhanden) mit Adressinformationen angereichert 
werden, so dass sie einfach im Listing wiedergefunden werden können. 
(Dieser Teil des Makefiles setzt ein Unix-artiges Betriebssystem 
voraus.)

Ein Test mit allen denkbaren AVRs am lebenden Objekt würde den Rahmen 
sprengen.  Auch habe ich hauptsächlich mit den kleineren AVRs zu tun; 
der größte, den ich hier habe, ist ein 644.

Dein Hex-Auszug deutet darauf hin, dass nichts oberhalb der 64-k-Grenze 
geschrieben wurde.  Wenn ich mich richtig erinnere, gab es zumindest 
einen Fehlerbericht hier in diesem Thread, wo zuviel dort geschrieben 
wurde (und der letztlich nicht ganz geklärt blieb - es schien mir 
unwahrscheinlich, dass ein Fehler des Bootladers vorliegt).

Ich kann frühestens ab Wochenende nochmal tiefer in das Thema einsteigen 
... nur wüsste ich im Moment nicht, wie.  Ich kann wahrscheinlich (und 
muss) davon ausgehen, dass das Original von peda seine Sache schon 
richtig macht.  Vielleicht gibt diese Antwort hier Dir eine Ideee zu 
einem Vorschlag, vier Augen sehen schließlich mehr als zwei.

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abend...

ich versuche grad einen Bootloader für den atmega8 mit fastboot_build26 
zu erstellen.

aber ich bekomm es nicht hin. und ich hab es eigentlich nach
anleitung gemacht.

1. alles extrahiert
2. die m8def.inc datei ausm AVR studio in den ordner kopiert
3. MCU = atmega8,  ATMEL_INC = m8def.inc im makefile definiert
4. --> make all

makefile:118: atmel_def.mak: No such file or directory
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
make.exe: *** No rule to make target `all'.  Stop.

aber in dem ordner fastboot wird doch solch ein ordner erstellt mit 
folgendem inhalt:

SIGNATURE_000 = 0x1e
SIGNATURE_001 = 0x93
SIGNATURE_002 = 0x07
BOOTRST = 0
BOOTSZ0 = 1
BOOTSZ1 = 2
FLASHEND = 0x0fff
SRAM_START = 0x0060
SRAM_SIZE = 1024
***** = BOOTLOADER
PAGESIZE = 32
FIRSTBOOTSTART = 0xf80
SECONDBOOTSTART = 0xf00
THIRDBOOTSTART = 0xe00
FOURTHBOOTSTART = 0xc00
SMALLBOOTSTART = FIRSTBOOTSTART
LARGEBOOTSTART = FOURTHBOOTSTART

was ist daran jetzt falsch?

ich verwende WinAVR mit dem programmers notepad2.

danke für die hilfe
Paul

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> makefile:118: atmel_def.mak: No such file or directory
> gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
>
> aber in dem ordner fastboot wird doch solch ein ordner erstellt

Dieser Ablauf ist so schon in Ordnung; die 'No such file' - Meldung 
kommt immer beim ersten Mal und es wird daraufhin, wie Du richtig 
festgestellt hast, die angemeckerte Datei schon erstellt.  Das Anmeckern 
kann nicht abgestellt werden, da der Makefile sie includet.

Das hat nichts damit zu tun:

> make.exe: *** No rule to make target `all'.  Stop.

Der Grund: Du musst einfach 'make' aufrufen, ohne Argumente (wie 'all').

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mhm... also war meine vermutung richtig...

nur die funktion "make" gibt es sicher nicht im programmer notepad 2 
oder?
ich kann es jedenfalls nciht finden.

da kann ich das ganze also nur mit dem avr studio machen oder? :-(

danke

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> nur die funktion "make" gibt es sicher nicht im programmer notepad 2
> oder?

Das weiß ich nicht.  Was spricht dagegen, ein Kommandozeilenfenster 
aufzumachen, 'cd' ins Verzeichnis zu machen und 'make' zu tippen?

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ dazu kannst Du auch beiliegendes Makefile nehmen.  Die 
einzige Änderung gegenüber dem Original ist, dass es über ein Dummy-Ziel 
namens 'all' verfügt, das vom wirklichen Ziel abhängt.

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab ich noch nie so gemacht ...
aber hat geklappt

danke

Autor: Teshima (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich würde sehr gerne wissen mit welchem Compiler die Host-Software für 
windows kompiliert wurde. Da ich es mit MinGW nicht hinbekomme.

Mfg
Teshima

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau verstehst Du unter „Host-Software für windows“?

Autor: Teshima (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den teil denn ich in Windows laufen lassen muss um die hex datei zu 
übertragen.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Thread mit u.a. der Host-Software befinden sich laut Wiki 
(http://www.mikrocontroller.net/articles/AVR_Bootlo...) 
hier („Host-Software für Win32“): 
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644" .

Dort nachzuschauen bzw. anzufragen dürfte für Deine Zwecke besser 
geeignet sein, da der Thread hier sich mit der residenten 
AVR-GCC-Version beschäftigt und keine Host-Software behandelt.

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche seit gestern einen Bootloader auf einem Atmega1281 zum 
Laufen zu bewegen. Ich habe bereits den Bootloader t13 - m644 
ausprobiert, mit dem ich bis jetzt auch keine Probleme hatte. Leider 
fällt er diesmal durch sporadische Nichtfunktion auf.

Daher dachte ich mir, probierst du eben mal diesen hier. Leider habe ich 
da schon beim Erstellen meine Probleme. Ich denke, alles so wie in der 
README gemacht zu haben. Ich benutze AVR-Studio 4.17 build 666 mit 
WinAVR-20090313.

Beim Übersetzen kommt der Fehler:

Makefile:118: atmel_def.mak: No such file or directory

Was aber wohl ganz normal ist, wie ich weiter oben gelesen habe. Die 
Datei atmel_def.mak wird aber erstellt.

Nach mehreren grün markierten Erfolgsmeldungen kommen zum Abschluss 
diese beiden Fehler.

d:\Programme\Atmel\WIN_AVR\bin\avr-ld.exe: avr:51 architecture of input 
file `bootload.o' is incompatible with avr output
d:\Programme\Atmel\WIN_AVR\bin\avr-ld.exe: avr:51 architecture of input 
file `stub.o' is incompatible with avr output

Das ist doch bestimmt was ganz simples und ich bin einfach nur zu doof 
es zu finden.

Könnt Ihr mir bitte weiterhelfen?

Gruß Paul

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du im Makefile die nötigen Anpassungen durchgeführt, z.B. den 
µC-Typ eingestellt?  Welcher ist dort eingestellt und welcher im Studio?

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, habe ich alles gemacht. Auch im AVR-Studio ist als Device atmega1281 
eingestellt. Ist es richtig, das in den Projektordnern auf der linken 
Seite (source files, header files usw.) nichts eingebunden ist?

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das war jetzt dumm ausgedrückt von mir. Auf der linken Seite ist nur das 
Makefile eingebunden, aber sonst nichts.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das ist richtig.  Der Source ist für die Übersetzung ohne AVR-Studio 
gedacht, kann aber natürlich auch mit verwendet werden.  Du kannst die 
Quelldateien angeben, aber da mit Makefile übersetzt wird, steuert nur 
dieser die Übersetzung.

Dein Problem dürfte aber darin liegen, dass die Quellen für einen andren 
Typ kompiliert wurden als der Linker erwartet.  Hast Du mal übersetzt 
und danach den µC-Typ geändert?  Egal.  Starte mal cmd.exe, wechsle in 
das Projekt-Verzeichnis, und rufe „make -B“ auf.

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, habs mit make -b versucht, aber da kommt der gleiche Fehler wie im 
AVR Studio. Wenn ich im Makefile atmega8 und m8def.inc einstelle 
funktioniert die Übersetzung problemlos.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul P. schrieb:
> So, habs mit make -b versucht

make -B.  Das ist was Anderes als make -b.

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, das wusste ich nicht, aber leider hat es dennoch nichts genützt. 
Aber:

Eben habe ich aus Spaß im Makefile mal den Proessortyp in Atmega2560 
geändert, aber mit m1281def.inc übersetzt. Hat funktioniert. Dann habe 
ich den Prozessortyp wieder in Atmega1281 geändert und nochmal 
übersetzt. Und es hat wieder geklappt. Ich kann danach unendlich oft 
problemlos übersetzen. Wenn ich aber zwischendurch wieder mal auf 
atmega2560 umstelle, geht es danach auch mit atmega1281 nicht mehr. Der 
atmega2560 ist wie ein umschalter, mit dem ich zwischen "geht" und "geht 
nicht" wechseln kann.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du übersetzt, dann den Makefile änderst, arbeitet das Ding weiter 
mit den für einen anderen Typ übersetzten Dateien.  Das ist nicht 
sinnvoll.  Denn Makefiles sind dazu da, dass bereits gemachte Arbeit 
nicht nochmal gemacht werden muss.  Durch Deine Änderungen am Makefile 
sorgst Du dafür, dass die bereits gemachte Arbeit den falschen µC-Typ 
betrifft und mit ungeeigneten Dateien weitergemacht wird.

Wenn Du am Makefile was änderst, musst Du vor der nächsten Übersetzung 
„make clean“ aufrufen.

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne mich mit Makefiles eigentlich gar nicht aus. Mich interessiert 
mehr die Aufgabe die der Controller dann erledigen soll, daher war ich 
dafür immer zu bequem und habe das Makefile automatisch erstellen 
lassen.

Ich habe gerade mal ein paar Controllertypen ausprobiert und habe dabei 
immer den Controllertyp mit entsprechendem .inc File getestet. Es gehen 
eigentlich alle außer:

atmega128
atmega1280
atmega1281

Ich habe nach jeder Änderung im Makefile "make clean" durchgeführt.

Vielen Dank schonnmal für deine schnelle Hilfe.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Makefiles werden so richtig auch erst bei wesentlich größeren Projekten 
nützlich, wo die Übersetzungszeit einen wesentlichen Anteil am 
Debug-Zyklus bekommt.

Wie dem auch sei:  Ich habe heute Nachmittag einen Termin und werde 
abends oder morgen die Übersetzung für die von Dir genannten Typen 
nochmal prüfen.  Für'n Moment ist mir die Zeit zu knapp, noch 
einzusteigen.

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank dafür!

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gefunden.  Als Workaround: Ersetze in bootload.template.x ziemlich am 
Beginn die Zeile
OUTPUT_ARCH(avr:2)
durch
OUTPUT_ARCH(avr:51)
und baue dann neu, also entweder „make -B“ oder „make clean; make“ 
ausführen.

Dieser Workaround ist nur für diesen speziellen Fall (ATmega128x) 
gültig.  Eine allgemeine Lösung wird voraussichtlich bis zum Wochenende 
warten müssen.  Dann gibt es eine neue Version.

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

du bist einfach der Beste. Es hat sich ohne Probleme bauen lassen und 
auch der Bootloader scheint jetzt richtig zu funktionieren. Bei dem 
anderen hatte ich immer das Problem, dass die Host Software ständig 
Onewire Modus erkannt hat, obwohl ich Twowire benutze. Ich hoffe das ist 
jetzt vorbei, aber bis jetzt sieht es gut aus.

Vielen Dank nochmals für deine schnelle Hilfe.

Grüße Paul

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

kurz nachdem du mir der Workaround gezeigt hast, hatte ich keine 
Probleme mit dem Bootloader. Eben wollte ich was auf den Controller 
übertragen, da kommt wieder dieser Fehler mit dem Onewire!

COM1 at 38400 Baud: Connected <One Wire>
Bootloader VFFFFFFFF.FF
Error, wrong device informations

Eine Verringerung der Baudrate nützt auch nichts. Ich hatte sogar in dem 
.def File der Host-Software den atmega1281 mit eingetragen. Leider ohne 
Erfolg.

Ich hab mir jetzt gerade Version 1.7 der Host Software runtergeladen und 
mit der scheint es zu funktionieren. Iss ja auch nicht so, dass ich hier 
einen Drahtverhau habe. Der Controller sitzt auf einer richtigen Platine 
und ist mit ca. 10cm langen Kabeln an einen TTL->RS232 Wandler von 
Pollin angeschlossen. Nichts Breadboard oder so.

Naja, vielleicht funktioniert es ja weiterhin, dann wäre alles gut.

Gruß

Paul

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das dürfte, wie Du bemerkt hast, ein Problem der Host-Software sein. 
Ich drück' Dir die Daumen, dass es mit der neuen Version weiterhin geht.

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die aktuelle Version (für alle Typen inklusive des Bugfixes für die 
ATmega128x).

Vor dem Loslegen bitte README lesen und den ersten Teil des Makefile 
anpassen.  Die Anpassungen geschehen hier im Makefile (anders als im 
Wiki beschrieben, der die avrasm2-Version behandelt).

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das ging ja sauschnell, herzlichen Dank. Du konntest es wohl nicht 
erwarten mir zu helfen? ;-) Ich habe eben build27 auf den Atmega1281 
geflasht. Bauen ging absolut reibungslos.

Das Problem mit fehlerhaften Onewire-Erkennung liegt mit Sicherheit an 
der Host-Software, denn es trat ja auch mit dem anderen Bootlaoder auf. 
Ich habe eben problemlos ein paar mal mit beiden Versionen (1.7, 2.1) 
Firmware auf den Controller geladen. Ich kann aber noch nichts Genaues 
sagen, werde aber zunächst mal wieder Version 2.1 testen.

Da ich den Bootloader bei meiner Applikation eigentlich brauche und auch 
schon mittelschwer verzweifelt war, weil er nicht ging, hatte ich mich 
schon nach anderen umgeschaut. Keiner den ich gefunden hatte, ist so 
bequem, vielseitig und universell. Der auf avr_asambler2-Basis war ja 
auch schon bequem, aber jetzt ist es ein reiner Genuss.

Der Bootloader kann ja nicht den EEPROM programmieren. Kann ich die 
Variablen/Konstanten per ISP "EEPROMMEN" und die Firmware dann per 
Bootloader?

Grüße Paul

P.S.: Könntest du vielleicht bitte kurz erklären (aber nicht zu 
kompliziert), was da nun faul war? Was ist denn an den Atmega128x so 
anders, dass so ein Fehler auftreten kann?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was geändert wurde:  Ich verwende ein eigenes Linker-Script.  Das 
Linkerscript bestimmt die Speicheraufteilung.  Da der Bootloader ans 
Ende des Flash kommt, ist das standardmäßige Linkerscript des AVR-GCC 
ungeeignet, deshalb das eigene in einem eigenen Linker-(avr-ld-)Lauf.

Das Linkerscript (bootload.x) wird während des Make-Laufs aus einer 
Vorlage (bootload.template.x) erstellt.  Bisher war die AVR-Architektur, 
für die gelinkt wird, fest vorgegeben.  Das führte beim ATmega128x zu 
dem Fehler, den Du bekommen hast.

Nun wird der AVR-GCC gefragt, welche Architektur er nehmen würde, wenn 
er normal linken würde (die Zeile mit avr-gcc -### ... | gawk ...).  Die 
Architektur wird extrahiert und ins Linkerscript eingetragen.

Zu Deiner anderen Frage:  Der Bootloader löscht das EEProm nicht, Du 
kannst es also mit ISP „vorprogrammieren“.

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Erklärung. Das konnte ich schon halbwegs verstehen. Was 
ich nur komisch fand, war halt, dass ausgerechnet die m128x Typen 
betroffen waren.

Ich habe übrigens heute den Controller mehrmals problemlos mit Version 
2.1 der Host-Software programmiert. Der beschrieben Fehler trat auch 
nicht einmal auf.

Ich werde mich nochmal melden, sollte der Fehler wieder auftreten. Wenn 
er wieder auftritt, steige ich wieder auf Version 1.7 um.

Das mit dem EEPROM dachte ich mir schon, ich wollte nur noch mal sicher 
gehen. Ich hab schon Stunden nach Fehlern im Code gesucht, aber keine 
gefunden; dabei hatte ich Rinv... nur vergessen die *.eep-Datei zu 
übertragen.

Gruß Paul

Autor: Paul P. (dorpreuss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AHRGHHHHHHHHHHHH!!!

Ich werde noch verrückt. Jetzt geht das wieder nicht. Beide Versionen 
der Host Software gehen nicht mehr. Das Übertragen von Firmware geht nur 
nach dem der Bootloader frisch geflasht wurde. Kann es sein, dass da 
irgendwas mit den Adressen nicht stimmt und er sich mit der Firmware 
teilweise selbst überschreibt?

Gruß Paul

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich glaube ich habe den selben Fehler.
  - nutze winavr
  - Bootloader für den AT90can128 auf den UART1(Port D1 und D0)

ich habe es mit einem Bootloader für den atmega 8 versucht, da klappt 
alles besten. jedoch bekomme ich bei der auswahl alle dinge für den 
AT90Can128 folgende Fehler:

*** Note: set BOOTSZ fuses for the word address 0xfe00 ***
LOADER_START=0x1fc00
STUB_OFFSET=0x3fe
c:\WinAVR-20100110\bin\avr-ld.exe: avr:51 architecture of input file 
`bootload.o' is incompatible with avr output
c:\WinAVR-20100110\bin\avr-ld.exe: avr:51 architecture of input file 
`stub.o' is incompatible with avr output
make.exe: *** [bootload.elf] Error 1

Probiert habe ich es mit dem speziellen Makefile mit dem Befehl makeall 
und über das Kommandozeilenfenster. Beide bringen den selben Fehler.

kann mir jemand möglichst schnell helfen?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du auch die aktuelle Version
Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain"
(Build 27) dazu verwendet?

Nachtrag:

Martin J. schrieb:
> Probiert habe ich es mit dem speziellen Makefile

Das klingt mir eher so, als hättest Du stattdessen (oder zusätzlich) 
einen speziellen Workaround für einen bestimmten Prozessor blind 
übernommen (auch avr:51 passt dazu), der durch die neue Version 
hinfällig wurde.

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
--> ich meite dieses Makefile
Hc Zimmerer schrieb:
> Alternativ dazu kannst Du auch beiliegendes Makefile nehmen.  Die
> einzige Änderung gegenüber dem Original ist, dass es über ein Dummy-Ziel
> namens 'all' verfügt, das vom wirklichen Ziel abhängt.

ich hatte ncoh die version 26, mit der gab es dieses Problem, mit der 
Version 27 ist es behoben.

danke

kannst du mir sagen wie Große der Bootloader ist? reicht 1024Byte?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin J. schrieb:
> reicht 1024Byte?

Ja.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe versucht den Build 27 zu compilieren und bekam dabei den 
folgenden output:

Makefile:121: atmel_def.mak: No such file or directory
./_conv.awk m168def.inc | gawk 
'/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega168 -DF_CPU=16000000  -I 
. -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gstabs+ -L,-gstabs+ -DRAM_START=0x0100 -DSRAM_SIZE=1024 
-DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S 
-o bootload.o
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega168 -DF_CPU=16000000  -I . 
-I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gstabs+ -L,-gstabs+ -DRAM_START=0x0100 -DSRAM_SIZE=1024 
-DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/stub.S -o 
stub.o
vars="$(./get_bootsection_addrs.sh 0x1fff 0x1f80 0x1f00 0x1e00 )"; \
        arch="$(avr-gcc -mmcu=atmega168 -### bootload.o  -o x 2>&1 | 
gawk '/\/bin\/ld/ {print $3}')";\
        echo "$vars"; \
        eval "$vars"; \
        sed -e "s/@LOADER_START@/$LOADER_START/g" \
            -e s"/@ARCH@/$arch/" \
            -e s'/@RAM_START@/0x0100/g' \
            -e s'/@RAM_SIZE@/1024/g' \
            -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
            bootload.template.x > bootload.x; \
        avr-ld -N -E -T bootload.x -Map=bootload.map \
          --cref bootload.o stub.o -o bootload.elf --defsym 
Application=0
*** Note: set BOOTSZ fuses for the word address 0x1f00 ***
LOADER_START=0x3e00
STUB_OFFSET=0x1fe
avr-ld:bootload.x:18: syntax error
make: *** [bootload.elf] Error 1

an der Zeile 18 im boottload.x steht "OUTPUT_ARCH()"
dort wo der inhalt von $arch stehen sollte steht also nichts...
Was sollte denn eigentlich dessen inhalt sein? MCU? Quell-Architektur? 
Der Befehl ist mir ein bisschen zu lang um ihn zu verstehen... (bin 
nicht gerade fit was bash programmierung angeht :/ )

tatsächlich gibt >> arch="$(avr-gcc -mmcu=atmega168 -### bootload.o  -o 
x 2>&1 | gawk '/\/bin\/ld/ {print $3}')" << eine leere arch variable

Falls ich ein Einzelfall bin kann ich es ja per hand nachtragen

MFG, Stefan

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du mir den Output der folgenden 2 Kommandos posten?
avr-gcc -mmcu=atmega168 -### bootload.o  -o X 
avr-gcc --version

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ersteres:

Using built-in specs.
Target: avr
Configured with: 
/var/tmp/portage/cross-avr/gcc-4.4.3/work/gcc-4.4.3/configure 
--prefix=/usr --bindir=/usr/i686-pc-linux-gnu/avr/gcc-bin/4.4.3 
--includedir=/usr/lib/gcc/avr/4.4.3/include 
--datadir=/usr/share/gcc-data/avr/4.4.3 
--mandir=/usr/share/gcc-data/avr/4.4.3/man 
--infodir=/usr/share/gcc-data/avr/4.4.3/info 
--with-gxx-include-dir=/usr/lib/gcc/avr/4.4.3/include/g++-v4 
--host=i686-pc-linux-gnu --target=avr --build=i686-pc-linux-gnu 
--disable-altivec --disable-fixed-point --without-ppl --without-cloog 
--enable-nls --without-included-gettext --with-system-zlib 
--disable-checking --disable-werror --enable-secureplt 
--disable-libmudflap --disable-libssp --disable-libgomp --enable-cld 
--with-python-dir=/share/gcc-data/avr/4.4.3/python --disable-libgcj 
--enable-languages=c,c++ --enable-shared --disable-threads 
--disable-bootstrap --disable-libgomp 
--with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.4.3 
p1.0'
Thread model: single
gcc version 4.4.3 (Gentoo 4.4.3 p1.0)
COMPILER_PATH=/usr/libexec/gcc/avr/4.4.3/:/usr/libexec/gcc/avr/4.4.3/:/u 
sr/libexec/gcc/avr/:/usr/lib/gcc/avr/4.4.3/:/usr/lib/gcc/avr/
LIBRARY_PATH=/usr/lib/gcc/avr/4.4.3/avr5/:/usr/lib/gcc/avr/4.4.3/../../. 
./../avr/lib/avr5/:/usr/lib/gcc/avr/4.4.3/:/usr/lib/gcc/avr/4.4.3/../../ 
../../avr/lib/
COLLECT_GCC_OPTIONS='-mmcu=atmega168' '-o' 'X'
 "/usr/libexec/gcc/avr/ld" "-m" "avr5" "-Tdata" "0x800100" "-o" "X" 
"/usr/lib/gcc/avr/4.4.3/../../../../avr/lib/avr5/crtm168.o" 
"-L/usr/lib/gcc/avr/4.4.3/avr5" 
"-L/usr/lib/gcc/avr/4.4.3/../../../../avr/lib/avr5" 
"-L/usr/lib/gcc/avr/4.4.3" 
"-L/usr/lib/gcc/avr/4.4.3/../../../../avr/lib" "bootload.o" "-lgcc" 
"-lc" "-lgcc"

Die version ist da zwar ersichtlich aber dennoch:
avr-gcc (Gentoo 4.4.3 p1.0) 4.4.3
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is 
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.

Die toolchain und gcc habe ich vor knapp 4 monaten mit hilfe von 
crossdev gebaut, bisher hatte ich aber noch keine probleme damit

MFG, Stefan

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan schrieb:
> Die toolchain und gcc habe ich vor knapp 4 monaten mit hilfe von
> crossdev gebaut, bisher hatte ich aber noch keine probleme damit

Kein Problem.  Das Problem ist vielmehr, dass ich Annahmen über den 
internen Aufbau der Toolchain gemacht habe, die bei Dir nicht zutreffen. 
Es war mir dabei klar, dass das u.U. Probleme machen könnten, es schien 
mir aber sehr unwahrscheinlich.  Tja, war wohl nix.

Gegen Abend werde ich eine neue Version fertig haben, die auch mit 
Deinem avr-gcc läuft.

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier nun die modifizierte Version.  Die Zielarchitektur wird jetzt so 
ermittelt, dass auch mit Nicht-Standard-avr-gccs keine Probleme mehr 
auftauchen sollten.  Sonst hat sich nichts geändert; es gibt also keinen 
Grund, von den Vorversionen zu wechseln.

Vor dem Loslegen bitte README lesen und den ersten Teil des Makefile
anpassen.  Die Anpassungen geschehen hier im Makefile (anders als im
Wiki beschrieben, der die avrasm2-Version behandelt).

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Mühe bei mir wird jetzt jedenfalls die Zielarchitektur 
korrekt erkannt

MFG, Stefan

Autor: Tobias S. (tryan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde gerne den Bootloader für einen ATmega64 verwenden. Leider 
kommt beim Compilieren des Bootloaders folgender Fehler:
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega64 -DF_CPU=14745600  -I . -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gdwarf-2 -L,-gdwarf-2 -DRAM_START=0x0100 -DSRAM_SIZE=4096 -DSTX_PORT=PORTE -DSTX=PE1 -DSRX_PORT=PORTE -DSRX=PE0 added/
stub.S -o stub.o

vars="$(./get_bootsection_addrs.sh 0x7fff 0x7e00 0x7c00 0x7800 )"; \
    arch="$(./get_avr_arch.sh -mmcu=atmega64 bootload.o)"; \
    echo "arch=$arch";\
    echo "$vars"; \
    eval "$vars"; \
    sed -e "s/@LOADER_START@/$LOADER_START/g" \
        -e s"/@ARCH@/$arch/" \
        -e s'/@RAM_START@/0x0100/g' \
        -e s'/@RAM_SIZE@/4096/g' \
        -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
        bootload.template.x > bootload.x; \
    avr-ld -N -E -T bootload.x -Map=bootload.map \
      --cref bootload.o stub.o -o bootload.elf --defsym Application=0
*** Note: set BOOTSZ fuses to the word address 0x7e00 ***
./get_avr_arch.sh: awk: command not found
./get_avr_arch.sh: [: =: unary operator expected
get_avr_arch.sh: Could not find an architecture in avr-gcc's internal ld command line
arch=
LOADER_START=0xfc00
STUB_OFFSET=0x3fe
c:\WinAVR-20090313\bin\avr-ld.exe:bootload.x:18: syntax error
make: *** [bootload.elf] Error 1
Build failed with 2 errors and 0 warnings...

Ich hoffe jemand kann mir weiter helfen. Ich gehe nach der README vor 
und benutze AVR Studio 4.18

Vielen Danke Tobias

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tobias S. schrieb:
> ./get_avr_arch.sh: awk: command not found

Probiere mal die angehängte Datei get_avr_arch.sh.  Einfach in das 
ausgepackte Verzeichnis gehen und die vorhandene überschreiben.

Vermutlich ist das ein Problem mit WinAVR: ich nahm an, dass er das 
Unix-Standard-(POSIX-)Kommando „awk“ kennt.  Ich vermute nun, dass er es 
nur unter dem speziellen Namen „gawk“ kennt.

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch ein Problem mit der architecture Erkennung. Mit aktueller 
Version 2.18 sieht der make Output so aus:
vars="$(./get_bootsection_addrs.sh 0x3fff 0x3f00 0x3e00 0x3c00 )"; \
        arch="$(./get_avr_arch.sh -mmcu=atmega32 bootload.o)"; \
        echo "arch=$arch";\
        echo "$vars"; \
        eval "$vars"; \
        sed -e "s/@LOADER_START@/$LOADER_START/g" \
            -e s"/@ARCH@/$arch/" \
            -e s'/@RAM_START@/0x0060/g' \
            -e s'/@RAM_SIZE@/2048/g' \
            -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
            bootload.template.x > bootload.x; \
        avr-ld -N -E -T bootload.x -Map=bootload.map \
          --cref bootload.o stub.o -o bootload.elf --defsym Application=0
*** Note: set BOOTSZ fuses to the word address 0x3f00 ***
./get_avr_arch.sh: Zeile 38: [: =: Einstelliger (unärer) Operator erwartet.
get_avr_arch.sh: Could not find an architecture in avr-gcc's internal ld command line
arch=
LOADER_START=0x7e00
STUB_OFFSET=0x1fe
avr-ld:bootload.x:18: syntax error
make: *** [bootload.elf] Fehler 1

Hier die Ausgabe der beiden Befehle:
avr-gcc -mmcu=atmega168 -### bootload.o  -o X 
Using built-in specs.
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.5.1/lto-wrapper
Target: avr
Configured with: ../configure --disable-libssp --disable-nls --enable-languages=c,c++ --infodir=/usr/share/info --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --prefix=/usr --target=avr --with-gnu-as --with-gnu-ld --with-as=/usr/bin/avr-as --with-ld=/usr/bin/avr-ld
Thread model: single
gcc version 4.5.1 20100610 (prerelease) (GCC) 
COMPILER_PATH=/usr/lib/gcc/avr/4.5.1/:/usr/lib/gcc/avr/4.5.1/:/usr/lib/gcc/avr/:/usr/lib/gcc/avr/4.5.1/:/usr/lib/gcc/avr/
LIBRARY_PATH=/usr/lib/gcc/avr/4.5.1/avr5/:/usr/lib/gcc/avr/4.5.1/../../../../avr/lib/avr5/:/usr/lib/gcc/avr/4.5.1/:/usr/lib/gcc/avr/4.5.1/../../../../avr/lib/
COLLECT_GCC_OPTIONS='-mmcu=atmega168' '-o' 'X'
 "/usr/lib/gcc/avr/4.5.1/collect2" "-m" "avr5" "-Tdata" "0x800100" "-o" "X" "/usr/lib/gcc/avr/4.5.1/../../../../avr/lib/avr5/crtm168.o" "-L/usr/lib/gcc/avr/4.5.1/avr5" "-L/usr/lib/gcc/avr/4.5.1/../../../../avr/lib/avr5" "-L/usr/lib/gcc/avr/4.5.1" "-L/usr/lib/gcc/avr/4.5.1/../../../../avr/lib" "bootload.o" "-lgcc" "-lc" "-lgcc"
avr-gcc --version
avr-gcc (GCC) 4.5.1 20100610 (prerelease)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Idee, woran es hapert?

Gruß,
Julian

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
julian schrieb:
> Idee, woran es hapert?

Es hängt damit zusammen:

> avr-gcc (GCC) 4.5.1 20100610 (prerelease)

und dass „collect2“ statt „avr-gcc“ zum Compilieren aufgerufen wird 
(siehe Deine Ausgabe zu „avr-gcc -mmcu=atmega168 -### bootload.o  -o 
X“).  Da Dein avr-gcc ein Prerelease ist, kann ich Dir leider nur sagen, 
dass ich da erst abwarten möchte, ob das so bleibt und Dich bitten, bis 
dahin mit einem stabilen Release zu übersetzen.

Autor: Tobias S. (tryan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank jetzt hat es funktioniert.
Danke für deine Mühe.

Ich finde es super, was du da auf die Beine gestellt hast.

Respekt.

Vielen Dank Tobias

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die aktuelle Version, so angepasst, dass es auch wieder mit WinAVR läuft 
(enthält das geänderte get_avr_arch.sh von ein paar Artikel darüber). 
Sonst keine Änderungen.

Vor dem Loslegen bitte README lesen und den ersten Teil des Makefile
editieren.  Die Anpassungen geschehen hier im Makefile (anders als im
Wiki beschrieben, der die avrasm2-Version behandelt).

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inzwischen hat meine Distribution auf avr-gcc-4.5.1 stable aktualisiert.
Das Skript funktioniert trotzdem nicht.
Hier die Ausgaben:
make
Makefile:120: atmel_def.mak: Datei oder Verzeichnis nicht gefunden
./_conv.awk m32def.inc | gawk '/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega32 -DF_CPU=12000000  -I . -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ -L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=2048 -DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S -o bootload.o
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega32 -DF_CPU=12000000  -I . -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ -L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=2048 -DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/stub.S -o stub.o
vars="$(./get_bootsection_addrs.sh 0x3fff 0x3f00 0x3e00 0x3c00 )"; \
        arch="$(./get_avr_arch.sh -mmcu=atmega32 bootload.o)"; \
        echo "arch=$arch";\
        echo "$vars"; \
        eval "$vars"; \
        sed -e "s/@LOADER_START@/$LOADER_START/g" \
            -e s"/@ARCH@/$arch/" \
            -e s'/@RAM_START@/0x0060/g' \
            -e s'/@RAM_SIZE@/2048/g' \
            -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
            bootload.template.x > bootload.x; \
        avr-ld -N -E -T bootload.x -Map=bootload.map \
          --cref bootload.o stub.o -o bootload.elf --defsym Application=0
*** Note: set BOOTSZ fuses to the word address 0x3f00 ***
get_avr_arch.sh: Could not find an architecture in avr-gcc's internal ld command line
arch=
LOADER_START=0x7e00
STUB_OFFSET=0x1fe
avr-ld:bootload.x:18: syntax error
make: *** [bootload.elf] Fehler 1
avr-gcc -mmcu=atmega32 -### bootload.o  -o X 
Using built-in specs.
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.5.1/lto-wrapper
Target: avr
Configured with: ../configure --disable-libssp --disable-nls --enable-languages=c,c++ --infodir=/usr/share/info --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --prefix=/usr --target=avr --with-gnu-as --with-gnu-ld --with-as=/usr/bin/avr-as --with-ld=/usr/bin/avr-ld
Thread model: single
gcc version 4.5.1 (GCC) 
COMPILER_PATH=/usr/lib/gcc/avr/4.5.1/:/usr/lib/gcc/avr/4.5.1/:/usr/lib/gcc/avr/:/usr/lib/gcc/avr/4.5.1/:/usr/lib/gcc/avr/
LIBRARY_PATH=/usr/lib/gcc/avr/4.5.1/avr5/:/usr/lib/gcc/avr/4.5.1/../../../../avr/lib/avr5/:/usr/lib/gcc/avr/4.5.1/:/usr/lib/gcc/avr/4.5.1/../../../../avr/lib/
COLLECT_GCC_OPTIONS='-mmcu=atmega32' '-o' 'X'
 "/usr/lib/gcc/avr/4.5.1/collect2" "-m" "avr5" "-o" "X" "/usr/lib/gcc/avr/4.5.1/../../../../avr/lib/avr5/crtm32.o" "-L/usr/lib/gcc/avr/4.5.1/avr5" "-L/usr/lib/gcc/avr/4.5.1/../../../../avr/lib/avr5" "-L/usr/lib/gcc/avr/4.5.1" "-L/usr/lib/gcc/avr/4.5.1/../../../../avr/lib" "bootload.o" "-lgcc" "-lc" "-lgcc"
avr-gcc --version
avr-gcc (GCC) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der get_avr_arch.sh im Anhang sollte sowohl für bisherige als auch für 
neue Versionen von avr-gcc gehen.  Einfach über den vorhandenen 
reinkopieren. Probier's mal damit aus und gib bitte Rückmeldung, ob es 
klappt.

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, make läuft jetzt problemlos durch!

Autor: Jens K. (jens_k56)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

beim Versuch, den Fastboot (build29) für den ATmega8515 zu kompilieren 
(das Makefile habe ich wie in der Readme beschrieben angepasst), bekomme 
ich leider immer die folgenden Fehlermeldungen:

In file included from ./added/fastload.inc:22,
                 from ./converted/bootload.asm:57,
                 from added/bootload.S:47:
./added/fastload.h:109:1: warning: "BOOTSTART" redefined
In file included from added/bootload.S:30:
./atmel_def.h:6:1: warning: this is the location of the previous 
definition
./added/fastload.inc: Assembler messages:
./added/fastload.inc:76: Error: illegal relocation size: 1
./added/fastload.inc:77: Error: illegal relocation size: 1
./added/fastload.inc:78: Error: illegal relocation size: 1
make: *** [bootload.o] Error 1
Build failed with 1 errors and 2 warnings...

In der atmel_def.h steht nach dem build folgendes:

#define  FLASHEND 0xFFF
#define  SMALLBOOTSTART 0b00111110000000  // (0x0F80) smallest boot 
block is 128W
#define  SECONDBOOTSTART 0b00111100000000  // (0x0F00) 2'nd boot block 
size is 256W
#define  THIRDBOOTSTART 0b00111000000000  // (0x0E00) third boot block 
size is 512W
#define  LARGEBOOTSTART 0b00110000000000  // (0x0C00) largest boot block 
is 1KW
#define  BOOTSTART THIRDBOOTSTART  // OBSOLETE!!! kept for compatibility
#define  PAGESIZE 32  // number of WORDS in a page

Offenbar stört das Define "BOOTSTART" und es fehlen die Defines 
"SIGNATURE_000", "SIGNATURE_001" und "SIGNATURE_002".

Wenn ich testweise die atmel_def.h gegen die ursprüngliche Version aus 
dem Fastload-Archiv austausche und mit dem AVR-Studio nur einen Build 
ausführe, tritt kein Fehler auf. Bei einem Rebuild werden dann die 
atmel_def.mak und die atmel_def.h neu erzeugt und der Fehler tritt 
wieder auf.

Kann mir jemand sagen, was bei der Erzeugung schief läuft?

Jens

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Mega8515 hat es vermutlich noch niemand probiert.  Die meisten 
Nutzer hier bevorzugen wohl µCs aus der Nach-Napoleonischen Zeit ... :).

Mach mal erst eines:  Lösche den vorhandenen atmel_def.h und starte den 
Make-Vorgang.  Der atmel_def.h wird dann neu gebaut.  Ich bitte um 
Rückmeldung, ob dieselben Fehler auftreten.

Falls ja (gleiches Fehlerbild), schau mal in dem von Dir im Makefile 
eingebundenen m8515def.inc nach dem Symbol SIGNATURE_000, konkret nach 
der Zeile
.equ    SIGNATURE_000   = 0x1e
Taucht die dort auf?

Autor: Jens K. (jens_k56)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal vielen Dank für Deine schnelle Antwort! Ich muss wohl mal öfter 
meine Email abrufen ;-)

Wenn ich einen Clean Build mache oder die Datei atmel_def.h manuell 
lösche, wird sie so erzeugt, wie ich sie oben gepostet habe und der 
Fehler tritt auf.

Die m8515def.inc enthält keine Definition des Symbols SIGNATURE_000.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut.  Wenn ich mir den von Dir geschriebenen Auszug aus atmel_def.h 
genauer anschaue, scheint mir, dass er nicht von einem originalen 
m8515def.inc von Atmel abgeleitet ist.  Falls das der Fall ist, besorge 
Dir bitte einen originalen.

Vom Hersteller gelieferte Include-Files zu nehmen, sie dann zu 
modifizieren, aber unter gleichem Namen wieder abzulegen, ist (höflich 
ausgedrückt) extrem böse.  Man lädt sich solche Probleme damit ein, und 
die kommen dann auch mit Freuden.  Die hinzugefügten Kommentare und ihr 
Stil¹ scheinen mir darauf hinzudeuten.

Sollte dieser Fall nicht vorliegen, ist die Ursache zwar unklar, aber 
besorge Dir mal einen m8515def.inc von einem aktuellen AVR Studio. 
Damit läuft es durch (eben probiert).

_______________
¹ 'Multiple exclamation marks,' he went on, shaking his head, 'are a 
sure sign of .... usw.

Autor: Jens K. (jens_k56)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es war zwar eine originale Datei von Atmel, aber eine veraltete. Ich 
habe den Fehler gemacht, die m8515def.h aus dem Ordner 
'...AvrAssembler\Appnotes' statt aus dem Ordner 
'...AvrAssembler2\Appnotes' zu verwenden; dabei handelte es sich um die 
Version 1.0 vom 16.04.2002. Mit der aktuellen Version 2.35 vom 
25.02.2010 funktioniert es jetzt.

Vielen Dank nochmal für Deine Unterstützung!

Jens

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok.  In der nächsten Version wird nochmal im Kommentar betont werden, 
dass es die Version aus AvrAssembler*2* sein muss.  Steht zwar schon da, 
aber Betonung kann nichts schaden.  Vielen Dank für die Rückmeldung.

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal eine kleine Frage: Wenn ich aus meiner uC Anwendung in den 
Bootloader zurückspringen möchte, kann ich das mittels
asm("jmp 0x0000"):
machen?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Compilieren wird eine Zeile à la

LOADER_START=0x1e00

ausgegeben.  Zu dieser (Byte-)Adresse musst Du springen.

Es gibt auch andere Möglichkeiten, die vom AVR-Typ abhängen.  Dazu 
gehört auch der jmp 0.  Er geht mit AVRs ohne 
Bootsection/BOOTRST-Fähigkeit, aber nur bei denen.

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, make hat mir
LOADER_START=0x7e00
ausgegeben.

Wenn ich aber ein
asm("jmp 0x7e00");
ausführe, scheint der bootloader nicht zu starten. Zumindest kann lboot 
kein device finden. Irgendeine Idee wie ich das prüfen könnte?
Eine Bootmeldung oder so gibt der Loader ja nicht aus, oder?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm.  In dem Moment, in dem Du zum Bootloader springst, läuft da das 
PC-Programm bereits?  Der Bootloader prüft nur sehr kurz, ob sein 
Gegenstück läuft (ein paar 100 ms), um den normalen Restart nicht 
nennenswert zu verzögern.

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ich habe das Absetzen des Reset-Commands in das Tool eingebaut.
Würde der Bootloader einfach durchlaufen müsste anschließend ja meine 
Hauptanwendung auch wieder erreichbar sein. Ist sie aber nicht.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur ein Verdacht:  Versuch's mal mit „asm volatile("jmp 0x7e00")“.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt noch eine mögliche Falle:  Verwendest Du den UART in Deinem 
Programm und der Bootloader liegt auf denselben Pins?  Dann musst Du den 
UART-Sender disablen (TXEN weg), denn der Bootloader verwendet Soft-UART 
und kann sonst auf den Pin nicht zugreifen.

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, der UART war das Problem!
Danke! Jetzt funktioniert es wunderbar!

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte da noch mal eine Frage/Anregung:
Wäre es möglich das Starten der Anwendung nach 300ms zu unterbinden, 
wenn ein an den AVR angeschlossener Taster betätigt wird?
Sprich so lange PINX low ist unabhängig vom Timeout im Bootloader 
verweilen.

Die 300ms können nämlich etwas kurz sein, wenn der AVR hinter einem 
USB/seriell Wandler-hängt der beim Reset getrennt werden muss. Sprich 
man muss innerhalb von 300ms feststellen, dass Device ist jetzt da, und 
die Verbindung aufbauen... Das kann evtl knapp sein.

Autor: Jens K. (jens_k56)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Julian,

schau mal in diesen Beitrag, da ist die Frage schonmal aufgekommen:
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644"

Und dann gibt's hier direkt eine Lösung dazu:
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644"

Das sollte eigentlich genau das sein, was du suchst.

Gruß,
Jens

Autor: julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Perfekt, genau das habe ich gesucht! Danke!

Autor: Jens K. (jens_k56)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nutze jetzt seit einiger Zeit den fastboot auf dem ATmega8515 und 
bin begeistert davon. Eben wollte ich ihn für einen AT90S8515 
kompilieren und bekomme trotz der entsprechenden Anpassungen im Makefile 
die folgenden Fehlermeldungen beim Kompilieren:

./converted/abaud.inc: Assembler messages:
./converted/abaud.inc:18: Error: illegal opcode movw for mcu at90s8515
./converted/abaud.inc:20: Error: illegal opcode movw for mcu at90s8515
./converted/abaud.inc:21: Error: illegal opcode movw for mcu at90s8515
./converted/abaud.inc:50: Error: illegal opcode movw for mcu at90s8515
./converted/password.inc:13: Error: illegal opcode lpm for mcu at90s8515
./converted/password.inc:13: Error: postincrement not supported
./converted/command.inc:26: Error: illegal opcode movw for mcu at90s8515
./converted/command.inc:47: Error: illegal opcode movw for mcu at90s8515
./converted/message.inc:17: Error: illegal opcode lpm for mcu at90s8515
./converted/message.inc:23: Error: illegal opcode lpm for mcu at90s8515
./converted/message.inc:23: Error: postincrement not supported
./converted/verify.inc:12: Error: illegal opcode lpm for mcu at90s8515
./converted/verify.inc:12: Error: postincrement not supported
./converted/progtiny.inc:8: Error: illegal opcode movw for mcu at90s8515
./converted/progtiny.inc:49: Error: constant value required
./converted/progtiny.inc:50: Error: illegal opcode spm for mcu at90s8515
./converted/progtiny.inc:62: Error: constant value required
./converted/progtiny.inc:63: Error: illegal opcode spm for mcu at90s8515
./converted/progtiny.inc:75: Error: constant value required
./converted/progtiny.inc:76: Error: illegal opcode spm for mcu at90s8515
./converted/uart.inc:17: Error: illegal opcode movw for mcu at90s8515
./converted/uart.inc:66: Error: illegal opcode lpm for mcu at90s8515
./converted/uart.inc:92: Error: illegal opcode movw for mcu at90s8515
./added/fastload.inc:73: Error: illegal relocation size: 1
./added/fastload.inc:74: Error: illegal relocation size: 1
make: *** [bootload.o] Error 1
Build failed with 1 errors and 0 warnings...

Es sieht ja so aus, als wenn ein falscher Befehlssatz für den Prozessor 
verwendet würde. Habe ich irgendeine Einstellung nicht beachtet, oder 
muss ich den Assembler Code auf den entsprechenden Prozessor anpassen?

Jens

Autor: Hc Zimmerer (mizch) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du ihn in dem Verzeichnis übersetzt, in dem Du zuvor eine andere 
Version erstellt hast?

Falls ja: „make -B“ aufrufen oder das komplette Paket in ein neues 
Verzeichnis auspacken und dort die andere Version erstellen.

Autor: Jens K. (jens_k56)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, zuerst hatte ich den ganzen Ordner mit der ATmega8515-Konfiguration 
kopiert und angepasst. Danach habe ich dann das Paket "fastboot_build29" 
komplett neu ausgepackt und dort die entsprechenden Einstellungen 
vorgenommen, jedoch mit denselben Fehlermeldungen beim Kompilieren. 
"make -B" bringt auch dieselben Fehlermeldungen.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK.  Ich kenne den at90s8515 nicht.  Was mich stutzig macht, ist, dass 
der laut Assembler-Fehlermeldungen die Befehle lpm und spm nicht kennen 
soll.  Vor ich mich tiefer hineinstürze: Liest hier jemand mit, der ihn 
kennt?  Ist das richtig so?  Ist dann ein Bootloader überhaupt möglich?

Autor: Jens K. (jens_k56)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade mal nachgeschaut; der ATmega8515 ist ja der Nachfolger 
des AT90S8515 mit einigen Verbesserungen und Fehlerbehebungen und es 
wird auch nur noch der ATmega8515 verkauft. Da ich nur noch einen 
einzigen AT90S8515 hier liegen habe, wird es das einfachste sein, in 
Zukunft einfach auf den ATmega zu gehen. Da läuft ja der Bootloader auch 
wunderbar.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke auch, dass es sich nicht lohnt, da noch Gehirnschmalz zu 
investieren.  Schließen wir das Thema also mit „AT90S8515 geht nicht“ 
ab.

Autor: eku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hc,

ich versuche mit Version 2.9 von 
Beitrag "Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain" den Bootloader für eien 
Tiny45 zum Laufen zu bekommen. Der Tiny45 spring nicht in den 
Bootloader. Beim Vergleich des generiereten bootload.hex mit dem unter 
Windows generierten fällt auf, dass nicht nur der Hexcode ein anderer 
ist, sondern auch der Opcode FC am Beginn des Flashs fehlt:

:020000020000FC

Soweit ich den Bootvorgang des Tinys verstanden habem funktioniert es 
ohne obigen Opcode nicht.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es fehlt kein Opcode.

Das letzte Byte (Dein „Opcode“ FC) ist immer die Prüfsumme des Records, 
also nie ein Opcode.  Sie trägt zum Inhalt nichts bei.

Der Rest des Records ist vom Typ 2, setzt somit die Segmentadresse, und 
zwar auf 0, was Default ist.  Als Segment-Record erzeugt es ebenfalls 
keinen Opcode.

Die von Dir vermisste Zeile darf also wegfallen, da sie nichts bewirkt 
und von avrasm2 nur automatisch generiert wird.

Solltest Du noch Zweifel haben, frag' mal Google oder die Wikipedia nach 
„Intel Hex“.

Autor: Julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin's mal wieder...
Ich würde die Logik mit der Taste gerne noch etwas erweitern. Wenn die 
Taste mehr als (etwa) 3s gedrückt wurde, soll der Bootloader auch dann 
aktiv bleiben wenn die Taste losgelassen wird. Also so lange bis per 
Befehl die Haupt-Firmware gestartet wird oder das Device resettet wird.
Hat da jemand einen Tipp wie man das realisieren könnte?
Ich hatte gedacht ein zusätzliches Register zu verwenden, auf 10 zu 
initialisieren und per dec bis auf 0 herunterzuzählen. Falls das 
Register 0 ist sollte timeout_btncheck direkt wieder zu abaud springen. 
Aber die Implementierung ist mir bisher nicht geglückt...

Gruß,
Julian

Autor: avion23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich bekomme den one-wire Modus nicht an's Laufen und weiß auch nicht, wo 
das Problem liegt. Two-wire funktioniert.

Hardware: attiny25 8MHz interner RC-Oszillator, brownout 1,8V, 100nF 
Puffer
USB-Seriell-Wandler: pl2303 China Adapter, max232 entfernt, direkter 
0V-3,3V Pegel
Verschaltung:
TX---[ 1kΩ ]---PB4
RX-------------PB4

Software auf dem PC:
bootloader-1.1.tar.gz aus 
http://www.avrfreaks.net/index.php?module=Freaks%2... 
und lboot.tgz aus
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644"

Software auf dem µC:
fastboot_build29.tar.gz  aus 
Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain"

Anstatt zu flashen dreht sich nur der Wartebalken, die PC-Seite kommt 
dort auch nie weiter. Baudraten habe ich alles von 60 - 230400 
ausprobiert. Mit dem Oszi habe ich die Leitungen überprüft, der PC 
sendet fleißig und es ist auch wenig Jitter drauf. Der AVR zieht die 
Leitung anscheinend nie nach unten.

Mir ist nicht klar, wo der Fehler liegt.
Ist die GCC-Implementierung des bootloaders grundsätzlich one-wire 
fähig? Wenn ja, hat sie schon einmal bei jemanden funktioniert?

Ist die linux-software one wire fähig? Ich habe im source code nirgends 
die echo-Abfrage gefunden. Nur in protocol.h folgendes:
 Erkennung 1-Drahtmodus:

Es wird geprüft, ob das 1. Zeichen des Paßworts zurück kommt (Echo).
Das CONNECT wird gesendet auf der Startflanke des 0xFF.

Gibt es eine neuere Version oder habe ich veraltete Software erwischt? 
Im wiki-Artikel habe ich etwas von Version 2.2 gelesen. Der Link ist 
verstümmelt und ich habe die Version nicht gefunden.

Mit dem two-wire Modus funktioniert es einwandfrei, ich bin ganz 
begeistert. Für Vorschläge wo ich suchen kann bin ich dankbar.

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn Du den Max einfach weglässt, und dann direkt verbindest, dürfte der 
One-Wire Modus nicht gehen, weil die Pegel invertiert sind. Deshalb 
antwortet der ATTiny nicht. Evtl. müssten die Pegel im bootloader code 
auch gedreht werden, ich habe das allerdings noch nicht ausprobiert.

Die Linux Version des Bootloaders Du probiert hast kann One-Wire Mode, 
eine neuere Version davon ist 
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644" .

Gruß,
Bernhard

Autor: avion23 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernhard,
danke für deine Antwort.

Ich habe jetzt einen ft232 verwendet der die Pegel schon gedreht hat und 
auch die neuere Software. Der Fehler ist der gleiche. Kannst du mir 
sagen, wo ich den Fehler suchen kann? Ich bin komplett ahnungslos.

Der Zweidrahtmodus funktioniert übrigens immer noch einwandfrei. Auf dem 
Oszi sehe ich, dass die Leitung am Anfang konstant high ist und 
zwischendrin immer wieder kurz auf Masse gezogen wird.

Ich habe mal mein lst file angehängt, vielleicht erkennt jemand dadran 
meinen Fehler.

Autor: avion23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard M. schrieb:
> wenn Du den Max einfach weglässt, und dann direkt verbindest, dürfte der
> One-Wire Modus nicht gehen, weil die Pegel invertiert sind.

Wenn ich den Abschnitt richtig verstanden hätte, wäre mir viel Arbeit 
erspart geblieben. Es funktioniert jetzt!
;-------------------------------------------------------------------------
;                               Macros
;-------------------------------------------------------------------------
#if ONEWIRE
  .macro        IOPortInit
        cbi     STX_PORT, SRX           ; for non-inverted logic
        ;sbi    STX_PORT, SRX           ; weak pullup on
        cbi     STX_DDR, SRX            ; as input
  .endm
  .macro        TXD_0
        sbi     STX_DDR, SRX            ; strong pullup = 0
  .endm
  .macro        TXD_1
        cbi     STX_DDR, SRX            ; weak pullup = 1
  .endm
  .macro        SKIP_RXD_0
        sbic    SRX_PIN, SRX            ; for non-inverted logic
        ;sbis   SRX_PIN, SRX            ; low = 1
  .endm
  .macro        SKIP_RXD_1
        sbis    SRX_PIN, SRX            ; for non-inverted logic
        ;sbic   SRX_PIN, SRX            ; high = 0
  .endm
#else
Das Problem war tatsächlich, dass alle Pegel invertiert waren.

Auf dem Weg dorthin habe ich VirtualBox + WinXP auf einem atom notebook 
installiert, um den windows fboot.exe client testen zu können und ~20 
Stunden mich mit assembler code und wild togglenden leds beschäftigt.

Danke für den super bootloader und die Hilfe:
./bootloader  -d /dev/ttyUSB0 -b 115200 -p solarLamp.hex 

=================================================
|           BOOTLOADER, Target: V2.1            |
|            (Dec 24 2010 20:47:23)             |
=================================================
Program device.
Port          : /dev/ttyUSB0
Baudrate      : 115200
File          : solarLamp.hex
Reading       : solarLamp.hex... File read.
Size          : 1086 Bytes
-------------------------------------------------
Waiting for device... connected (one wire)!
Bootloader    : V2.1
Target        : 1E930A ATmega88
Buffer        : 960 Byte
Size available: 7680 Byte
CRC enabled and OK.
Programming   : 0x00000 - 0x0043D
Writing [################################################################################################] 100%
Elapsed time  : 0.27 seconds, 4019 Bytes/sec.

 ++++++++++ Device successfully programmed! ++++++++++

...starting application

Autor: Juergen G. (jup)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Just in case.

und natuerlich als lobendes feedback fuer die Autoren.

Ich hab mich jetzt auch an den ganz kleinen Attiny's mit dem bootloader 
versucht, aktuell den Attiny13A.

Und, es funktioniert ohne Probleme.

Die Eckdaten:
uC : Attiny13A @ 9.6MHz intern RC-Osc
Fuses for dem desaktivieren des Reset
lfuse: 0x7A
hfuse: 0xEF

fastboot_build29.tar.gz

PC Programm fuer den serial upload : bootloader-1.1

OS:
Ubuntu 10.04 (nur Packete aus den offiziellen Quellen)

gcc version :

avr-gcc -v
Using built-in specs.
Target: avr
Configured with: ../src/configure -v --enable-languages=c,c++ 
--prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man 
--bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib 
--enable-shared --with-system-zlib --enable-long-long --enable-nls 
--without-included-gettext --disable-checking --disable-libssp 
--build=i486-linux-gnu --host=i486-linux-gnu --target=avr
Thread model: single
gcc version 4.3.4 (GCC)


Hier nochmal ein dickes Danke an die Autoren.

Ju

Autor: robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab da eine ähnliche Frage:
Meine Schaltung hat aus anderen Gründen einen Halbduplex-Eindraht-"Bus", 
der (wegen der höheren Spannungen) über einen Pegelwandler aus 
Transistoren angesteuert wird.
Sieht für den Controller aus wie "normales" 2-Wire, nur dass alles 
gesendete gleichzeitig auch wieder zurückkommt (und natürlich nur 
Halbduplexbetrieb mögich ist). Andere Busteilnehmer sind für den 
Bootloader nicht relevant, weil dann nicht vorhanden.

Nun ergibt sich folgendes Problem, dass der Bootloader (auf 2-Wire Mode 
konfiguriert) damit nicht zurechtkommt.

Testweise mal die Schaltung umgebastelt, so dass der Controller direkt 
mit dem PC verbunden ist, klappt es natürlich (also prinzipiell nichts 
defekt).

Bekommt der PC ein Echo, der Controller aber nicht, meint das Programm 
im 1-Wire Modus zu arbeiten, was dann auch problemlos funktioniert.
Den PC stört das Echo also nicht, und 1-wire->2-wire verträgt sich in 
die Richtung.

Sobald der Controller aber ein Echo bekommt funktioniert nix mehr, die 
PC-Software scheitert an der Erkennung, egal was PC-seitig los ist mit 
der Schnittstelle.

Gibts da eine Lösung?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal, in added/fastload.h an der Stelle
#if SRX == STX && SRX_PORT == STX_PORT
#define  ONEWIRE 3
#else
#define  ONEWIRE 0
#endif
die Zeile
#define  ONEWIRE 3  //Force onewire protocol
drunter zu setzen.  Das setzt den Vergleich darüber außer Kraft und 
erzwingt One-Wire-mode für die Software; Sende- und Empfangspins bleiben 
dennoch verschieden.

Einen Versuch ist es wert, Funktionsgarantie kann ich keine geben.

Autor: robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mittlerweile habe ich einen ziemlich ekelhaften Hack zusammengebaut, der 
aber zu funktionieren scheint. Elegant sind die fest definierten Pins 
natürlich nicht. Dazu stellt man in der Makefile irgendwas für RX und TX 
ein, nur eben das gleiche...

Mal so als feature request: Das ganze in "sauber" und zusätzlich 
aktivierbarer Sende/Empfangsumschaltung auf einem dritten Pin hätte 
durchaus nennenswertes Anwendungsgebiet, z.b. für Halbduplex RS485...
Wenn man die Polarität jedes einzelnen Pins noch "sauber" definieren 
könnte wäre das dann optimalst.
#if ONEWIRE

  .macro  IOPortInit
  cbi  PORTD, PD0    ; PU disable
  cbi  DDRD, PD0    ; RX as input

  sbi  PORTD, PD1    ; TX high
  sbi  DDRD, PD1    ; TX as output
  .endm
  .macro  TXD_0
  cbi  PORTD, PD1    ; TX low = 0
  .endm
  .macro  TXD_1
  sbi  PORTD, PD1    ; TX high = 1 
  .endm
  .macro  SKIP_RXD_0
  sbic  PIND, PD0    ; RX high = 1
  .endm
  .macro  SKIP_RXD_1
  sbis  PIND, PD0    ; RX low = 0
  .endm
#else

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Eins vorab , dies ist mein erster versuch mit winavr und avr studio, 
erbarmen ;-), bin Anfänger und programmier bis dato in bascom

- Also im Makefile habe ich alles bis "End user presets" eingestellt
und auch probehalber die Einstellung DEBUG = dwarf-2 eingestellt

- die m16def.ic reinkopiert

- Hab noch das File (get_avr_arch.sh ) mit dieser  : 
Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain" ersetzt

- dann im Avr Studio auf build gedrückt.

?Muß ich noch irgendwo was einstellen, damits richtig kompiliert wird ?

get_avr_arch.sh


Build started 14.2.2011 at 23:20:48
Makefile:120: atmel_def.mak: No such file or directory
./_conv.awk m16def.inc | gawk 
'/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega16 -DF_CPU=16000000  -I 
. -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gdwarf-2 -L,-gdwarf-2 -DRAM_START=0x0060 -DSRAM_SIZE=1024 
-DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 ad
ded/bootload.S -o bootload.o

avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega16 -DF_CPU=16000000  -I . -I 
./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gdwarf-2 -L,-gdwarf-2 -DRAM_START=0x0060 -DSRAM_SIZE=1024 
-DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/
stub.S -o stub.o

vars="$(./get_bootsection_addrs.sh 0x1fff 0x1f80 0x1f00 0x1e00 )"; \
    arch="$(./get_avr_arch.sh -mmcu=atmega16 bootload.o)"; \
    echo "arch=$arch";\
    echo "$vars"; \
    eval "$vars"; \
    sed -e "s/@LOADER_START@/$LOADER_START/g" \
        -e s"/@ARCH@/$arch/" \
        -e s'/@RAM_START@/0x0060/g' \
        -e s'/@RAM_SIZE@/1024/g' \
        -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
        bootload.template.x > bootload.x; \
    avr-ld -N -E -T bootload.x -Map=bootload.map \
      --cref bootload.o stub.o -o bootload.elf --defsym Application=0
*** Note: set BOOTSZ fuses to the word address 0x1f00 ***
arch=avr5
LOADER_START=0x3e00
STUB_OFFSET=0x1fe
avr-objcopy -O ihex bootload.elf bootload.hex
Build failed with 1 errors and 0 warnings...

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier noch die generierte atmel_def.h


#define  SIGNATURE_000 0x1e
#define  SIGNATURE_001 0x94
#define  SIGNATURE_002 0x03
; ***** BOOT_LOAD ********************
#define  BOOTRST 0  // Select Reset Vector
#define  BOOTSZ0 1  // Select Boot Size
#define  BOOTSZ1 2  // Select Boot Size
#define  FLASHEND 0x1fff  // Note: Word address
#define  SRAM_START 0x0060
#define  SRAM_SIZE 1024
; ***** BOOTLOADER DECLARATIONS 
******************************************
#define  PAGESIZE 64
#define  FIRSTBOOTSTART 0x1f80
#define  SECONDBOOTSTART 0x1f00
#define  THIRDBOOTSTART 0x1e00
#define  FOURTHBOOTSTART 0x1c00
#define  SMALLBOOTSTART FIRSTBOOTSTART
#define  LARGEBOOTSTART FOURTHBOOTSTART

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry ganz vergessen

ich verwende die version 29  von fastboot
Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain"

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm ?
ich glaub die Antwort weiter oben ~100 Posts gefunden zu haben, beim 
ersten mal ist das normal weil sie erst erstellt wird??

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine frage hätte ich da noch , kann ich bascom kompilierte hex dateien 
auf einen Atmega mit FASTBOOT29 Bootloader, uploaden ?
wann nicht dann is eh schon wieder ende :-(

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo klaus,

warum denn nicht, wenn der Code noch in den AVR passt ?

Du könntest auch eine ASM Datei übersetzen und dann auf einen AVR laden.

Ich verwende jetzt nur noch den Bootloader, entweder im 2-wire mode mit 
FT232RL oder im 1-wire mode mit Adapterkabel auf einen Eigenbau 
USB-RS232 Wandler.

AVR sind atTiny85, atMega32, atMega48, atMega88 und atMega8.

Funktioniert wunderbar..

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohoh ; es geeeeht :-)

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Uwe

Danke übrigens für die Antwort

ja es hat bei mir jetzt auch geklappt, hab ja erst heut nachmittag mitm 
einlesen hier angefangen

es funktioniert jetzt zwar aber n paar dinge muss ich schon noch klären


 wie z.B heisst das passwort immer noch peda oder gibts das überhaupt 
noch
hab hald grad mal schnell windows software zum überspielen von meinem 
programm benutzt und da is alles voreingestellt auch das passwort , also 
jetzt gleich mal das testen :-)

Danke , leider ist mein Grundverständnis in sachen hex, ihex , assembler 
nicht so gut
Ich hoffe aber noch :-)

gruß Klaus

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Peda gibts noch

Zum Thema software uart

derzeit hab ich ja die original ports im makefile eingstellt lassen aber 
daß is ja meine hardware uart, die benutz ich ja auch anderweitig

Aberr daß kommt sich ja nicht ins gehege da ja mein eigenes  Programm 
zur Laufzeit vom Bootloader  ... uploaden gar nicht läuft

Die SW Uart ist aber schon ne richtige , oder?
man kann also 2 xbeliebige Ports als uart verwenden ?

das werde ich zwar nicht machen aber würde das funktionieren?

das genialste finde ich die 1wire lösung , die werde ich morgen antesten 
:-)


herzlichste grueße an alle die sich an diesem Bootloader beteiligt haben
Danke

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da ich bei mir die sache im auto verbaue hab ich einen Ausstand den es 
noch reinzuholen hilt

Wireless RS232

Habe mich schon bei den Zigbit Sachen eingelesen , scheint mir am 
sinnvollsten aber noch ist der Groschen nicht gefallen , vielleicht 
kennt ja jemand noch links ?

grüße

Ps.: Gute Nacht ... und ab in die Heia

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh gott die flasherei ufert etzad aus :-(
so gut geht das jetzt , strom aus , ein ... fertig
morgen brauch ich warsch. einen neuen atmega ;-)

Autor: Juan Pablo C. (juanpablo_c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hello! I'm trying your bootloader but i'm in trouble...
The bootloader does not compile.
I'm using the fastboot_build29.tar.gz file just that

This is the makes's output:

Makefile:120: atmel_def.mak: No such file or directory
./_conv.awk m8def.inc | gawk '/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' 
> atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega8 -DF_CPU=8000000  -I . 
-I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gstabs+ -L,-gstabs+ -DRAM_START= -DSRAM_SIZE= -DSTX_PORT=PORTD 
-DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S -o bootload.o
In file included from ./added/fastload.inc:22:0,
                 from ./converted/bootload.asm:57,
                 from added/bootload.S:47:
./added/fastload.h:109:0: warning: "BOOTSTART" redefined
./atmel_def.h:6:0: note: this is the location of the previous definition
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega8 -DF_CPU=8000000  -I . -I 
./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ 
-L,-gstabs+ -DRAM_START= -DSRAM_SIZE= -DSTX_PORT=PORTD -DSTX=PD1 
-DSRX_PORT=PORTD -DSRX=PD0 added/stub.S -o stub.o
vars="$(./get_text_addrs.sh 0xFFF)"; \
        arch="$(./get_avr_arch.sh -mmcu=atmega8 bootload.o)"; \
        echo "arch=$arch";\
        echo "$vars"; \
        eval "$vars"; \
        sed -e "s/@LOADER_START@/$LOADER_START/g" \
            -e s"/@ARCH@/$arch/" \
            -e s'/@RAM_START@//g' \
            -e s'/@RAM_SIZE@//g' \
            -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
            bootload.template.x > bootload.x; \
        avr-ld -N -E -T bootload.x -Map=bootload.map \
          --cref bootload.o stub.o -o bootload.elf --defsym 
Application="$LOADER_START-2"
*** Last available byte address for the user program: 0x1dfd
get_avr_arch.sh: Could not find an architecture in avr-gcc's internal ld 
command line
arch=
LOADER_START=0x1e00
STUB_OFFSET=0x1fe
avr-ld:bootload.x:18: syntax error
make: *** [bootload.elf] Error 1

I'll be waiting for your response...

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Looks like you're using an avr-gcc version which is not (yet) known to 
the script.  Which version of avr-gcc are you using?  Please provide the 
output of
avr-gcc --version
and (maybe) a few words about where you got it from.  Thanks.

Autor: Juan Pablo C. (juanpablo_c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hello!
I'm using
avr-gcc (GCC) 4.5.2
from comunity repo of archlinux...

Thanks!

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Could you please replace your current get_avr_arch.sh in the 
bootloader's directory with the one attached to this article, then run 
'make -B' and post the results (important is the part from 'arch=' until 
'End of test.  Exiting now')?

It may take some time (depending on what I can see from the result, one 
day or so) until I come back as I am quite busy right now, however.

Autor: Juan Pablo C. (juanpablo_c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I think it's running successfully with the atmega324a, with the atmega8 
still doesn't compile...

here is the output from ATMEGA324A:
arch=1: '"/usr/lib/gcc/avr/4.5.2/collect2"'
2: '"-m"'
3: '"avr5"'
4: '"-Tdata"'
5: '"0x800100"'
6: '"-o"'
7: '";#magic1295671ghkl-."'
8: '"crtm324a.o"'
9: '"-L/usr/lib/gcc/avr/4.5.2/avr5"'
10: '"-L/usr/lib/gcc/avr/4.5.2/../../../../avr/lib/avr5"'
11: '"-L/usr/lib/gcc/avr/4.5.2"'
12: '"-L/usr/lib/gcc/avr/4.5.2/../../../../avr/lib"'
13: '"bootload.o"'
14: '"-lgcc"'
15: '"-lc"'
16: '"-lgcc"'
End of test. Exiting now.
LOADER_START=0x7e00
STUB_OFFSET=0x1fe
sed: -e expression #2, char 16: unknown option to `s'
avr-objcopy -O ihex bootload.elf bootload.hex

And with ATMEGA8:
arch=1: '"/usr/lib/gcc/avr/4.5.2/collect2"'
2: '"-m"'
3: '"avr4"'
4: '"-o"'
5: '";#magic1295671ghkl-."'
6: '"/usr/lib/gcc/avr/4.5.2/../../../../avr/lib/avr4/crtm8.o"'
7: '"-L/usr/lib/gcc/avr/4.5.2/avr4"'
8: '"-L/usr/lib/gcc/avr/4.5.2/../../../../avr/lib/avr4"'
9: '"-L/usr/lib/gcc/avr/4.5.2"'
10: '"-L/usr/lib/gcc/avr/4.5.2/../../../../avr/lib"'
11: '"bootload.o"'
12: '"-lgcc"'
13: '"-lc"'
14: '"-lgcc"'
End of test. Exiting now.
LOADER_START=0x1e00
STUB_OFFSET=0x1fe
sed: -e expression #2, char 16: unknown option to `s'
bootload.o: In function `Messages':
(.text+0x1d9): undefined reference to `SIGNATURE_000'
bootload.o: In function `Messages':
(.text+0x1da): undefined reference to `SIGNATURE_001'
bootload.o: In function `Messages':
(.text+0x1db): undefined reference to `SIGNATURE_002'
make: *** [bootload.elf] Error 1

Thanks != cisterns...

Autor: Hc Zimmerer (mizch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Things are getting more unclear to me instead of more clear.  Could you 
please do the same again with the attached get_avr_arch.sh?

Autor: Juan Pablo C. (juanpablo_c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK.

This is with ATMEGA324A

1: '"/usr/lib/gcc/avr/4.5.2/collect2"' '"-m"'
2: '"-m"' '"avr5"'
Match found.
arch=avr5
LOADER_START=0x7e00
STUB_OFFSET=0x1fe
avr-objcopy -O ihex bootload.elf bootload.hex
-----
And this with ATMEGA8

1: '"/usr/lib/gcc/avr/4.5.2/collect2"' '"-m"'
2: '"-m"' '"avr4"'
Match found.
arch=avr4
LOADER_START=0x1e00
STUB_OFFSET=0x1fe
avr-ld:bootload.x:22: syntax error
make: *** [bootload.elf] Error 1

-----

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. Please try the get_avr_addr.sh from this link: 
[[Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain"]]
If you still get an error in bootload.x, please attach it to your next 
posting.

Autor: Juan Pablo C. (juanpablo_c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Still doesn't compile with atmega8...
---
arch=avr4
LOADER_START=0x1e00
STUB_OFFSET=0x1fe
avr-ld:bootload.x:22: syntax error
make: *** [bootload.elf] Error 1
---
here is the bootload.x:
/*

        bootload.template.x and bootload.x

         Time-stamp: <2010-01-14 21:22:26 hcz>

        Linker script for Peter Dannegger's bootloader.  Always make
        sure you edit bootload.template.x.  Any changes made to
        bootload.x will be overwritten during the next make.

        Symbols enclosed in @ will be replaced when bootload.x is
        generated (see sed part in Makefile).

*/


OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
OUTPUT_ARCH(avr4)
MEMORY
{
  text      (rx)   : ORIGIN = 0x1e00, LENGTH = 0x1fe + 2
  bss       (rw!x) : ORIGIN = 0x8000000 + , LENGTH =
}


/* PHDRS { stub PT_LOAD ; } */
SECTIONS
{
  .bss : { *(.bss) } > bss
  . = 0x1e00 ;
  .text : {
    bootload.o(.text)
    /* place a jump to api_call at the very end: */
    . = 0x1fe ;
    stub.o(.text)
  }

 /* Stabs and DWARF debugging sections, taken from 'avr-ld --verbose' 
*/
  .stab 0 : { *(.stab) }
  .stabstr 0 : { *(.stabstr) }
  .stab.excl 0 : { *(.stab.excl) }
  .stab.exclstr 0 : { *(.stab.exclstr) }
  .stab.index 0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment 0 : { *(.comment) }
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to the 
beginning
     of the section so we begin them at 0.  */
  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }
}


thanks

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
There is a second problem, which is not related to get_avr_arch.sh. 
Let's continue tomorrow, around evening.

Autor: avion23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Juan,
i'm using gentoo with crossdev and gcc-4.5.2. Everything still works 
fine here. I suspect there is something wrong with your installation.

The output of avr-gcc --version:
avr-gcc (Gentoo 4.5.2 p1.1, pie-0.4.5) 4.5.2

And here is the output when i compile the projekt with make:
Makefile:125: atmel_def.mak: No such file or directory
./_conv.awk m8def.inc | gawk '/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega8 -DF_CPU=8000000  -I . -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ -L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=1024 -DSTX_PORT=PORTB -DSTX=PB2 -DSRX_PORT=PORTB -DSRX=PB2 added/bootload.S -o bootload.o
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega8 -DF_CPU=8000000  -I . -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ -L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=1024 -DSTX_PORT=PORTB -DSTX=PB2 -DSRX_PORT=PORTB -DSRX=PB2 added/stub.S -o stub.o
vars="$(./get_bootsection_addrs.sh 0x0fff 0xf80 0xf00 0xe00 )"; \
        arch="$(./get_avr_arch.sh -mmcu=atmega8 bootload.o)"; \
        echo "arch=$arch";\
        echo "$vars"; \
        eval "$vars"; \
        sed -e "s/@LOADER_START@/$LOADER_START/g" \
            -e s"/@ARCH@/$arch/" \
            -e s'/@RAM_START@/0x0060/g' \
            -e s'/@RAM_SIZE@/1024/g' \
            -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
            bootload.template.x > bootload.x; \
        avr-ld -N -E -T bootload.x -Map=bootload.map \
          --cref bootload.o stub.o -o bootload.elf --defsym Application=0
*** Note: set BOOTSZ fuses to the word address 0xf00 ***
arch=avr4
LOADER_START=0x1e00
STUB_OFFSET=0x1fe
avr-objcopy -O ihex bootload.elf bootload.hex


Just open the makefile and execute the commands by hand. Try to get to 
the part where it fails. Then fix it and / or report. Good luck :)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suspect files are the defs file from Atmel (m8def.inc) and 
atmel-defs.{h,mak}, if you want to investigate for yourself further. 
More tomorrow.

Autor: Juan Pablo C. (juanpablo_c)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Here is the m8def.inc i'd use...

The atmel_def.mak says

FLASHEND = 0xFFF
SMALLBOOTSTART = 0b00111110000000
SECONDBOOTSTART = 0b00111100000000
THIRDBOOTSTART = 0b00111000000000
LARGEBOOTSTART = 0b00110000000000
BOOTSTART = THIRDBOOTSTART
PAGESIZE = 32

I suspect that something is missing in the .def file but I do not know 
what...

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
From the Makefile:
# Name of the Atmel defs file for the actual MCU.
[...]
# Be sure to use AVR Tools\AvrAssembler2\, not  AVR Tools\AvrAssembler\.
Your m8def.inc is the one from AVR Tools\AvrAssembler\.

Autor: Juan Pablo C. (juanpablo_c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thanks!

With Atmega8 now
arch=avr4
LOADER_START=0x1e00
STUB_OFFSET=0x1fe
avr-objcopy -O ihex bootload.elf bootload.hex

and Atmega324A:

arch=avr5
LOADER_START=0x7e00
STUB_OFFSET=0x1fe
avr-objcopy -O ihex bootload.elf bootload.hex

It's a great bootloader!

Autor: Chris L. (kingkernel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat schonmal jemand den Bootloader unter AVR Studio 5 compilieren 
können?

Ich hab gesehen, dass der mega128 unterstützt wird. wird es auch eine 
version für den mega1284 geben?

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat das Ganze eigentlich schon jemand auf dem Mega48 hinbekommen?
Bei mir will das jedenfalls nicht. mega88 geht, kein Problem.
Beim m48 allerdings:
stub.o: In function `stub':
(.text+0x0): undefined reference to `api_call'
make: *** [bootload.elf] Error 1

Kommentiere ich das entsprechende in der stub.S aus, läuft das durch 
ohne Fehler, der Bootloader auch, nur startet das Userprogramm natürlich 
nie.

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Problem, wenn

die passenden ASM Datei für den atmega48.inc da ist und
vorher "make clean" aufgerufen wird.

Die Anpassungen in der Datei makefile setzte ich vorraus !

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe S. schrieb:
> und
> vorher "make clean" aufgerufen wird.

Argh, danke!
Da denkt man als IDE-verwöhnter User natürlich nicht dran, dass man das 
ggf. tun sollte...

Autor: Neutrino (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe diese Version von get_avr_arch.sh 
http://www.mikrocontroller.net/attachment/103485/g... und für 
mein Atmega16 diese Datei 
http://www.mikrocontroller.net/attachment/29668/m16def.inc in das 
Verzeichnis des bootloaders runtergeladen. Das kompilieren funktioniert 
nicht und die Ausgabe ist die selbe (außer -mmcu=atmega16) wie avion23 
hier gepostet hat:
Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain"
Ich weiß nicht weiter, kann mir jemand helfen, das avr_arch script 
versteh ich nicht.

Ich benutze archlinux und avr-ld Version 2.21.1 und gcc version 4.6.1

oder hat mir jemand ein fertiges hexfile für den atmega16?

Autor: Adi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
 ich würde gerne diesen Bootloader einsetzten, hab hier auch schon 
einiges gelesen, hab aber mittlerweile die Übersicht verloren. zuviel 
verschiedene Versionen, platformen, whatever ...

 Welches ist die aktuelle (stabile) Version) und wo ist sie?



Mein Ziel im moment, den Bootloader in ein Mega16, dann mega8x, später 
auch tiny, .. aber erst mal der 16.
 Ich nutze XP habe AVRstudio, mit dem ich den bootloader dann auch gerne 
erzeugen können möchte. Für C das DEV-C
 Als Programm auf PC seite, ist ein DOS program das in der XP dosbox 
läuft ok.
 Anschluß läuft über USB/V24 kabel dann max auf µ seite.(später möchte 
ich auch die 1 wire ohne max probieren)

 der Downloadlink von 
(http://www.mikrocontroller.net/articles/AVR_Bootlo...)
 Version 2.1 des Bootloaders incl. DOS Host-Software (Forumsbeitrag):
 führt zu irgendwinem log, aber nicht zum dowbload von etwas 
brauchbarem.

Version 2.1 des Bootloaders für AVR-GCC-Toolchain (Forumsbeitrag):
  führt  zu  fastboot_build29.tar.gz hat das irgendwas mit V2.1 zu tun 
klingt irgendwie nach linux ne version 0.0.29 ... also nichts was man 
braucht. (Leute vergebt doch mal brauchbare Namen)

 die letzte version die ich gefunden hab ist fboot18.zip

Wenigstens in dem Artikel sollte doch unter downloads der erste Eintrag 
zu dem richtigen aktuellen Download führen.

Autor: Uwe S. (de0508)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Adi,

ich hänge Dir meine Quelle aus diesem Thread an und empfehle diese 
direkt zu übersetzen, da das Makefile einige Konfigurationsparameter 
enthält, die man für seinen Ziel µP. anpassen MUSS.

Weitere Makefiles sind dort enthalten, die schon Anpassungen an meine 
Hardware enthalten.

Viel Erfolg und bitte lese den Thread..

Autor: Marten83 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich versuche gerade auch den Bootloader ans laufen zu bekommen.
Leider bekommt die fboot.exe keine Verbindung zustande.
Deswegen hier zuerst mein Aufbau und dann Fragen:

ATMega88 mit internen 8Mhz an FTDI Wandler (USART - USB); BS WinXP SP3.
Ich habe den Code aus dem letzten Beutrag hier verwendet und die 
fboot.exe aus Version 1.7 (habe ich sonst nirgens gefunden). Nun stellt 
sich folgende Frage: Ich habe den Bootsector size mal mit 512 und mit 
1024 Wörtern probiert, funktioniert aber nicht (natürlich den entsp. 
Vector aktiviert). Ich hatte dann noch beim start des fboot eine 
Fehlermeldung von Windows, dass ein virtueller Treiber nicht 
initialisiert werden konnte. Habe das versucht zu ignorieren 
(RNBOVDD.dll) und entsprechend gibt es keine Kommunikation.
Hat jemand einen Tipp für mich?

Vielen Dank!

Gruß,

Marten83

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

hast du dir das makefile für den mega88 angepasst?
wie sehen deine fusebits aus?

welche ausgaben liefert der Make-Durchlauf? - Fehlermeldungen.

Autor: Marten83 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
 sorry, dass ich so spät wieder antworte.
Die Makefile habe ich nur auf 8Mhz editiert und ein "-" vor das "include 
atmel_def.mak", da er ansonsten gemeckert hat.
Die Fusebits: low 0xE2; high 0xdf; extended 0xfe; lock 0x3f.
Ausserdem habe ich das den FTDI auf Com2 geändert.
Gibt es vielleicht probleme, weil ich bei 8Mhz und 115.2k einen Error 
von 8,5% habe?

MfG, Marten83

Autor: Marten83 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

so, habe den Fehler gefunden. Eine Leiterbahn auf meiner Platine 
(natürlich für den USART, wie könnte es anders sein) hatte einen 
Haarriss. Deswegen ist keine Verbindung zustande gekommen.

Aber nochmals zur Sicherheit: Die "section size" habe ich nun auf 256 
Wörter gesetzt. Beim kompilieren kommt aber ein Hinweis: *** Note: set 
BOOTSZ fuses to the word address 0xf00 ***.
Das wären in diesem Fall 1024 Wörter. Mit 256 hats geklappt, deswegen 
gehe ich davon aus, dass das richtig war?

MfG, Marten83

Beitrag #2404825 wurde vom Autor gelöscht.
Autor: Micky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe heute leider erfolglos versucht den bootloader in Betrieb zu 
nehmen.

AVR Studio 4 gibt folgende Fehlermeldung aus:

Build started 11.12.2011 at 20:12:46
Makefile:120: atmel_def.mak: No such file or directory
./_conv.awk m32def.inc | gawk 
'/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
Der Befehl "." ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
make: *** [atmel_def.h] Fehler 255
Build failed with 1 errors and 0 warnings...

Ich verstehe nicht, warum der Befehl "." nicht ausgeführt wird. Kann mir 
jemand bitte helfen?

Danke :-)

Micky

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Du mußt mit das Programm 'make' und das Makefile direkt verwenden !

Autor: Micky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich in der DOS-Konsole make eingebe, erhalte ich den gleichen 
Fehler.

ich verwende: GNU Make 3.81

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micky schrieb:
> Der Befehl "." ist entweder falsch geschrieben oder
> konnte nicht gefunden werden.

Das ist eine Fehlermeldung von cmd.exe. Es wird also die falsche Shell 
aufgerufen/ausgeführt.

Autor: Micky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

ich verstehe deinen Hinweis mit der "falschen Shell" nicht. Liegt es an 
meinem Betriebssystem?

Andere Projekte kann ich problemlos kompilieren. Ich nutze dann aber das 
makefile von AVR Studio. AVR Studio 5 habe ich ebenfalls installiert, 
kann es daran liegen?

Autor: Nils S. (kruemeltee) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Ernst schrieb:
> Micky schrieb:
>> Der Befehl "." ist entweder falsch geschrieben oder
>> konnte nicht gefunden werden.
>
> Das ist eine Fehlermeldung von cmd.exe. Es wird also die falsche Shell
> aufgerufen/ausgeführt.

"." ist der aktuelle Ordner in dem man sich befindet. Würde sagen, da 
fehlt der Befehl/Programm in dem Ordner, der direkt nach dem Punk mit 
Ordnertrennzeichen angegeben werden muss.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nils S. schrieb:
> "." ist der aktuelle Ordner in dem man sich befindet. Würde sagen, da
> fehlt der Befehl/Programm in dem Ordner, der direkt nach dem Punk mit
> Ordnertrennzeichen angegeben werden muss.

Nee, für cmd.exe ist der Schrägstrich danach kein Pfad-Trenner, also 
sieht es den Punkt alleine als auszuführendes Kommando. Die 
Kommandozeile muss mit einer Unix-artigen Shell ausgeführt werden.

Autor: Micky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe. Die Datei _conv.awk ist aber da. Könnte es aber auch an den 
Übergabeparametern liegen? Wenn einer Falsch oder garnicht definiert 
ist?

Ich muß für heute leider schluß machen. Ich melde mich morgen wieder 
:-). Danke für die bisherige Hilfe!

Autor: Micky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

bezgl. deiner Unix-Shell. In der Anleitung zu dem Bootloader wird dies 
nicht erwähnt. Eigentlich soll make damit zurechtkommen oder?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micky schrieb:
> Eigentlich soll make damit zurechtkommen oder?

Make führt die Kommandos aber nicht selber aus. Es übergibt einfach die 
komplette Kommandozeile an eine Shell, und in deinem Fall an die 
falsche. Warum kann ich dir so aus dem Stegreif nicht sagen.

Autor: Nils S. (kruemeltee) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenns wirklich an der fehlenden Shell liegt, wäre cygwin wahrscheinlich 
eine Lösung.

Du kannst aber auch den Ordner Zippen, hier im Forum als Anhang 
hochladen und einer der Linux-User wird für dich schnell make tippen.
Ich hätte avr-gcc 4.3.4.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nils S. schrieb:
> Wenns wirklich an der fehlenden Shell liegt, wäre cygwin wahrscheinlich
> eine Lösung.

Dass sie fehlt ist gar nicht mal gesagt. Sie wird nur einfach nicht 
benutzt. Vielleicht ist z.B. eine Umgebungsvariable SHELL auf cmd.exe 
gesetzt, oder ähnliches. Ich kann so aus dem Stegreif nicht sagen, nach 
welchen Kriterien Make genau ermittelt, welche Shell aufzurufen ist und 
in das Makefile selber kann ich im Augenblick auch nicht rein schauen.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier die Make-Doku zu dem Thema:
http://www.gnu.org/s/hello/manual/make/Choosing-th...
Geh das doch bitte mal selber durch.
Insbesondere natürlich den Teil unter
> Choosing a Shell in DOS and Windows

Autor: Micky (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

anbei der gezippte Ordner. Danke für den Hinweis bezgl. Cygwin. Dies 
schaue ich mir morgen an. Heute geht es bei mir leider nicht mehr.

Autor: Micky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hier die Make-Doku zu dem Thema:
>http://www.gnu.org/s/hello/manual/make/Choosing-th...
>Geh das doch bitte mal selber durch.
>Insbesondere natürlich den Teil unter

Danke für den Link! Ich schaue ihn mir morgen an!

Autor: Micky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Ernst schrieb:
> Hier die Make-Doku zu dem Thema:
> http://www.gnu.org/s/hello/manual/make/Choosing-th...
> Geh das doch bitte mal selber durch.
> Insbesondere natürlich den Teil unter
>> Choosing a Shell in DOS and Windows

Danke Stefan! Daran lag es.

Autor: Anon Ymous (avion23)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
seit gcc-4.6 (unsicher) und gcc-4.7 kann ich den bootloader nicht mehr 
verwenden. Eine gefixte get_avr_arch.sh ist angehängt.

Ein
./get_avr_arch.sh -x -mmcu=attiny85 bootload.o
 liefert bei mir immer
 get_avr_arch.sh: Could not find an architecture in avr-gcc's internal ld command line 
 Um heraus zu finden, was da nicht funktioniert habe ich mir die 
Ausgaben von avr-gcc in den verschiedenen Versionen angesehen:
 "/usr/libexec/gcc/avr/4.5.2/collect2" "-m" "avr25" "-o" ";#magic1295671ghkl-."
"/usr/lib/gcc/avr/4.5.2/../../../../avr/lib/crttn85.o"
"-L/usr/lib/gcc/avr/4.5.2" 
"-L/usr/lib/gcc/avr/4.5.2/../../../../avr/lib"
"bootload.o" "-lgcc" "-lc" "-lgcc"

 /usr/libexec/gcc/avr/4.7.0/collect2 -m avr25 -o ";#magic1295671ghkl-."
/usr/lib/gcc/avr/4.7.0/../../../../avr/lib/crttn85.o 
-L/usr/lib/gcc/avr/4.7.0
-L/usr/lib/gcc/avr/4.7.0/../../../../avr/lib 
bootload.o -lgcc -lc -lgcc

Wie man sehen kann sind die \" der große Unterschied. Das skript habe 
ich "gefixt" in dem ich es hart auf neue gcc-Versionen umgebaut habe. 
Auf eine Versionsunterscheidung habe ich nach dieser Shell-Orgie keine 
Lust mehr; wer will kann es gerne einbauen. Hier noch das diff. Viel 
Spaß damit:
--- get_avr_arch.sh.backup      2012-05-28 11:40:35.851776973 +0200
+++ get_avr_arch.sh     2012-05-28 12:57:39.953442806 +0200
@@ -39,9 +39,12 @@
 magic=";#magic1295671ghkl-."
 # call gcc, asking it for the command line which it would use for
 # linking:
-set -- $(avr-gcc -m"$mcu" -### "$1" -o "$magic" 2>&1 \
-         | gawk '/^avr-gcc:/||/"-m".*'"$magic"'.*"-lgcc"/')
-
+# old command for <= gcc-4.5*
+#set -- $(avr-gcc -m$mcu -### "$1" -o "$magic" 2>&1 \
+#         | gawk '/^avr-gcc:/||/"-m".*'"$magic"'.*"-lgcc"/')
+# new command for > gcc-4.5*    
+set -- $(avr-gcc -m$mcu -### "$1" -o "$magic" 2>&1 \
+         | gawk '/^avr-gcc:/||/-m .*'"$magic"'.*-lgcc/')
 if [ "$1" = "avr-gcc:" ]; then
     # we have an error message from gcc:
     echo "$*"
@@ -51,7 +54,10 @@
 # retrieve architecture argument from gcc's commandline (the argument
 # which follows '"-m"'):
 while [ -n "$2" ]; do
-    if [ "$1" = '"-m"' ]; then
+# old command for <= gcc-4.5*
+#    if [ "$1" = '"-m"' ]; then
+# new command for > gcc-4.5*    
+    if [ "$1" = '-m' ]; then
        eval echo $2            # eval: remove quotes
        exit 0
     fi
@@ -59,4 +65,4 @@
 done
 echo >&2 "\
 $pname: Could not find an architecture in avr-gcc's internal ld command line"
-exit 1
\ No newline at end of file
+exit 1


Autor: Anon Ymous (avion23)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Murphy fordert seinen Tribut: In der obigen Datei ist eine 
auskommentierte Zeile vom Debuggen übrig geblieben. Die habe ich jetzt 
gelöscht.

Autor: pedro f. (healthhazard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe ein Problem mit dem Bootloader Build 29 auf einem atmega48.

Ich benötige den Resetpin als IO und möchte deswegen einen Bootloader 
verwenden.

Bootloader ist geflasht. Noch habe ich den Reset nicht deaktiviert, also 
kann ich nach jedem Reset mein Programm hochladen (auch mehrmals). Wenn 
ich jetzt die Stromversorgung trenne, kann ich nach dem Wiederverbinden 
mein Programm nicht wieder hochladen - auch nach einem Reset nicht. Wenn 
ich jetzt den Bootloader nochmal neu flashe geht das Ganze wieder.
Ab und zu geht auch nach Strom aus-an ein Hochladen, aber eben sehr 
selten und nicht reproduzierbar.
Woran könnte es liegen?
Wenn es nach einem Reset durch drücken eines Reset-Buttons geht, kann ja 
auch mein Programm den Bootloader nicht überschreiben und wenn er nicht 
überschrieben ist, müsste er doch nach Aktivierung der Stromversorgung 
auch noch funktionieren....

Ich bin langsam echt ratlos... und es muss doch funktionieren, sonst 
würde der Bootloader ja iwie seinen Sinn verfehlen....

Vielen Dank schon mal im Voraus,
hhazard

Autor: Kai (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe Probleme mit dem FastBoot 
Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain" auf einem Mega88.
FastBoot kompiliert problemlos. Das übertragen des Bootloaders, auf den 
AVR funktioniert auch. Ich habe mittlerweile wohl jeden Beitrag hier im 
Forum gelesen und vermutlich auch alle Tips ausprobiert, die ich 
gefunden habe, aber ich komme zu keinem Ergebnis.

Ich kann KEINE Firmware, mit dem Bootloader, vollständig übertragen.
Ich verwende dieses Tool 
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644", da "fboot.exe" aus 
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644" unter Win7 (64Bit) bei 
mir mit einem Fehler, mit dem ungefähren Wortlaut, "Ungültige 
16Bit-Anwendung" abbricht.

Der Flashvorgang bricht bei 67% ab (Hex-File erzeugt mit AVRStudio6).
Wenn ich meine Firmware mit dem unten genannten avr-gcc erzeuge bricht 
der Flash-Vorgang bei 68% ab.

Der Bootloader startet darauf nicht mehr und muss neu geflashed werden. 
Unten habe ich die Ausgabe des Tools eingefügt.
Im Anhang habe ich "bootload.lst" beigefügt.

Ich verwende als Verbindung UART per Bluetooth (BTM-222) und 19200 Baud. 
Andere Baudraten ergeben keinen Unterschied. Die Bluetooth-Verbindung 
ist mit der eigentlichen Firmware bei 19200 Baud voll funktionstüchtig.

Die Firmware, welche ich übertragen möchte, funktioniert vollständig, 
wenn ich diese direkt (ohne FastBoot) auf den AVR übertrage.

Ich habe das Makefile folgendermaßen angepasst:
F_CPU=8000000
MCU=atmega88.
ATMEL_INC = m88def.inc

Die Fuses des m88:

Low: 0xE2
High: 0xDF
Ext: 0x04

Ich würde mich freuen wenn Ihr mir helfen könntet! Ich sehe leider nicht 
was das Problem ist oder was ich falsch mache.

Vielen Dank!

Grüße
Kai

-----------------------------------

Ausgabe von MAKE:

$ make
Makefile:120: atmel_def.mak: Datei oder Verzeichnis nicht gefunden
./_conv.awk m88def.inc | gawk 
'/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega88 -DF_CPU=8000000  -I . 
-I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gstabs+ -L,-gstabs+ -DRAM_START=0x0100 -DSRAM_SIZE=1024 
-DSTX_PORT=PORTD -DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S 
-o bootload.o
avr-gcc -c -Wa,-adhlns=stub.lst -mmcu=atmega88 -DF_CPU=8000000  -I . -I 
./added -I ./converted -I/usr/local/avr/include  -ffreestanding -gstabs+ 
-L,-gstabs+ -DRAM_START=0x0100 -DSRAM_SIZE=1024 -DSTX_PORT=PORTD 
-DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/stub.S -o stub.o
vars="$(./get_bootsection_addrs.sh 0x0fff 0xf80 0xf00 0xe00 )"; \
arch="$(./get_avr_arch.sh -mmcu=atmega88 bootload.o)"; \
echo "arch=$arch";\
echo "$vars"; \
eval "$vars"; \
sed -e "s/@LOADER_START@/$LOADER_START/g" \
    -e s"/@ARCH@/$arch/" \
    -e s'/@RAM_START@/0x0100/g' \
    -e s'/@RAM_SIZE@/1024/g' \
    -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
    bootload.template.x > bootload.x; \
avr-ld -N -E -T bootload.x -Map=bootload.map \
  --cref bootload.o stub.o -o bootload.elf --defsym Application=0
*** Note: set BOOTSZ fuses to the word address 0xf00 ***
arch=avr4
LOADER_START=0x1e00
STUB_OFFSET=0x1fe
avr-objcopy -O ihex bootload.elf bootload.hex



AVR-GCC:

avr-gcc -v
Using built-in specs.
Target: avr
Configured with: 
/opt/tools/ptxdist/OSELAS.Toolchain-1.99.3.6/platform-avr-gcc-4.4.4-libc 
-1.7.0-binutils-2.20.1/build-cross/gcc-4.4.4/configure  --target=avr 
--enable-multilib --disable-__cxa_atexit --enable-sjlj-exceptions 
--disable-nls --disable-decimal-float --disable-fixed-point 
--disable-win32-registry --enable-symvers=gnu 
--with-pkgversion=mwehr_avr_toolchain 
--with-gmp=/opt/tools/ptxdist/OSELAS.Toolchain-1.99.3.6/platform-avr-gcc 
-4.4.4-libc-1.7.0-binutils-2.20.1/sysroot-host 
--with-mpfr=/opt/tools/ptxdist/OSELAS.Toolchain-1.99.3.6/platform-avr-gc 
c-4.4.4-libc-1.7.0-binutils-2.20.1/sysroot-host 
--prefix=/opt/mwehr_avr_toolchain/avr/gcc-4.4.4-libc-1.7.0-binutils-2.20 
.1  --enable-languages=c,c++ --enable-threads=single --enable-c99 
--enable-long-long --enable-libstdcxx-debug --enable-profile 
--disable-shared --disable-libssp --enable-checking=release
Thread model: single
gcc version 4.4.4 (mwehr_avr_toolchain)



Ausgabe von "bootloader":

=================================================
|           BOOTLOADER, Target: V2.1            |
=================================================
Port    : /dev/rfcomm0
Baudrate: 19200
File    : ../../firmware/Debug/main.hex
Reading : ../../firmware/Debug/main.hex... File read.
Size    : 1389 Bytes
Program device.
-------------------------------------------------
Waiting for device... connected!
Bootloader    : V2.1
Target        : 1E930A ATmega88
Buffer        : 960 Byte
Size available: 7680 Byte
CRC enabled and OK.
Programming   : 00000 - 0056D
Writing | ############################# |  67%
 ---------- Failed! ----------

 ---------- Programming failed! ----------

...starting application

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kai,

hast Du mal eine andere / höhere Baudrate versucht? Mit 8 MHz laufen bei 
mir 115200 Baud zuverlässig.

Gruß,
Bernhard

Autor: pedro f. (healthhazard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey!
ich hab nochmal ein paar Facts zu meinem Problem, vll kann mir ja dann 
wer helfen.

Atmega48 @20Mhz

    -> FUSES: EXTENDED: 0xFE
              HIGH:     0xDF
              LOW:      0xDE

Bootloader geflashed -> Verify OK

Programm mit AVR-Studio 4 gebaut und einfach geladen (Programm 
funktioniert, wenn man es direkt ohne Bootloader flashed) -> Flash 
Verify (Bootloader) OK

Reset, erneutes hochladen des Programms -> Flash Verify (Bootloader) OK

soweit alles in Ordnung, aber sobald ich jetzt die Stromversorgung 
trenne und wieder verbinde kann ich nichts mehr hochladen

ein Flash Verify des Bootloaders bringt dann folgende Fehlermeldung:
   "WARNING: FLASH byte address 0x0F00 is 0xFF (should be 0x68).. 
FAILED!"

....so wars zumindest bis jetzt immer, aber nachdem ich das nochmal 
genau so reproduzieren wollte konnte ich 2 mal mein Programm nach 
Stromverbindung aus-an hochladen...aber dann wieder genau des selbe 
Fehler.

ich nehme mal an, dass 0x0F00 noch im Bootloader ist, sonst würde ja 
kein Fehler beim Verify auftreten...wieso wird also irgendwann der 
Bootloader überschrieben?
Liegt es vll am Atmega48, weil er keinen richtigen Bootloader-Support 
hat?

Ich kann auch noch mein HEX-File hochladen, wenn das bei der Fehlersuche 
helfen würde.

Vielen Dank im Voraus,
hhazard

Autor: Tueftler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Memo an mich selbst und evtl. auch andere:

Als Bootloader für Attiny84 den gleichen Code benutzen wie für Attiny85, 
hat gleiches Speicherlayout, Registeraddressierung etc....
Bootloader funktioniert nicht, wenn tn84def.inc genutzt und ATtiny84 im 
Makefile eingestellt werden.

Autor: Pascal R. (pascal_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cool, mit den Änderungen von avion23 an get_avr_arch.sh funktioniert das 
kompilieren auch mit dem avr-gcc v4.8.2 auf meinem Ubuntu 14.04 LTS. Ich 
habe hier einige Tests mit einem ATmega164PA gemacht, der jetzt per UART 
von einem Raspberry Pi mit FBoot-Linux geflashed werden kann. Dazu sind 
nur die RX,TX Pins (und GND, über bustreiber und seriellem Kabel) 
verbunden.

Soll ich mal nen Git Repository auf Github erstellen, indem die Updates 
hier zusammenlaufen können? Hat mich schon ne ganze Weile beschäftigt, 
hier zusammenzusuchen, welche Dateien ich als Update noch runterladen 
könnte.

Der Rest war dann mega einfach. Vielen Dank an die Beteiligten!

Autor: Konrad S. (maybee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pascal R. schrieb:
> Soll ich mal nen Git Repository auf Github erstellen

Ja, oder hier auf dem SVN-Server.

Autor: flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen.

Zuerst einmal: Cooles Projekt!
Ich finde es super dass sich so viele Leute Zeit nehmen sowas auf die 
Beine zu stellen.

Leider habe ich ein paar Probleme:

Einstellungen:

Version: fastboot-2.9_110804.zip

MCU: Atmega8

avr-gcc --version:
 avr-gcc (GCC) 4.8.1 

Output:
fastboot-2.9 % make -f Makefile-m8
vars="$(./get_text_addrs.sh 0xFFF)"; \
  arch="$(./get_avr_arch.sh -mmcu=atmega8 bootload.o)"; \
  echo "arch=$arch";\
  echo "$vars"; \
  eval "$vars"; \
  sed -e "s/@LOADER_START@/$LOADER_START/g" \
      -e s"/@ARCH@/$arch/" \
      -e s'/@RAM_START@//g' \
      -e s'/@RAM_SIZE@//g' \
      -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
      bootload.template.x > bootload.x; \
  avr-ld -N -E -T bootload.x -Map=bootload.map \
    --cref bootload.o stub.o -o bootload.elf --defsym Application="$LOADER_START-2"
*** Last available byte address for the user program: 0x1dfd
arch=avr4
LOADER_START=0x1e00
STUB_OFFSET=0x1fe
avr-ld:bootload.x:22: syntax error
make: *** [bootload.elf] Error 1

Inhalt von bootload.x an der entsprechenden Stelle:
19: MEMORY
20: {
21:  text  (rx)   : ORIGIN = 0x1e00, LENGTH = 0x1fe + 2
22:  bss   (rw!x) : ORIGIN = 0x8000000 +, LENGTH =
23: }

Also in Zeile 22:
fehlen einmal die Laenge und nachdem Offset (0x800000) noch der Wert der 
aufaddiert werden sollte.

Kann mir jemand sagen woran es liegt, dass diese nicht geschrieben 
werden?

/Flo

Autor: Uwe S. (de0508)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hier ist ein Update zum Post: 
www.mikrocontroller.net/topic/146638#2340593

Autor: Kevin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade den Bootloader auf einem Amtega128 zum laufen zu 
bekommen.
Version 2.9
Alles gemacht wie im Readme beschrieben.
Was muss in die atmel_def.h??

Ausgabe in Atmel Studio:
------ Build started: Project: bootload, Configuration: Debug AVR ------
Build started.
Project "bootload.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; 
('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\ATMEL\Atmel Studio 
6.1\Vs\Compiler.targets" from project "E:\Projekte\__Atmel Studio 
Libs\Fast Boot\fastboot-2.9-140709\fastboot-2.9\bootload\bootload.cproj" 
(target "Build" depends on it):
  Task "RunCompilerTask"
    C:\Program Files (x86)\ATMEL\Atmel Studio 6.1\shellUtils\make.exe -C 
"E:\Projekte\__Atmel Studio Libs\Fast 
Boot\fastboot-2.9-140709\fastboot-2.9" -f "Makefile" -B
    make: Entering directory `E:/Projekte/__Atmel Studio Libs/Fast 
Boot/fastboot-2.9-140709/fastboot-2.9'
    ./_conv.awk m128def.inc | gawk 
'/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
    Der Befehl "." ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.
    make: *** [atmel_def.h] Error 255
    make: Leaving directory `E:/Projekte/__Atmel Studio Libs/Fast 
Boot/fastboot-2.9-140709/fastboot-2.9'
  Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreBuild" in project "bootload.cproj" -- FAILED.
Done building project "bootload.cproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped 
==========

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
flo schrieb:
> Kann mir jemand sagen woran es liegt, dass diese nicht geschrieben
> werden?

@Flo:
Ich hatte mit ähnlichen Problemen wie Du zu kämpfen, allerdings unter 
opensuse 13.1 mit avr-gcc 4.8.3 .
Ich konnte den Bootloader letztendlich problemlos kompilieren unter 
Ubuntu 12.04.5 Desktop 32bit, welche es nach wie vor noch zum Download 
auf ubuntu.com gibt. Man muss sich das Ubuntu nicht mal installieren, 
das geht auch mit dem von der Scheibe gestarteten Linux, die benötigten 
Pakete für das Fastboot lassen sich auch so installieren.

@all:
Ich konnte mir den erzeugten Bootloader zwar mit avrdude auf den Atmega8 
schieben, aber mit dem UpdateLoader von Leo Andres keine Verbindung 
herstellen. Da ich mit den AVRs noch ganz "frisch" bin, vermute ich mal, 
daß meine Fuses nicht stimmen ( Atmega8 14,74 Mhz , Low: 0xE1 High: 
0xDC). Sind meine Fuses richtig oder falls nicht mir jemand sagen, wie 
sie denn richtig wären?
Viele Grüße
Chris

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich will den Bootloader für einen Mega2560 verwenden, und zum Flashen 
den Updateloader 2.2.
Nun kann ich den Bootloader installieren, aber keine Files flashen die 
für den Mega2560 sind. Da sagt der Updateloader immer Checksum error. 
Hexfile ist 180kB groß.
Andere Files kann ich raufspielen, da kommt zwar die Meldung dass die 
Prüfsumme des Kontrollers nicht passt, aber dann werden alle Daten 
übertragen.
Verwende AVR Studio 6.2.
Kann der UpdateLoader nicht mit dem Mega2560?
Gibt es ein anderes passendes Flash Tool unter Windows?

LG!

Autor: Nils E. (yetanotheruser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand mal den Bootloader mit einem 328P ausprobiert?

Die atmel/m328Pdef.inc fehlte, mit der von AVR Studio 4.18 assembliert 
er fehlerfrei und lässt sich genau 1 x programmieren. Danach wird der 
Bootloader nicht mehr gefunden.

Mit dem 1284P funktioniert alles prima.

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

na wenn die Datei m328Pdef.inc fehlt, kannst Du auch den Bootloader 
übersetzen.

Bei mir läuft der auf verschiedenen atmega und attiny einwandfrei.

Man muss auch die Fusebits für den Bootloader "Modus" richtig setzten.

Autor: Nils E. (yetanotheruser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt klappt's auch mit dem m328P: es lag tatsächlich doch an den Fuses.

Ich hatte zwar die richtige Boot Flash section size ausgewählt, aber 
BOOTRST nicht auf 0 gesetzt. Beim Engbedded AVR Fuse Calculator muss man 
dazu das Häkchen setzen bei "Boot Reset vector Enabled (default 
address=$0000); [BOOTRST=0]".

Vielen Dank für die Hilfe!

Autor: clonephon82 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War jemand schon erfolgreich mit dem Atmel Studio 6.2 und Windows 7?

thx
mathias

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich versuche diesen Bootloader unter OSX 10.10 zu kompilieren, was mir 
bisher jedoch nicht gelungen ist.
Installiert habe ich CrossPack for AVR 
(http://obdev.at/products/crosspack/index.html) Kompilieren von 
C-programmen und programmieren des AVR mit AVRDude und USBasp 
funktioniert einwandfrei.

Wenn ich versuche den Bootloader zu kompilieren, schlaegt es leider 
fehl.
Aktuell versuche ich mich an der 2.9 aus diesem Thread. Andere versionen 
gaben die selben fehler.

bekomme ich die folgende ausgabe:

~/G/P/A/fastboot ❯❯❯ make all -B 
⏎
./_conv.awk atmel/m32def.inc | gawk 
'/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
/bin/bash: ./_conv.awk: /usr/bin/gawk: bad interpreter: No such file or 
directory
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak
avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega32 -DF_CPU=14745600 -I . 
-I ./added -I ./converted -I /usr/local/avr/include -I 
/usr/local/CrossPack-AVR-20131216/bin -ffreestanding -gstabs+ 
-L,-gstabs+ -DRAM_START=0x0060 -DSRAM_SIZE=2048 -DSTX_PORT=PORTD 
-DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S -o bootload.o
./converted/password.inc: Assembler messages:
./converted/password.inc:13: Error: non-constant expression in ".if" 
statement
./converted/message.inc:17: Error: non-constant expression in ".if" 
statement
./converted/message.inc:23: Error: non-constant expression in ".if" 
statement
Makefile:182: recipe for target 'bootload.o' failed
make: *** [bootload.o] Error 1



Die Fehler in der Password.inc und message.inc entstehen in folgenden 
Linien:
1) XLPM  r0, z+
2) XLPM  yl, z
3) XLPM  a0, z+


Ich verstehe leider nicht, woran dies liegen koennte.
Jemand eine Idee?
Hat jemand diesen Bootloader unter OSX kompilieren koennen?

Merlin

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Merlin,

nun Dir fehlen ein paar Shell Tools, u.a. gawk und der Assembler will 
auch nicht.

Welchen Compiler verwendest Du ?

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hans,

gawk habe ich bereits installiert, Version 4.1.0 API 1.0
avr-gcc ist in der Version 4.8.1 (GCC) installiert

Danke fuer den Tipp mit dem Assembler, ich werde gleich mal versuchen 
mich etwas schlauer zu machen. Ich bin bisher davon ausgegangen dass 
dieser teil vom avr-gcc ist.

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmals Hans,
Dein Kommentar hat mich in die richtige Richtung gebracht, mir fehlte 
wohl die avr-libc. Mit HomeBrew installiert, und mit der letzten 
get_avr_arch.sh hier hat das Kompilieren nun geklappt.

Der Test auf dem AVR kommt dann spaeter zu Hause.

Vielen dank!
Merlin

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo in die grosse Runde,

um nicht alle Fehler zu wiederholen, war war mein Plan das gesamte 
Bootloaderprojekt von Uwe S. einfach mal durchlaufen zu lassen. Auch 
wenn ich spatter einen anderen Prozessor verwenden möchte, sollte es 
doch mit den Beispieldaten funktionieren.

Hier mein Weg zum Fehler: Ich habe

a) die original fastboot-2.9_110804.zip in das ein Verzeichnis 
D:\bootload entpackt.

b) im Makefile lediglich DEBUG = dwarf-2 geändert, weil ich AVR Studio 
4.19 nutze.

c) Im Studio ein neues Projekt angelegt, als Projektordner der oben 
genannte D:\bootload eingegeben

d) die Projektkonfiguration auf <use external makefile: Makefile> 
geändert

e) und den ersten BUILD gewagt.

Das Ergebnis war ernüchternd:

Build started 9.4.2015 at 11:52:23
Makefile:125: atmel_def.mak: No such file or directory
gawk '{ printf "%s = %s\n", $2, $3 }' atmel_def.h > atmel_def.mak

avr-gcc -c -Wa,-adhlns=bootload.lst -mmcu=atmega32 -DF_CPU=14745600  -I 
. -I ./added -I ./converted -I/usr/local/avr/include  -ffreestanding 
-gdwarf-2 -L,-gdwarf-2 -DRAM_START= -DSRAM_SIZE= -DSTX_PORT=PORTD 
-DSTX=PD1 -DSRX_PORT=PORTD -DSRX=PD0 added/bootload.S -o bootload.o


./atmel_def.h: Assembler messages:
./atmel_def.h:1: Error: junk at end of line, first unrecognized 
character is `2'
./converted/password.inc:13: Error: non-constant expression in ".if" 
statement
./converted/message.inc:17: Error: non-constant expression in ".if" 
statement
./converted/message.inc:23: Error: non-constant expression in ".if" 
statement
./added/fastload.inc:73: Error: illegal relocation size: 1
./added/fastload.inc:74: Error: illegal relocation size: 1
./added/fastload.inc:76: Error: illegal relocation size: 1
./added/fastload.inc:77: Error: illegal relocation size: 1
./added/fastload.inc:78: Error: illegal relocation size: 1
./added/fastload.inc:80: Error: illegal relocation size: 1
./added/fastload.inc:81: Error: illegal relocation size: 1
./added/fastload.inc:82: Error: illegal relocation size: 1
make: *** [bootload.o] Fehler 1
Build failed with 1 errors and 0 warnings...

Bin auch nach mehrfachem rauf und runterlesen Eurer Beiträge ratlos.

Mag mir jemand einen Tipp geben?

Danke und Gruß
Axel

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex,

Hast Du das Makefile angepasst ?

Denn dort passiert die eigentliche Programmierung und Auswahl des 
Zielprozessors.

Wie sieht für den atmega32 m32def.inc aus und wo liegt diese ??

Bitte hier das Makefile mal anhängen.

PS. es sei auf eine aktuellere Datei verwiesen:
# Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain"

: Bearbeitet durch User
Autor: Axel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Uwe,

ich habe den Link auf diese Diskussion direkt aus dem Artikel 
http://www.mikrocontroller.net/articles/AVR_Bootlo... 
bekommen.

Mein Makefile habe ich angehängt, als Text vielleicht doch etwas zu 
lang.

Das m32def.inc liegt genau dort wo es im ZIP gewesen ist, im Verzeichnis 
d:\bootloader\atmel

Und damit es ganz bestimmt gefunden wird, habe ich noch eine Kopie im 
d:\bootloader abgelegt (im Makefile wird jedoch mit ./atmel/ auf das 
eben genannte atmel-Verzeichnis gezeigt.

Die von Dir referenzierte neuere Datei schaue ich mir nach dem 
Abendessen mal an.

Gruß und Dank
Axel

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Uwe,

ich habe nochmals nachgesehen welches ZIP-File ich für meinen Versuch 
verwendet hatte und muss mich (leider) korrigieren.

Es ist genau die Datei die Du mir vorhin empfohlen hattest verwendet 
worden <fastboot-2.9-140709.zip>.

Meine ursprüngliche Angabe  <fastboot-2.9_110804.zip> war als 
Quellenangabe definitiv falsch.

Sorry!!!

Gruß
Axel

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

da ich keine Atmel IDE verwende, kann ich auch nicht weiter helfen.
Du musst dich selbst um eine funktionierende Kompilerumgebung mit allen 
Tools kümmern.

: Bearbeitet durch User
Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Uwe,

schade, dass Du mir nicht weiterhelfen kannst.

Ich schreibe in meiner Kompilerumgebung seit Jahren sowohl große 
Assembler- als auch große C-Pakete. Daher dachte ich, dass es nicht an 
meiner Umgebung liegen könne.

So kann man sich täuschen.

Mal sehen, wo ich noch um Hilfe bitten kann.

Gruß
Axel

Autor: Nils E. (yetanotheruser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Axel,

die Version für die AVR-GCC-Toolchain macht einige Umstände mit diversen 
Scripts, um die ursprüngliche Version für den avrasm2 für den avr-gcc 
passend zu basteln.

Wenn Du doch aber ohnehin unter Windows entwickelst, wärst Du vielleicht 
mit der ursprünglichen Version von Peter Danneger besser beraten.

Viele Grüße
Nils

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Nils,

aus reiner Neugier hier mal das Ergebnis, wenn ich direkt unter einer 
DOS-Umgebung das <Make clean> und dann <Make> starte.

E:\>cd fastboot

E:\fastboot>make
makefile:125: atmel_def.mak: No suc
./_conv.awk atmel/m32def.inc | gawk
> atmel_def.h
Der Befehl "." ist entweder falsch
konnte nicht gefunden werden.
make: *** [atmel_def.h] Fehler 255

E:\fastboot>make clean
makefile:125: atmel_def.mak: No suc
./_conv.awk atmel/m32def.inc | gawk
> atmel_def.h
Der Befehl "." ist entweder falsch
konnte nicht gefunden werden.
make: *** [atmel_def.h] Fehler 255

Da wird schlicht _conv.awk nicht gefunden, obwohl es im Verzeichnis 
e:\fastboot liegt...

Gruß
Axel

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Axel,

ja und warum ? Da es sich um Unix Pfadangaben handelt.
Du musst auch vorher eine Unix Shell starten.

: Bearbeitet durch User
Autor: Klaus W. (klausw1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich weiß, der Quellcode des Bootloaders ist offen. Allerdings bin ich in 
diesem Thema nicht wirklich firm, naja und C ist auch nicht wirklich so 
mein Freund.
Wäre es möglich, dass jemand noch eine Funktion einbaut, um auch das 
EEPRom zu beschreiben? Soweit ich das im MCS-Bootloader gesehen habe, 
dürfte das kein großer Aufwand sein, da das Prinzip des Upload gleich 
bleibt. Ich wäre sehr dankbar dafür.
Falls die Funktion wegen des größeren Bootloaders nicht implementiert 
ist, würde ich vorschlagen, per Präprozessor-Flag beim Kompilieren die 
Funktion bei Bedarf aktivieren zu können. Dann kann der Nutzer 
entscheiden, ob er die Funktion nutzen möchte und halt weniger Speicher 
fürs Programm übrig bleibt, oder nicht.

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der bootloader selbst bietet kein EEPROM beschreiben, und wenn man es 
einbaut, dann wird er größer.
Die Frage ist, wann man das EEPROM beschreiben will - ich immer nur vor 
dem schreiben des Programmes (meist nur beim ersten mal).
Also behelfe ich mir damit, daß ich vor dem Programmieren ein Programm 
in den AVR flashe, das das EEPROM beschreibt, und danach erst das 
richtige Programm.

Wenn man das regelmässig braucht, kann man das im Makefile 
automatisieren.
Ich habe dafür mal unter Linux ein Programm geschrieben, das mit der 
EEPROM section ein AVR C-Program schreibt, das dann compiliert und 
hochgeladen wird. Nach dem start beschreibt es dann da EEPROM. Das wird 
dann bei Bedarf im Makefile aufgerufen..

Gruß,
Bernhard

Autor: Klaus W. (klausw1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

dass der Bootloader dadurch größer wird, ist klar. Hab ich ja auch oben 
geschrieben. Deswegen ja die Idee, dass man per Präprozessor-Anweisung 
das Einkompilieren der EEProm-Routine bei Bedarf aktivieren kann.

Wenn man am Entwickeln ist, könnte es schon interessant sein, weil man 
sonst den Mikrocontroller wieder ausbauen muss.
Wo es auch nützlich sein kann, wenn man dem Endkunden ein Update 
anbieten kann, wo sich vielleicht aus Änderungen der EEProm-Inhalt 
geändert haben sollte.

Gruß,
Klaus

Autor: Klaus W. (klausw1)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte mal wieder ne Frage.
Für den Atmega8 und Atmega168 habe ich den Bootloader erfolgreich 
erstellt.

Nun bin ich am Attiny2313A. Er ist vom Prinzip drauf, der Upload der 
Firmware funktioniert dann auch erstmal augenscheinlich, bricht dann 
aber beim Programm überprüfen ab. Auch wenn ich den Flash auslese, ist 
kein Programm drin, nur der Bootloader am Ende.
Da der Controller aufgelistet wird, nehme ich mal an, dass es irgendwie 
gehen muss.

Gruß,
Klaus

Autor: Uwe S. (de0508)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Klaus,

wie sieht deine Fusebit Einstellung aus ?

Ist "Self programming enable" aktiviert ?

Autor: Klaus W. (klausw1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Uwe,

da hätte ich auch selbst drauf kommen können. Das war es wohlt 
tatsächlich. Zumindest funktioniert es hier mit einem Controller. Muss 
ich zuhause mal mit exakt dem, der gestern nicht wollte, probieren.

Autor: clonephone82 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage,
Bei einem kleinen Projekt wo ich leider nur eine Rx Leitung zur 
Verfügung habe hätte ich doch gerne einen Bootloader integriert.

Blöderweise kann ich auch nur in eine Richtung senden. Die Leitung wird 
auf-modelliert usw.
Meint ihr das es möglich ist nur über die Rx Leitung fastboot zu nützen. 
Ich dachte an einen abgeänderte Hostsoftware die einfach das Protokoll 
so abarbeitet als wie die richtige Antwort kommt. Ich hätte dafür genau 
verifiziert wie die Timeouts sein müssen etc. Also das ist dann schon 
recht zugeschnitten usw. aber das ist mir bewusst. Aber was denkt ihr 
das müsste schon gehen.

Danke
sg
mathias

Autor: Klaus W. (klausw1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fastboot unterstützt auch einen 1-wire modus. Du musst ihn nur im 
1-wire-modus kompilieren und einen Adapter bauen. Im PDF-Handbuch ist 
beschrieben, wie der aussehen muss.

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du wirklich nur an den AVR senden kannst, ist das aber ein 
Glücksspiel...

Der AVR gitb ja dem Ladeprogramm beim initialisieren zurück, wer er ist, 
und wie groß sein Buffer ist, d.h. in welchen Blockgrößen gesendet 
werden soll.

Wenn man das weiß, kann man im Ladeprogramm mit den vorgegeben Werten 
arbeiten.
Dann Block senden, einige Zeit warten (der Block muss ja geschrieben 
werden), und nächsten Block senden.

Soweit ich mich erinnere, hat der Bootloader selbst keine Timeouts mehr, 
d.h. man kann dann einfach großzügig warten. Du musst also keine 
Timeouts verifizieren...

Autor: Daniel B. (bradan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe AVR-GCC 5.2.0 (unter Arch Linux) und es kommt wieder die 
Fehlermeldung
get_avr_arch.sh: Could not find an architecture in avr-gcc's internal ld command line

Komplettes Log:
vars="$(./get_text_addrs.sh 0x3FFF)"; \
arch="$(./get_avr_arch.sh -mmcu=atmega32 bootload.o)"; \
echo "arch=$arch";\
echo "$vars"; \
eval "$vars"; \
sed -e "s/@LOADER_START@/$LOADER_START/g" \
    -e s"/@ARCH@/$arch/" \
    -e s'/@RAM_START@//g' \
    -e s'/@RAM_SIZE@//g' \
    -e "s/@STUB_OFFSET@/$STUB_OFFSET/g" \
    bootload.template.x > bootload.x; \
avr-ld -N -E -T bootload.x -Map=bootload.map \
  --cref bootload.o stub.o -o bootload.elf --defsym Application="$LOADER_START-2"
*** Last available byte address for the user program: 0x7dfd
get_avr_arch.sh: Could not find an architecture in avr-gcc's internal ld command line
arch=
LOADER_START=0x7e00
STUB_OFFSET=0x1fe
avr-ld:bootload.x:18: syntax error
Makefile:133: die Regel für Ziel „bootload.elf“ scheiterte
make: *** [bootload.elf] Fehler 1

Laut diesem Thread gibt es eine neue Version dieser Datei, aber die 
funktioniert leider auch nicht.

Kann mir jemand vielleicht sagen, was das Resultat dieser Datei ist bei 
einem atmega32? Dann könnte ich das vielleicht manuell einsetzen. Ich 
habe bereits m32 und atmega32 versucht, aber ohne Erfolg, denn dann 
kommt:
arch=atmega32
LOADER_START=0x7e00
STUB_OFFSET=0x1fe
avr-ld: cannot represent machine `atmega32'

Mit freundlichen Grüßen,
Daniel

Autor: Hendrik L. (lbd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

da obige Prozedur (Makefile) im letzten Schritt (Bind) noch nicht 
geklappt hat (bei mir auf DEBIAN)
Linux version 4.1.13-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015

... habe ich mir 'mal den Vorgang untersucht und verschiedene Fragen 
stellen sich mir (bin Anfänger):

Was bewirkt eigentlich der nachfolgende Befehl in dem Bash Script 
"get_avr_arch.sh"?
avr-gcc -mmcu=atmega2560 -### bootload.o -o+  ;#magic1295671ghkl-.

Wo bitte ist die "Magic..." Abfrage dokumentiert?

Leider funktioniert der Befehl nur auf der Konsole, das System antwortet 
mit:

Using built-in specs.
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.7.2/lto-wrapper
Target: avr
Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-libssp --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=avr
Thread model: single
gcc version 4.7.2 (GCC)
COMPILER_PATH=/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/:/usr/lib/gcc/avr/4.7.2/../../../avr/bin/
LIBRARY_PATH=/usr/lib/gcc/avr/4.7.2/avr6/:/usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr6/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/4.7.2/../../../avr/lib/
COLLECT_GCC_OPTIONS='-mmcu=atmega2560' '-o' '+'
 /usr/lib/gcc/avr/4.7.2/collect2 -m avr6 -Tdata 0x800200 -o "+" /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr6/crtm2560.o -L/usr/lib/gcc/avr/4.7.2/avr6 -L/usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr6 -L/usr/lib/gcc/avr/4.7.2 -L/usr/lib/gcc/avr/4.7.2/../../../avr/lib bootload.o -lgcc -lc -lgcc


Hieraus entnehme ich - der Mega 2560 ist in avr-gcc definiert (hätte 
mich auch gewundert!)

Was mache ich denn damit?

Das Bash-Script steigt mit exit 1 aus, weil diese Antwort wohl nicht 
zurückkommt, dadurch kann make den ersehnten Bootloader nicht zu einem 
Executable linken.
Das Problem ist wohl auch in einigen Posts zuvor schon aufgetreten, bin 
mir aber nicht sicher, ob das Problem richtig erkannt wurde - die 
Prozessoren waren offensichtlich definiert - nur das Script scheint die 
Antwort nicht zu bekommen. Ist wahrscheinlich eher ein Scripting Problem 
in "get_avr_arch.sh" in Zeilen 4 & 5:
magic=";#magic1295671ghkl-."
# call gcc, asking it for the command line which it would use for
# linking:
set -- $(avr-gcc -m"$mcu" -### "$1" -o "$magic" 2>&1 \
         | gawk '/^avr-gcc:/||/ld.*'"$magic"'.*"-lgcc"/')

if [ "$1" = "avr-gcc:" ]; then
    # we have an error message from gcc:
    echo "$*"
    exit 1
fi

# retrieve architecture argument from gcc's commandline (the argument
# which follows '"-m"'):
while [ -n "$2" ]; do
    if [ "$1" = '"-m"' ]; then
  eval echo $2    # eval: remove quotes
  exit 0
    fi
    shift
done
echo >&2 "\
$pname: Could not find an architecture in avr-gcc's internal ld command line"
exit 1

Any Help is pretty much appreciated ;-)

Grüße

Autor: Hendrik L. (lbd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So - bin ein Stück weiter:

Für den ATmega 2560 wäre die erwartete Antwort gewesen ..., die dann 
aufgelöst nach den Positional Parametern $1 ... $x
+ [ Using = avr-gcc: ]
+ [ -n built-in ]
+ [ Using = -m ]
+ shift
+ [ -n specs. ]
+ [ built-in = -m ]
+ shift
+ [ -n COLLECT_GCC=avr-gcc ]
+ [ specs. = -m ]
+ shift
+ [ -n COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.7.2/lto-wrapper ]
+ [ COLLECT_GCC=avr-gcc = -m ]
+ shift
+ [ -n Target: ]
+ [ COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.7.2/lto-wrapper = -m ]
+ shift
+ [ -n avr ]
+ [ Target: = -m ]
+ shift
+ [ -n Configured ]
+ [ avr = -m ]
+ shift
+ [ -n with: ]
+ [ Configured = -m ]
+ shift
+ [ -n ../src/configure ]
+ [ with: = -m ]
+ shift
+ [ -n -v ]
+ [ ../src/configure = -m ]
+ shift
+ [ -n --enable-languages=c,c++ ]
+ [ -v = -m ]
+ shift
+ [ -n --prefix=/usr/lib ]
+ [ --enable-languages=c,c++ = -m ]
+ shift
+ [ -n --infodir=/usr/share/info ]
+ [ --prefix=/usr/lib = -m ]
+ shift
+ [ -n --mandir=/usr/share/man ]
+ [ --infodir=/usr/share/info = -m ]
+ shift
+ [ -n --bindir=/usr/bin ]
+ [ --mandir=/usr/share/man = -m ]
+ shift
+ [ -n --libexecdir=/usr/lib ]
+ [ --bindir=/usr/bin = -m ]
+ shift
+ [ -n --libdir=/usr/lib ]
+ [ --libexecdir=/usr/lib = -m ]
+ shift
+ [ -n --enable-shared ]
+ [ --libdir=/usr/lib = -m ]
+ shift
+ [ -n --with-system-zlib ]
+ [ --enable-shared = -m ]
+ shift
+ [ -n --enable-long-long ]
+ [ --with-system-zlib = -m ]
+ shift
+ [ -n --enable-nls ]
+ [ --enable-long-long = -m ]
+ shift
+ [ -n --without-included-gettext ]
+ [ --enable-nls = -m ]
+ shift
+ [ -n --disable-libssp ]
+ [ --without-included-gettext = -m ]
+ shift
+ [ -n --build=arm-linux-gnueabihf ]
+ [ --disable-libssp = -m ]
+ shift
+ [ -n --host=arm-linux-gnueabihf ]
+ [ --build=arm-linux-gnueabihf = -m ]
+ shift
+ [ -n --target=avr ]
+ [ --host=arm-linux-gnueabihf = -m ]
+ shift
+ [ -n Thread ]
+ [ --target=avr = -m ]
+ shift
+ [ -n model: ]
+ [ Thread = -m ]
+ shift
+ [ -n singlegcc ]
+ [ model: = -m ]
+ shift
+ [ -n version ]
+ [ singlegcc = -m ]
+ shift
+ [ -n 4.7.2 ]
+ [ version = -m ]
+ shift
+ [ -n GCCCOMPILER_PATH=/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/:/usr/lib/gcc/avr/4.7.2/../../../avr/bin/ ]
+ [ 4.7.2 = -m ]
+ shift
+ [ -n LIBRARY_PATH=/usr/lib/gcc/avr/4.7.2/avr6/:/usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr6/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/4.7.2/../../../avr/lib/ ]
+ [ GCCCOMPILER_PATH=/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/:/usr/lib/gcc/avr/4.7.2/../../../avr/bin/ = -m ]
+ shift
+ [ -n COLLECT_GCC_OPTIONS=-mmcu=atmega2560 ]
+ [ LIBRARY_PATH=/usr/lib/gcc/avr/4.7.2/avr6/:/usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr6/:/usr/lib/gcc/avr/4.7.2/:/usr/lib/gcc/avr/4.7.2/../../../avr/lib/ = -m ]
+ shift
+ [ -n -o ]
+ [ COLLECT_GCC_OPTIONS=-mmcu=atmega2560 = -m ]
+ shift
+ [ -n + ]
+ [ -o = -m ]
+ shift
+ [ -n /usr/lib/gcc/avr/4.7.2/collect2 ]
+ [ + = -m ]
+ shift
+ [ -n -m ]
+ [ /usr/lib/gcc/avr/4.7.2/collect2 = -m ]
+ shift
+ [ -n avr6 ]
+ [ -m = -m ]
+ eval echo avr6
+ echo avr6
avr6
+ exit 0

mit exit 0 für "avr6" geendet hätte.

"avr6" ist also das "Objekt der Begierde", das gesucht war.

Was nun ist avr6 ??? Offensichtlich kann der Linker damit etwas anfangen 
...!

Wer kann bitte mein Skript-Problem auflösen, damit der Automatismus 
durchläuft  - ansonsten muss ich von Hand eintragen!

Danke im Voraus

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

avr6 ist die AVR Klasse (Generation) zu der dein AVR µC gehört.

Autor: Hendrik L. (lbd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

nachdem diese Klippe umschifft, habe ich es geschafft, eine bootload.exe 
für die AVR6 Klasse (ATmega2560) zu erstellen. Ich gehe davon aus, dass 
er auch läuft - auf Windows Plattform funktioniert jedenfalls läuft 
PEDA's Bootloader für den 2560 hervorragend, den ich bereits dort vor 
Jahren generiert habe.

Für die ATtiny Klasse (ohne BOOTRST) ist an dieser Stelle leider im 
letzten Schritt Schluss - der folgende Scripting Abschnitt im Makefile 
(siehe unten) ist definitiv  (auch - neben dem oben geschildertem 
Problem, was man aber "manuell" umschiffen kann) "buggy" und mir fehlt 
das Wissen, um überhaupt analysieren zu können, woran es liegt könnte - 
gawk und sed sind nicht mein Thema ...!

Werde jetzt auf Windows umsteigen und dort meinen ATtiny mit Hilfe von 
PEDA erstellen. Der müsste ja dann auch mit einem Linux Host 
kommunizieren können.

Schade, dass dieses schöne Tool nicht ganz fertig geworden ist. Wirklich 
eine geniale Arbeit!

Grüße
#(Makefile)
...
bootload.elf : bootload.o stub.o
#---- ab hier buggy ------------------------------------------------------
ifndef BOOTRST
  vars="$$(./get_text_addrs.sh $(FLASHEND))"; \
  arch="$$(./get_avr_arch.sh -mmcu=$(MCU) bootload.o)"; \
  echo "arch=$$arch";\
  echo "$$vars"; \
  eval "$$vars"; \
  sed -e "s/@LOADER_START@/$$LOADER_START/g" \
      -e s"/@ARCH@/$$arch/" \
      -e s'/@RAM_START@/$(SRAM_START)/g' \
      -e s'/@RAM_SIZE@/$(SRAM_SIZE)/g' \
      -e "s/@STUB_OFFSET@/$$STUB_OFFSET/g" \
      bootload.template.x > bootload.x; \
  avr-ld -N -E -T bootload.x -Map=$(patsubst %.elf,%,$@).map \
    --cref $+ -o $@ --defsym Application="$$LOADER_START-2"
#---- bis hier buggy -----------------------------------------------------
else
  vars="$$(./get_bootsection_addrs.sh $(FLASHEND) $(FIRSTBOOTSTART) \
                $(SECONDBOOTSTART) $(THIRDBOOTSTART) $(FORTHBOOTSTART))"; \
...

Autor: Oliver (Gast)
Datum: