Bootloader erzeugen u uploaden

OP #4357573
Lesenswert?
• ▲
▼
Hallo,

ich versuche auf Basis des Artikels hier auf uC.net
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung

Leider ist dort alles für AtmelStudio ausgelegt. Ich möchte es mit
avr-gcc and friends und avrdude unter linux command line auch 
hinkriegen.
Da ich schon einige mcu kaputt gemacht habe, möchte ich hier erstmal 
nachfragen, ob soweit alles richtig ist und noch eine Frage anfügen.
Die Dateie sind aus dem oben erwähnten Artikel.

Ich möchte es mit einem Arduino Duemilanove ATmega328P versuchen.
Programmer ist ein AVR ISP MKII
1
./obj
2
./src/main_bl.c
3
      uart.c
4
      uart.h

Folgende Kommandos sind möglicherweise korret:

add clock info in main_bl.c
"#define F_CPU 16000000UL"
1
avr-gcc -mmcu=atmega328p -Os -g -c ./src/uart.c -o ./obj/uart.o
2
avr-gcc -mmcu=atmega328p -Os -g -c ./src/main_bl.c -o ./obj/main_bl.o
3
avr-gcc -mmcu=atmega328p ./obj/main_bl.o ./obj/uart.o -o ./bootloader.elf
4
avr-objcopy -j .text -j .data -O ihex ./bootloader.elf ./bootloader.hex

upload bootloader:
1
avrdude -cstk500v2 -pm328p -Pusb -e -U lock:w:0x3F:m -U efuse:w:0x05:m -U hfuse:w:0xda:m -U lfuse:w:0xFF:m -U flash:w:./bootloader.hex -U lock:w:0x0F:m
Hier weiss ich nicht was es mit den beiden "lock" write Optionen auf 
sich hat und ich weiss nicht woher avrdude die Information bekommt wo 
der Bootsektor beginnt. Liest er das aus den fuses oder muss ich das im 
Kommando angeben: so wie in AVRStudio mit -Text=0x1800

hier beim ATmega328p sollte es (0x3C00w * 2 =) 0x7800 lauten, denke ich 
mal (?)
Fuses habe ich nicht geändert
avrdude -cstk500v2 -pm328p -Pusb -v -U signature:r:
avrdude: safemode: Fuses OK (E:05, H:DA, L:FF)
Boot Flash section size=1024words, Boot start address=$3C00 [BOOTSZ=01]

Ist die Erzeugung der hex-Datei richtig ?
Wie soll ich die Bootsektorstartadresse angeben ?
Wie sollte der upload Befehl für avrdude aussehen ?

vielen Dank und Gruß
wally
Angehängte Dateien:
OP #4357618
Lesenswert?
• ▲
▼
1
avr-objdump -h -S -j .text -j .data ./bootloader.elf > ./bootloader.lst
2

3

4
./bootloader.elf:     file format elf32-avr
5

6
Sections:
7
Idx Name          Size      VMA       LMA       File off  Algn
8
  0 .data         0000007e  00800100  000002d4  00000368  2**0
9
                  CONTENTS, ALLOC, LOAD, DATA
10
  1 .text         000002d4  00000000  00000000  00000094  2**1
11
                  CONTENTS, ALLOC, LOAD, READONLY, CODE

Ich glaube dieser code steht an der falschen Adresse.
Müsste nicht "text/VMA" anstatt 00000000  00007800 stehen ?
Wie macht man das richtig ?
OP #4358528
Lesenswert?
• ▲
▼
das "lock" schüztz wohl den Bootloaderbereich vor beschreiben (?)
1
-U lock:w:0x3F:m            ...     -U lock:w:0x0F:m
2
328p_unlock_bits=0x3F               328p_lock_bits=0x0F

und beim linken, kann man die Startadresse für .text section festlegen 
(?)
1
 avr-gcc -mmcu=atmega328p -Wl,-Ttext=0x7800 ./obj/main_bl.o ./obj/uart.o -o ./bootloader.elf
2

3
avr-objdump -h -S -j .text -j .data -j .bss ./bootloader.elf > ./bootloader.lst
4

5

6
./bootloader.elf:     file format elf32-avr
7

8
Sections:
9
Idx Name          Size      VMA       LMA       File off  Algn
10
  0 .data         0000007e  00800100  00007ad4  00000368  2**0
11
                  CONTENTS, ALLOC, LOAD, DATA
12
  1 .text         000002d4  00007800  00007800  00000094  2**1
13
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
14
  2 .bss          00000045  0080017e  0080017e  000003e6  2**0
15
                  ALLOC

da hfuse=0xDA ist, ist auch BOOTRST gesetzt, da gerade dec218, bit0 = 0

ist das soweit OK ?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.