web-dev-qa-db-fra.com

Programmation du pilote de périphérique du noyau Linux

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.

35
RajKumar Rampelli

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:

  • utilisation d'udev
  • utilisation d'une structure de données du noyau (FIFO)
  • utilisation de la synchronisation du noyau (mutex)
  • utilisation de Sysfs avec des attributs personnalisés
  • options de module pour 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.

49
eepp
12
42n4

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.

2
gertvdijk

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.

2
San

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: -

  1. 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.

  2. 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.

  3. 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.

1
arahan567

meilleur livre pour apprendre la programmation du pilote de périphérique est
"LDD"

1
Imposter