5- Noyau Linux et Développement de Pilotes Noyau Linux et Développement de Pilo

5- Noyau Linux et Développement de Pilotes Noyau Linux et Développement de Pilotes Cours du Système Embarqué et Temps Réel Prof. Nabil KANNOUF UAE – ENSAH 12 novembre 2021 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2- Développement de Pilotes 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux 5.2.1- Modules de noyau Linux 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Rôle d’un pilote de périphérique Qu’est-ce qu’un pilote de périphérique ?  Rêle du système d’exploitation (SE) : offrir une abstraction du matériel aux applica- tions  Pilote : partie du noyau implémentant intégration du périphérique aux abstractions du SE 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Rôle d’un pilote de périphérique Qu’est-ce qu’un pilote de périphérique ?  Rêle du système d’exploitation (SE) : offrir une abstraction du matériel aux applica- tions  Pilote : partie du noyau implémentant intégration du périphérique aux abstractions du SE Implémentation selon modèle de SE  Micro-noyau : pilote typiquement isolé dans un serveur  Robustesse du noyau aux bogues de pilotes  Noyau monolithique : pilote intégré à l’ensemble du noyau  Bogue dans pilote a potentiel de faire planter tout le noyau 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Modules du noyau Linux Module : élément du noyau pouvant être chargé et déchargé à la volée  Modules chargés et déchargés à la volée, par exemple lors d’activation de périphériques  Modules souvent utilisés pour implémenter pilotes de périphériques  Rapproche Linux du fonctionnement d’un micro-noyau  Permet d’avoir un noyau de base « minimaliste » auquel se greffent fonctionalités optionnelles et pilotes 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Modules du noyau Linux Module : élément du noyau pouvant être chargé et déchargé à la volée  Modules chargés et déchargés à la volée, par exemple lors d’activation de périphériques  Modules souvent utilisés pour implémenter pilotes de périphériques  Rapproche Linux du fonctionnement d’un micro-noyau  Permet d’avoir un noyau de base « minimaliste » auquel se greffent fonctionalités optionnelles et pilotes Module Linux est un code binaire comprenant routines, données et points d’entrée et de sortie 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Hello, World ! d’un module de noyau Tiré de Robert Love. Linux kernel development. Addison-Wesley, 2010. 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Hello, World ! d’un module de noyau Tiré de Robert Love. Linux kernel development. Addison-Wesley, 2010. 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Interface de modules Fonctions statiques d’initialisation et de terminaison  Signature fonction d’initialisation : static int _ _init nomfunctioninit(void)  Appelé lors du chargement du module  Utilisé pour activer routines et données pertinentes provenant du module  Enregistré par la macro module_init  Signature fonction terminaison : static void _ _exit nomfonctionexit(void)  Appelé lorsque module est déchargé  Permet de retirer élément spécifique au module du noyau  Enregistré par la macro module_exit  Macros _ _init et _ _exit utiles pour préciser que symboles actifs seulement lors initialisation / terminaison du module 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Interface de modules Fonctions statiques d’initialisation et de terminaison  Signature fonction d’initialisation : static int _ _init nomfunctioninit(void)  Appelé lors du chargement du module  Utilisé pour activer routines et données pertinentes provenant du module  Enregistré par la macro module_init  Signature fonction terminaison : static void _ _exit nomfonctionexit(void)  Appelé lorsque module est déchargé  Permet de retirer élément spécifique au module du noyau  Enregistré par la macro module_exit  Macros _ _init et _ _exit utiles pour préciser que symboles actifs seulement lors initialisation / terminaison du module Macros de description du noyau  MODULE_LICENSE : défini licence du module  Si module n’est pas GPL, noyau est considéré « teinté » et certains symboles uniquement GPL ne peuvent pas être accédés  MODULE_AUTHOR et MODULE_DESCRIPTION : à titre informatif seulement 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Compilation et chargement de modules Modules compilés comme fichier objet  Compilation comme fichier .o, avec en-tête du noyau  Traitement post-compilation nécessaire pour générer fichier .ko, avec informations spécifiques du noyau  Détails sur compilation de modules donnés dans la séance de TP 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Compilation et chargement de modules Modules compilés comme fichier objet  Compilation comme fichier .o, avec en-tête du noyau  Traitement post-compilation nécessaire pour générer fichier .ko, avec informations spécifiques du noyau  Détails sur compilation de modules donnés dans la séance de TP Installation des modules  Modules maison (fichiers .ko) dans répertoire /lib/modules/$(KERNELRELEASE)/extra/ 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Compilation et chargement de modules Modules compilés comme fichier objet  Compilation comme fichier .o, avec en-tête du noyau  Traitement post-compilation nécessaire pour générer fichier .ko, avec informations spécifiques du noyau  Détails sur compilation de modules donnés dans la séance de TP Installation des modules  Modules maison (fichiers .ko) dans répertoire /lib/modules/$(KERNELRELEASE)/extra/ Chargement de modules  Commande modprobe permet chargement de module dans noyau  Effectue vérifications d’usage sur dépendances  Alternative : commande insmod (ne vérifie pas dépendances) 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Compilation et chargement de modules Modules compilés comme fichier objet  Compilation comme fichier .o, avec en-tête du noyau  Traitement post-compilation nécessaire pour générer fichier .ko, avec informations spécifiques du noyau  Détails sur compilation de modules donnés dans la séance de TP Installation des modules  Modules maison (fichiers .ko) dans répertoire /lib/modules/$(KERNELRELEASE)/extra/ Chargement de modules  Commande modprobe permet chargement de module dans noyau  Effectue vérifications d’usage sur dépendances  Alternative : commande insmod (ne vérifie pas dépendances) Décharger modules  Commande modprobe -r  Alternative : rmmod (ne vérifie pas dépendances) 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Compilation et chargement de modules Modules compilés comme fichier objet  Compilation comme fichier .o, avec en-tête du noyau  Traitement post-compilation nécessaire pour générer fichier .ko, avec informations spécifiques du noyau  Détails sur compilation de modules donnés dans la séance de TP Installation des modules  Modules maison (fichiers .ko) dans répertoire /lib/modules/$(KERNELRELEASE)/extra/ Chargement de modules  Commande modprobe permet chargement de module dans noyau  Effectue vérifications d’usage sur dépendances  Alternative : commande insmod (ne vérifie pas dépendances) Décharger modules  Commande modprobe -r  Alternative : rmmod (ne vérifie pas dépendances) Autre commandes pertinentes  modinfo : information sur un module  lsmod : lister modules actuellement chargés 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.1- Modules de noyau Linux Chargement / déchargement de module pilote de disque Tiré de Jonathan Corbet, Alessandro Rubini et Greg Kroah-Hartman. Linux device drivers. O’Reilly Media, Inc., 2005. CC BY-SA 2.0 https ://lwn.net/Kernel/LDD3/ 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.2- Développer pour le noyau 5.2.2- Développer pour le noyau 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.2- Développer pour le noyau Développer pour le noyau Développer pour le noyau est différent du développement d’applications usuelles  Pas d’accès aux en-têtes et à la librairie C standard  Pas de protection de la mémoire  Exécution d’opérations à virgule flottante peu aisées  Pile d’appels de petite taille (fixe)  Synchronisation et concurrence sont omniprésentes (interruption, préemption, multiprocesseur) 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.2- Développer pour le noyau Développer pour le noyau Développer pour le noyau est différent du développement d’applications usuelles  Pas d’accès aux en-têtes et à la librairie C standard  Pas de protection de la mémoire  Exécution d’opérations à virgule flottante peu aisées  Pile d’appels de petite taille (fixe)  Synchronisation et concurrence sont omniprésentes (interruption, préemption, multiprocesseur) Si on produit un bogue dans du code noyau, tout peut arriver  On travaille de « l’autre côté du miroir », protections offertes par le noyau ne sont plus présentes  Noyau ne peut pas s’exécuter ligne à ligne dans un débogueur 5- Noyau Linux et Développement de Pilotes 5.2- Développement de Pilotes 5.2.2- Développer pour le noyau Développer pour le noyau Développer pour le noyau est différent du développement d’applications usuelles  Pas d’accès aux en-têtes et à la librairie C standard  Pas de protection de la mémoire  Exécution d’opérations à uploads/Finance/ developpement-des-pilotes-seance-8.pdf

  • 20
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Jan 08, 2022
  • Catégorie Business / Finance
  • Langue French
  • Taille du fichier 9.1633MB