Spezialität im Linker-Script?

Gast #364147
Lesenswert?
• ▲
▼
Hallo,

ich möchte im Linker-Script einen bestimmten Bereich aus der
.text-section für einen sogenannten memory protection key reservieren.
Also ein memory hole erzeugen.
Damit möchte ich sicherstellen, dass beim flashen des Controllers
dieser Bereich nicht durch meine Daten überschrieben wird.

Hat jemand eine Ahnung, ob sich das realisieren lässt?
Ich habe schon das Manual vom ld durchgestöbert, bin aber nicht auf das
gestoßen was ich benötige. Oder ich habe da was übersehen.

Vielen Dank
Karsten
Gast #364148
Lesenswert?
• ▲
▼
Hallo,

ich bin's noch mal.

Ich habe wahrscheinlich zu wenig Info's beigefügt.
Deshalb möchte ich jetzt das Ganze noch einmal etwas ausführlicher
gestalten.

Ich arbeite mit WinARM und möchte für den TMS470 entwickeln.
Da der TMS470 in bestimmten Flash-Speicherstellen sogenannte "Memory
Protection Key's" enthält die nicht überschrieben werden sollten,
suche ich nach einer Lösung, die es mir ermöglicht, ein elf-File zu
erzeugen das diese Speicherbelegung berücksichtigt.
Wow, was für ein langer Satz! Egal.

Zur besseren Veranschaulichung folgendes Bild als Bsp.

0x00000000 +-----------------------------
           |
           |
           |
0x0000FE00 +-----------------------------
           |  Memory Protection Key
0x00010000 +-----------------------------
           |
           |
           |
0xFFFFFFFF +-----------------------------

Die erste Möglichkeit dies zu Realisieren ist wahrscheinlich im
Linker-Script zu sehen. Ich weiß nur nicht wie.
Die zweite Möglichkeit ist evtl. die Deklaration eines Array's
entsprechender Größe, welches durch das Linkerscript auf die korrekte
Speicherposition gesetzt wird. Auch hier keine Ahnung wie ich das
machen kann.

Weiß jemand Rat?

Karsten
Moderator Persönliche Seite #364149
Lesenswert?
• ▲
▼
Ich fürchte, du musst zwei sections machen, eine davor und eine
danach.  Da der Compiler by default nur Code in .text packen
will, musst du die anderen Funktionen manuell [mittels
__attribute__((section("...")))] in den zweiten Bereich zwingen.

Mir ist nicht bekannt, dass der Linker nichtzusammenhängende
Speicherbereiche selbst behandeln könnte.
#364150
Lesenswert?
• ▲
▼
Versuch mal die Bereiche aufzuteilen, z.B.:

MEMORY
{
  STARTUP (rx) : ORIGIN = 0x00100000, LENGTH = 0x0000fe00
  KEY (rx)     : ORIGIN = 0x0010fe00, LENGTH = 0x00000200
  FLASH (rx)   : ORIGIN = 0x00110000, LENGTH = 0x00030000
  DATA (rw)    : ORIGIN = 0x00200000, LENGTH = 0x00010000
  STACK (rw)   : ORIGIN = 0x00210000, LENGTH = 0x00000000
}

und dann zusätzlich noch
  . = 0x0000000;
  .text : { *cstartup.o (.text) }>STARTUP =0

Theoretisch sollte dann der Platz für den KEY freibleiben.

Aber ohne Gewähr, weil ich bin auch noch absolute ld-script-newbie :-)

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.