Je veux apprendre la programmation du pilote de périphérique du noyau Linux. Alors, n'importe qui peut-il poster de bonnes pages de tutoriels ou des liens ici. Je suis nouveau dans l'environnement du noyau Linux. Je l'ai cherché mais je ne sais pas par où commencer et lequel lire pour comprendre les bases. Merci d'avance.
Cela dépend de vos compétences actuelles. Si vous êtes vraiment nouveau sous Linux, vous devriez peut-être commencer par la programmation du système d'espace utilisateur avec Programmation Linux avancée . Vous aurez une bonne connaissance des appels système Unix et d'autres concepts tels que les signaux, les processus/threads, etc. avec cette ressource gratuite. C'est un must (comprendre l'API de l'espace utilisateur) si vous développez du côté du noyau car le rôle d'un noyau est de fournir des services aux utilisateurs de manière sécurisée.
Sinon, un livre souvent cité est Linux Device Drivers, Third Edition (LDD3). Gardez à l'esprit que cette édition a été écrite au moment de Linux 2.6.10 et que certaines choses ont changé depuis. Cet article montre les différences au fur et à mesure que 2.6 évoluait (jusqu'à 2.6.31, c'est-à-dire donc pas très utile). Je devrais mentionner martinezjavier/ldd , qui contient des exemples de pilotes de LDD3 mis à jour pour les noyaux plus récents (merci à 42n4 pour l'avoir signalé).
Un autre livre intéressant qui n'est pas aussi souvent cité est Essential Linux Device Drivers . Vous ne trouverez pas de version gratuite de celui-ci, mais il présente toujours une approche intéressante. Ce que j'aime dans celui-ci, c'est qu'il couvre de nombreux types d'appareils différents et est à jour à partir de 2.6.24, ce qui est un peu mieux que LDD.
Enfin, un excellent livre sur le noyau lui-même (pas spécifiquement pour les pilotes) est Comprendre le noyau Linux, 3e édition . Cela couvre les fonctionnalités approfondies du noyau et les mécanismes internes. Il est à jour en date du 2.6.11.
En ce qui concerne les tutoriels en ligne, j'ai trouvé cet article sur le blog de Pete est un très bon exemple. Non seulement il montre comment créer un périphérique de caractères (le type de pilote de noyau le plus simple, c'est-à-dire celui avec lequel vous devriez commencer), mais il utilise les fonctionnalités modernes du noyau Linux de manière simple à comprendre, notamment:
insmod
Le plus: il est destiné à Linux 3.0, ce qui signifie qu'il est plus à jour que les autres ressources.
Vous pourriez également aimer cet article sur la façon de créer des entrées Sysfs manuellement, bien que le modèle de périphérique Linux se charge d'enregistrer votre périphérique en tant qu'entrée Sysfs si vous n'avez pas besoin de nœuds ou d'attributs supplémentaires.
Edit : Je dois ajouter que la meilleure façon d'apprendre la vraie programmation des pilotes de périphériques Linux est de regarder les pilotes réels. Il y a des milliers de pilotes dans drivers
. Commencez à lire et à comprendre le concept de simples comme drivers/leds
et vous verrez à quel point c'est gratifiant.
Le site avec des liens très importants: http://elinux.org/Device_drivers
Grand tutoriel avec des exemples réels (se termine par un usbpen formaté avec notre propre système de fichiers - recherchez d'autres articles d'auteur):
Code source du célèbre livre LDD3 porté sur les noyaux les plus récents: https://github.com/martinezjavier/ldd3/
Vidéos:
Peut-être d'autres cours:
Quelques exemples:
Livres (sans mention dans ce fil LDD3):
KernelHacking: http://kernelnewbies.org/KernelHacking
Carte visuelle du noyau linux: http://www.makelinux.net/kernel_map/
Livres Linux et noyau pour les débutants:
Vous pourriez être intéressé par la nouvelle version Linux Driver Templates . Comme son nom l'indique, il fournit des modèles et montre les fonctionnalités Linux fréquemment utilisées pour démarrer rapidement.
Je comprends que c'est une réponse retardée !!
Vous pouvez choisir n'importe quel livre, ce sont de très bons livres suggérés ci-dessus.
Mais vous devez vraiment travailler pratiquement. Essayez d'être impliqué dans le noyau autant que possible.
La plupart du temps, vous devez examiner le code source du noyau lui-même.
Et le document le plus intéressant que vous pouvez trouver dans le dossier Documentation sous l'arborescence du noyau.
La meilleure source est les pages de manuel Linux, mais elles sont quelque peu essentielles à comprendre pour un débutant. La programmation directe des pilotes de périphérique n'est pas une tâche facile. Je vous recommande de parcourir les pointeurs et les structures à travers les livres suivants
Livres C de base 1. Programmation C - Byron gottfried 2. Le langage de programmation C - Dennis Ritchie
Livres intermédiaires 1. Pointeurs sur C Kenneth Reek 2. Expert C Programming Deep Secrets - Linden
En ce qui concerne les pilotes de périphérique, j'ai téléchargé la documentation de la source du noyau au format pdf https://drive.google.com/folderview?id=0B7iRyndFhHldR3hjOHpOZTdKTjA&usp=sharing Vous pouvez télécharger à partir de ce lien.
Principes de base des pilotes de périphérique (programmation en mode utilisateur)
Interface de programmation Linux - Michael Kerrisk Début de la programmation Linux Pilotes de périphérique des éditeurs Wrox (développement du noyau) 1. Développement du noyau Linux - Robert Love 2. Fonctionnalités internes du noyau Linux - m beck
Pilotes de périphériques (programmation des pilotes) 1. Pilotes de périphériques Linux - Troisième édition (téléchargement gratuit disponible pour le noyau 2.6) 2. Pilotes de périphériques Linux essentiels - Venkateswaran
Pour les connaissances de base des pilotes, suivez ce site http://www.tldp.org/LDP/khg/HyperNews/get/devices/devices.html
Mon expérience est Tout d'abord, nous devons acquérir une bonne connaissance de la programmation C, principalement des structures et des pointeurs avant de passer par la programmation du pilote, sinon il sera un peu lourd de comprendre la programmation du pilote.
Venir au démarrage: -
Programmation de l'espace utilisateur Notions de base de la génération gcc de fichiers prétraités, assembleurs et objets à l'aide des commandes gcc analyse des fichiers objets à l'aide de différents outils objet, programmation de base sous linux, threads (verrous, techniques de synchronisation), signaux, processus (fork, exec), temporisateurs (Posix ). Cela vous aidera beaucoup à comprendre les concepts du noyau.
Programmation du noyau Comprendre l'arborescence des sources du noyau, les différentes branches et leur importance, en utilisant ctags et cscope pour parcourir le code source du noyau, cela vous aidera dans la navigation des sources du noyau.
Programmation des pilotes Tout d'abord Apprenez les différentes classes de pilotes, les caractères, les blocs, etc., Ensuite, apprenez les protocoles de l'appareil, la transmission et la réception, le manuel du produit est la meilleure source pour passer par là. Ensuite, commencez à écrire le pilote de caractère simple, par exemple RTC (un périphérique mappé de port), IOAPIC (Un périphérique mappé en mémoire), puis accédez à USB, PCI, Réseau, I2C, SPI etc., si vous voulez de l'aide, vous pouvez trouver le code squelette pour tout cela dans l'arborescence des sources du noyau.
meilleur livre pour apprendre la programmation du pilote de périphérique est
"LDD"