Linker script
Layout mémoire
❎ Créez un fichier appelé ld_ram.lds
, dans lequel à l'aide de la directive MEMORY
vous définirez les différentes régions de mémoire disponibles dans le processeur.
Création des sections
❎ Dans votre script de link, à l'aide de la directive SECTIONS
, créez les différentes sections dont vous aurez besoin. Pour l'instant on partira du principe que l'exécutable réside entièrement en RAM, il n'y a donc pas de "recopies" à faire. Autrement dit, pas besoin de spécifier les LMA des sections, la flash n'étant pas utilisée.
On mettra en premier la section .text
, puis la section .rodata
, puis .data
, puis le bss
/ COMMON
.
Point d'entrée
Le programme est destiné à être exécuté directement par le processeur, sans passer par un loader ELF. Il n'y aurait donc pas besoin de spécifier un point d'entrée.
Mais le processeur est câblé pour chercher l'adresse où démarrer à l'adresse 0x0000_0004
qui se situe en flash. Or on voudrait qu'il boote directement sur notre programme en RAM. Pour cela, on pourrait flasher à l'adresse 0 un petit bout de code faisant juste un saut au début de la RAM. Mais on va plutôt exploiter une caractéristique bien pratique de gdb : lorsqu'on lui demande de transférer un exécutable ELF sur une carte, si celui-ci comporte un point d'entrée, alors gdb positionne automatiquement le PC sur ce point d'entrée. On n'a plus après qu'à faire continue
, et tout se passe comme si on avait booté directement depuis la RAM (ou presque : on verra par la suite qu'en fait pas tout à fait. Patience !)
❎ À l'aide de la directive ENTRY
, définissez donc un point d'entrée, par exemple sur la fonction main
.