Linker option übergeben

Gast #731539
Lesenswert?

Hallo zusammen,

ich habe da mal eine Frage. Ich verschiebe meine .text section meines 
Bootloaderprogramms auf die Speicherstelle 0xFC00 mit der 
Linkeranweisung:

-Wl,--section-start=.text=0xFC00

das funktioniert auch wunderbar. Nun wollte ich wissen ob es möglich ist 
den Bereich in den verschoben werden soll in einem Headerfile vom Nutzer 
festlegen zu lassen, damit der Bootloader auch für andere AVRs benutzt 
werden kann und mann nicht immer extra das Makefile ändern muss. Also 
etwas in die Richtung:

-Wl,--section-start=.text=&(BOOTSTART)

Meine Versuche ergeben aber immer den Compilerfehler:

C:\programme\WinAVR\bin\..\lib\gcc\avr\3.4.5\..\..\..\..\avr\bin\ld.exe: 
missing argument(s) to option "--section-start"
make: *** [TRUL.elf] Error 1

Ist das überhaupt möglich oder muss ich das Makefile für jeden 
Controller extra gestalten?

Bin neu in dem Makefile ändern :-) also lasst Gnade walten und erklärt 
lieber bißl mehr :-p

Viele Grüße

Max
Moderator Persönliche Seite #731553
Lesenswert?

Ein Headerfile geht nicht, irgendwie muss der Wert auf der Compiler-
bzw. Linkerkommandozeile feststehen.  Das impliziert, dass make ihn
ermittelt.  GNU make kann aber bspw. auch Variablen mit dem Ergebnis
externer Kommandos belegen.  Du könntest damit zum Beispiel eine
Datei haben, nennen wir sie mal mcutype.txt:
1
atmega64 0xfc00
2
atmega16 0x3c00

Im Makefile weist du dann eine Variable zu
1
MCUFILE=mcutype.txt
2
BOOTSTART=$(shell sed -ne /$(MCU)/'s/^.*  *//p' $(MCUFILE))

Danach kannst du $(BOOTSTART) als Wert für das --section-start
benutzen.  Ein alternatives Kommando, das den gleichen Effekt
hat, wäre:
1
BOOTSTART=$(shell gawk /$(MCU)/'{print $2}' $(MCUFILE))

Ist aber nicht so portabel, weil der awk nur bei Linux und MinGW
gawk heißt, während andere Systeme ihn einfach nur awk nennen.
Der sed heißt überall sed. :)
Gast #731554
Lesenswert?

> -Wl,--section-start=.text=&(BOOTSTART)

Pass da mal mit auf, nich dass dir die Konsole was wegschnippelt. Unter
*nix-Systemem sind & und () Metazeichen, die man wegstellen muss:

-Wl,--section-start=".text=&(BOOTSTART)"

Z.B. mit den Anführungszeichen. Was die Windows-Pseudo-Konsole genau 
macht, weiß ich net, aber nen Versuch isses wert.
#732189
Lesenswert?

Jörg Wunsch wrote:

[...]
> Ist aber nicht so portabel, weil der awk nur bei Linux und MinGW
> gawk heißt, während andere Systeme ihn einfach nur awk nennen.
> Der sed heißt überall sed. :)

Fast. Du bekommst nur nicht überall den gleichen :)
sed macht gegenüber awk, find, make und Konsorten auch keine Ausnahme:
% gsed --version | head -1
GNU sed version 4.1.5

Und nein, ich versichere Dir ich habe es nicht umbenannt.
Im Übrigen wundere ich mich ein wenig über deine Aussage daß der awk 
unter Linux bzw. MinGW (Das ist bezogen auf das Userland faktisch das 
Gleiche, GNU/Linux nutzt GNU als Userland, daher der Name, und MinGW ist 
die Portierung dieser Tools auf Windows) gawk heißt. Eigentlich haben 
die GNU-Tools nur in nicht GNU Umgebungen den "g"-Präfix, schlicht und 
einfach um sie von den nativen Tools unterscheiden zu können, es wäre 
halt blöde hätte man zwei "awk", eins in /usr/bin und eins in 
beispielsweise /usr/gnu/bin.
Aber GNU-Umgebungen mit g-Präfix... Man lernt ja nie aus.

So genug Haare zerteilt für heute :)


gruss
f

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