Forum: Compiler & IDEs Spezialität im Linker-Script?


von Karsten (Gast)


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

von Karsten (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Thomas P. (pototschnig)


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 :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.