Link Command / .cmd-File - wie geht es?

Gast #3419757
Lesenswert?
• ▲
▼
Hi,

ich versuche auf dem BeagleBone / TI AM3358 gerade das Link Command File 
zu verändern, weil ich einen Teil des Codes in den internen RAM 
verschieben möchte.

Da das 1. nicht von all zu viel Erfolg gekrönt ist, weil es 2. nur 
Stochern im Nebel ist: gibt es irgendwo eine brauchbare Beschreibung 
dieses .CMD-Files? Bei TI habe ich nach langem Suchen nur was 
unpassendes für einen ganz anderen Prozessor gefunden...

Danke!
#3423167
Lesenswert?
• ▲
▼
Reinhard Kern schrieb:
> Ich glaube nicht, dass man das nur mit dem Linker lösen kann - wie soll
> denn der Code ins RAM kommen?

Passt nicht zur eigentlichen Frage, aber ...

SECTIONS
{
   ramfuncs            : LOAD = FLASHB,
                         RUN = RAML0,
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         PAGE = 0
}

Natürlich muss das Umkopieren von FLASHB nach RAML0 durch Code 
durchgeführt werden, der sich im Flash befindet bzw. vorab bereits 
initalisiert wurde (Urlader u.ä.)

Anm: Beispiel ist nicht für den AM3358.
Gast #3424309
Lesenswert?
• ▲
▼
Reinhard Kern schrieb:
> Ich glaube nicht, dass man das nur mit dem Linker lösen kann - wie soll
> denn der Code ins RAM kommen?

Nein, das soll in der Tat bei der Initialiserung und vor'm ersten Aufruf 
der entsprechenden Codestellen per memcpy() geschehen. Allerdings muss 
der Code (für absolute Sprünge/sonstige Addressarithmetik) vorab ja 
wissen, wo er laufen wird - und genau das wird in eben diesem 
kryptischen .CMD-File gemacht.
Gast #3425003
Lesenswert?
• ▲
▼
Skjervoy schrieb:
> und genau das wird in eben diesem
> kryptischen .CMD-File gemacht.

Ich weiss was du meinst - der Code wird (wenn man kein virtuelles Memory 
zur Verfügung hat), an einer bzw. für eine (RAM-) Adresse übersetzt, 
kommt aber zunächst an eine andere (ROM-)Adresse und landet erst per 
Loader an seiner richtigen Adresse.

Meistens muss man das Programm für die endgültige Adresse übersetzen und 
dann manuell umkopieren. Ich kenne im Moment nur einen Assembler, der 
das direkt kann, aber lach dich nicht tot: M80/L80, der Urururahn aller 
Assembler und Linker, das erste und bis heute einzige perfekte Programm, 
das Microsoft verkauft hat, lange vor MSDOS und so modernem Zeug.

M80 hatte einen .Phase-Befehl. Mit der Sequenz

      ORG    1000H
     .PHASE  4000H

wurde das Folgende für die Adresse 4000H assembliert und gelinkt, aber 
an die Adresse 1000H im ROM geladen - fertig. Habe ich oft gebraucht und 
bei neueren Entwicklungssystemen schmerzlich vermisst.

Gruss Reinhard

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.