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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren