Existe-t-il des ressources pour apprendre à écrire des pilotes?

26

J'ai une bonne expérience dans la conception de matériel et de systèmes embarqués en général, mais je n'ai jamais écrit de pilote pour un système d'exploitation.

J'aimerais savoir s'il existe de bons guides, de préférence en ligne, bien que de bons livres m'intéressent, qui me donneront un bon départ sur ce que je dois savoir pour concevoir et implémenter des pilotes pour un système d'exploitation.

Il y aura probablement des gens qui me tireront dessus, et bien que j'aimerais voir un bon guide quel que soit le système d'exploitation sur lequel il est basé, j'aimerais voir un guide basé sur Windows, principalement en raison du fait que la plupart des gens Je vendrais un produit aurait des fenêtres.

Veuillez me faire savoir s'il y a des informations supplémentaires que je peux ajouter pour que cela soit plus clair.

Kortuk
la source
1
Grande question, je m'intéresse aussi à celui-ci.
M. Hedgehog
J'ai accepté la réponse la plus large. Pour obtenir des informations sur chaque système d'exploitation, j'ai aimé la réponse. La réponse de Joby était excellente, spécifique à Linux. J'ai eu du mal à décider.
Kortuk

Réponses:

10

La plupart de ma récente expérience dans l'écriture de pilotes de système d'exploitation réels a été avec Linux, et la meilleure référence IMO est Linux Device Drivers, 3rd Edition de Jonathan Corbet, Alessandro Rubini et Greg Kroah-Hartman (2005), qui a déjà été mentionné. Il est disponible sur Amazon , Safari Books On-Line et également téléchargement gratuit .

Quelques autres livres sur le même sujet sont Essential Linux Device Drivers , de Sreekrishnan Venkateswaran (2008) (également disponible sur Safari Books Online ) et Writing Linux Device Drivers: a guide with exercices (Volume 3) by Dr Jerry Cooperstein (2009).

Pour les pilotes de périphériques Windows, le dernier livre sur le sujet (publié il y a deux semaines) semble être Windows 7 Device Driver , par Ronald D. Reeves, Ph.D. (2010). Il est également disponible sur Safari Books Online .

Un livre plus ancien, qui couvrirait Windows XP, est: Programmation du modèle de pilote Microsoft Windows, deuxième édition , par Walter Oney (2002). Il est également disponible sur Safari Books Online .

Un autre livre, qui semble épuisé mais disponible sur Safari Books Online, est Developing Drivers with the Windows Driver Foundation , par Penny Orwick et Guy Smith (2007). Je suppose que cela couvrirait Windows Vista.

Enfin, Microsoft propose des pointeurs vers de nombreux blogs, etc. sur le développement de pilotes.

tcrosley
la source
Merci, je suggère que vous ayez également créé un lien vers "Pilotes de périphérique Linux". Sinon, très complet.
Kortuk
11

Un bon pilote encapsule les capacités du matériel et les met à la disposition du système d'exploitation / des applications de manière naturelle.

La meilleure façon de faire cela dépend beaucoup du système d'exploitation que vous ciblez et du type de matériel auquel le pilote est destiné.

Mon expérience est entièrement avec Linux et OSen personnalisé en temps réel.

Pour Linux, je vous recommande de lire les pilotes de périphériques Linux . C'est une bonne introduction aux différentes saveurs des pilotes Linux et aux abstractions que le système d'exploitation leur fournit.

Les périphériques tels que les ports série où les données sont lues de manière séquentielle sont généralement gérés par des pilotes de périphériques de caractères avec un nœud de périphérique dans l'espace utilisateur pour la lecture des applications. catpeut lire à partir de ceux-ci.

Les périphériques à accès aléatoire comme le stockage flash et les disques durs sont gérés par des périphériques blocs. ddpeut y accéder. Pour un bon exemple, jetez un œil au système Linux MTD .

Les pilotes qui manipulent le matériel à bas niveau devront presque certainement être implémentés dans l'espace du noyau. Vous pouvez choisir de créer un module noyau chargeable à l'exécution ou de placer votre code de manière statique dans le noyau linux.

Les pilotes qui s'appuient sur les pilotes génériques existants, comme USB, peuvent être écrits dans l'espace utilisateur. En utilisant, par exemple, libusb .

Toby Jaffey
la source
4
Linux Device Drivers est un bon livre. Malheureusement, ces choses sont très spécifiques au système d'exploitation. Linux est probablement le plus facile à écrire, car il y a déjà tellement de pilotes dans l'arborescence source pour référence. Si vous avez écrit du code intégré pour piloter les périphériques d'un microprocesseur, vous avez probablement une bonne compréhension des principes fondamentaux du pilote de périphérique.
markrages
ouais, je retire mes commentaires. ma faute.
Kortuk
1
Comme l'ont indiqué les marquages, les tripes d'un pilote, qui contrôle le matériel réel, seront les mêmes, que vous ayez un système d'exploitation ou non. Les principales différences lors de l'écriture de pilotes sont 1) les interfaces doivent s'insérer dans un modèle standard (par exemple, ouvrir, fermer, lire, écrire, ioctl) pour le système d'exploitation, et 2) la méthode dans laquelle le pilote est installé et activé.
tcrosley
1
@tcrosley, Si vous avez beaucoup d'informations sur ces spécificités, j'aimerais voir une réponse à ce sujet.
Kortuk
3

Je n'ai aucune expérience dans ce domaine, mais je vais donner mes deux cents.

Vous pouvez commencer ici http://www.osr.com/index.html ou ici https://www.osronline.com/index.cfm

Ici au Brésil, nous avons un bon blog sur cette question. Il est écrit en portugais et en anglais. Malheureusement, la plupart des articles sont en portugais.

Il y a un article en portugais sur les livres dans ce blog: http://translate.google.com.br/translate?hl=pt-BR&ie=UTF-8&sl=pt&tl=en&u=http://driverentry.com.br/ blog /% 3Fp% 3D825 & twu = 1

J'espère avoir un peu aidé

Daniel Grillo
la source
Cela aidera beaucoup si je pose la question: "Où puis-je apprendre le portugais en ligne à temps pour apprendre à écrire des pilotes?" Merci d'avoir aidé.
Kortuk
2
Ne vous inquiétez pas d'apprendre le portugais. Les liens sur le développement de lecteurs que j'ai transmis sont en anglais. Même DriveEntry est également écrit en anglais. Malheureusement, l'article sur les livres est en portugais, mais les livres sont en anglais. Et ce qui compte le plus, ce sont les livres, pas le courrier.
Daniel Grillo