Chargement…
Chargement…
Comprendre le noyau, l'espace utilisateur, l'arbre de périphériques et les chemins sûrs pour accéder au matériel de la PL.
Linux apporte processus, mémoire virtuelle, réseau, stockage et pilotes. Ces services simplifient les applications riches, mais ajoutent ordonnancement, interruptions et latences variables. Une fonction strictement déterministe peut rester sur la RPU ou dans la PL.
Une application demande des services au noyau ; elle ne possède pas librement tous les registres physiques :
| Niveau | Responsabilité |
|---|---|
| Application | Algorithme, interface et traitement métier |
| Bibliothèque | API stable utilisée par l'application |
| Noyau | Processus, mémoire, interruptions et sécurité |
| Pilote | Traduction entre l'API noyau et le périphérique |
| Matériel | Registres, DMA, interruptions et flux |
Le pilote assure accès, partage et gestion des ressources du périphérique. Cette frontière évite qu'une application défaillante modifie directement l'ensemble du système.
PetaLinux s'appuie sur Yocto, la compilation croisée et la description matérielle. Le flux comprend création du projet, import du matériel, configuration du noyau et du rootfs, build, packaging puis déploiement et console série.
Après un changement d'adresse, d'interruption ou d'IP, mettez à jour les descriptions et pilotes concernés. Une image construite pour un ancien XSA ne devient pas compatible parce qu'elle démarre.
Le Device Tree indique notamment adresses, tailles, interruptions, horloges et compatibilité :
led-controller@a0010000 {
compatible = "fpgapourtous,led-controller-1.0";
reg = <0x0 0xa0010000 0x0 0x1000>;
interrupts = <0 89 4>;
};Le nom après @ doit correspondre à l'adresse du nœud. Les cellules reg dépendent du bus parent ; les cellules d'interruption dépendent du contrôleur. Ce fragment suppose un parent avec deux cellules d'adresse et deux de taille. Il faut aussi un pilote reconnaissant le compatible choisi et les propriétés requises par son binding.
L'ancienne interface sysfs expose /sys/class/gpio :
FILE *fp = fopen("/sys/class/gpio/export", "w");
if (fp == NULL) {
perror("GPIO export");
return -1;
}
int written = fprintf(fp, "%d", gpio_number);
int closed = fclose(fp);
if (written < 0 || closed != 0) {
return -1;
}Ce fragment historique montre seulement l'export ; il faut contrôler ouverture et écriture, puis configurer direction et valeur. Pour un nouveau projet, privilégiez l'interface GPIO character device et libgpiod selon les versions du noyau et de la bibliothèque. Les numéros globaux sysfs sont fragiles.
/dev/mem et mmap peuvent servir à un diagnostic autorisé, sans gérer à eux seuls interruptions, DMA, horloges ou concurrence. UIO convient à certains périphériques simples ; un pilote noyau complet convient mieux aux ressources partagées et au DMA.
Une adresse malloc est virtuelle. Ne la programmez pas directement dans un registre DMA : le pilote utilise l'API DMA du noyau pour allocation ou mapping et adresse utilisable par le périphérique, avec les règles de synchronisation nécessaires.
Linux sur APU peut communiquer avec un traitement RPU via mémoire partagée, interruptions interprocesseurs et remoteproc/RPMsg lorsque le flux les prend en charge. Réservez les régions et attribuez les périphériques ; deux environnements ne doivent pas reconfigurer la même ressource sans protocole.
UG1144 décrit PetaLinux ; UG1137 regroupe les ressources MPSoC. L'API GPIO Linux décrit l'interface utilisateur actuelle.
Tester mes connaissances - Quiz du chapitre