Qu'est-ce que Script d'édition de liens ?
Fichier indiquant à l'éditeur de liens à quelles adresses mémoire placer chaque section. En développement embarqué, il sert à définir le placement en flash et en RAM et l'adresse de la table des vecteurs d'interruption.
Nom japonais: リンカスクリプト
« Script d'édition de liens » apparaît dans 2 questions d'entraînement réparties sur 1 thèmes, dont Éditeurs de liens, chargeurs et exécutables.
Domaine: Éditeurs de liens, chargeurs et exécutables
Ce que décrit un script d'édition de liens
Le compilateur produit des fichiers objets dont le code et les données sont regroupés en sections, comme .text (instructions), .rodata (constantes), .data (variables initialisées) et .bss (variables initialisées à zéro), mais sans adresses finales. Un script d'édition de liens indique à l'éditeur de liens comment les combiner. Dans la syntaxe de GNU ld, un bloc MEMORY déclare des régions avec une origine et une longueur, par exemple la flash à une adresse et la RAM à une autre, et un bloc SECTIONS fait correspondre les sections d'entrée à des sections de sortie et affecte chacune à une région. L'éditeur de liens signale une erreur si une région déborde.
Pourquoi l'embarqué en a besoin
Sur un PC, le chargeur du système d'exploitation décide où se place un programme en mémoire, et un script d'édition de liens par défaut convient presque toujours. Un microcontrôleur sans OS commence à s'exécuter à partir d'adresses fixes à la mise sous tension ; le programme doit donc être construit pour sa carte mémoire exacte. La table des vecteurs d'interruption doit se trouver là où le matériel l'attend, le code et les constantes ont leur place en flash non volatile, et les variables modifiables, le tas et la pile doivent être en RAM. Des puces différentes d'une même famille ne nécessitent souvent qu'un script d'édition de liens différent, car leurs tailles mémoire diffèrent.
Questions fréquentes
À quoi sert un script d'édition de liens ?
Un script d'édition de liens indique à l'éditeur de liens quelles régions mémoire existent et à quelles adresses placer chaque section de code et de données. Les projets embarqués l'utilisent pour mettre le code en flash, les variables en RAM et la table des vecteurs d'interruption à l'adresse requise.
Quelle est la différence entre .data et .bss ?
.data contient les variables à valeur initiale non nulle, stockées en flash et copiées en RAM au démarrage. .bss contient les variables qui commencent à zéro : elle n'occupe aucune place en flash et est simplement effacée en RAM avant l'exécution de main.
Pourquoi .data a-t-elle deux adresses dans un script d'édition de liens ?
Ses valeurs initiales doivent être stockées en flash non volatile, mais les variables sont modifiées à l'exécution et doivent donc résider en RAM. L'adresse de chargement pointe vers la copie en flash et l'adresse d'exécution vers l'emplacement en RAM qu'utilise réellement le code.