Application bare-metal avec Vitis
Créer une plateforme logicielle, comprendre le BSP et piloter une IP AXI GPIO avec les pilotes de bas et de haut niveau.
Du fichier XSA au programme C
L'ingénieur utilise Vitis pour configurer et compiler le logiciel destiné à un processeur du Zynq. Il importe d'abord la plateforme matérielle depuis le fichier XSA produit par Vivado.
Une application bare-metal, ou sans système d'exploitation complet, s'exécute directement sur le processeur. Dans Vitis, le domaine standalone fournit le code de démarrage et les services minimaux nécessaires. Il n'ajoute ni processus isolés, ni ordonnanceur comparable à celui de Linux.
Pour appliquer ces notions, nous proposons une application appelée console LED UART. Elle reçoit des commandes depuis un terminal série avec le protocole UART et pilote une IP AXI GPIO reliée aux LED. Ce programme sert de fil conducteur dans les sections suivantes.
Une application Vitis repose sur trois éléments.
| Élément | Contenu |
|---|---|
| Plateforme | Description du matériel importée depuis le XSA |
| Domaine | Processeur cible, système d'exploitation et BSP |
| Application | Sources C ou C++, script de liens et options de compilation |
Le parcours consiste à créer une plateforme, sélectionner le domaine standalone, ajouter l'application puis l'exécuter sur la carte. L'utilisateur envoie ses commandes par UART tandis que l'IP AXI GPIO pilote les LED.
Compilation croisée
Le compilateur s'exécute sur le poste de développement. Le programme produit s'exécute sur un processeur ARM de la carte. Cette opération est une compilation croisée.
Le fichier ELF, pour Executable and Linkable Format, regroupe le code machine, les données et les informations utiles au débogueur. Depuis Vitis, l'ingénieur peut demander son chargement par JTAG, une liaison de programmation et de débogage, dans une mémoire déjà initialisée. Un démarrage autonome demande ensuite une image de boot.
Le BSP
Le Board Support Package relie le logiciel au matériel décrit par Vivado. Il contient les en-têtes, les bibliothèques et les pilotes adaptés à la plateforme.
Le fichier xparameters.h fournit les identifiants et les adresses des périphériques. Les noms sont générés à partir du Block Design. Ils changent lorsqu'une instance est renommée ou lorsque la plateforme change.