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
Documents similaires
-
20
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 08, 2022
- Catégorie Business / Finance
- Langue French
- Taille du fichier 9.1633MB