Quelle est la meilleure façon d’apprendre le développement de pilotes de périphériques sous Linux ou sur toute autre plate-forme ? Existe-t-il de bons livres/kits matériels/logiciels à faire soi-même ?


Je vous seconde en disant que Linux est le meilleur choix pour apprendre le développement de pilotes de périphériques puisque vous avez beaucoup d'exemples (le noyau Linux ne représente qu'un petit pourcentage du code source total, la plupart sont des pilotes de périphériques), beaucoup de périphériques supportés par Linux, de la documentation et une communauté mondiale bien établie.

Pour apprendre le développement de pilotes de périphériques, comme toute autre nouvelle connaissance, la meilleure approche pour moi est d'apprendre d'abord la théorie et ensuite de faire de la pratique.


Si vous ne'connaissez pas les systèmes d'exploitation, je vous recommande "Willam Stalling's OS book" [1]. Ce livre a une approche plus orientée vers le matériel, contrairement à d'autres livres sur les OS qui se concentraient davantage sur les algorithmes et les structures de données utilisés dans les systèmes d'exploitation.

Après avoir un aperçu de haut niveau des systèmes d'exploitation, vous devez apprendre le développement du noyau Linux. Le livre de Robert Love's [2] est pour moi le meilleur sur le sujet. Vous pouvez apprendre non seulement le développement du noyau Linux, mais aussi les motivations derrière les décisions techniques qui mènent à la conception.

Puis vous devez apprendre le développement des pilotes de périphériques sur Linux, deux livres qui sont très bons sont "Linux Device Drivers" [3] et "Essential Linux Device Drivers" [4]. Ces deux livres sont complémentaires. Le premier enseigne comment écrire des pilotes de périphériques virtuels pour les périphériques basés sur la mémoire, de sorte que vous pouvez essayer les exemples sans avoir besoin de matériel spécial. Alors que le second vous montre comment les pilotes de périphériques pour les périphériques réels sont réellement écrits. Je maintiens un dépôt à jour avec tous les exemples LDD3 afin que vous puissiez compiler et tester sur des noyaux récents [5].

Une fois que vous avez la théorie, vous pouvez commencer par la pratique en écrivant des pilotes de périphériques réels. Vous avez besoin d'un matériel qui n'est pas encore supporté sous Linux. La bonne nouvelle est que vous avez probablement déjà l'un de ces périphériques. Avec la popularité de la plate-forme Android, est très probable que vous possédez un appareil Android.

Même si Android est un système d'exploitation basé sur Linux, Google par une décision de conception a bifurqué le noyau Linux et a ajouté certaines API [6] qui n'existent pas sur le noyau Linux. Ces API sont utilisées par les pilotes de périphériques et pour cette raison, un développeur doit choisir d'écrire un pilote de périphérique pour Android ou Linux.

Donc, le portage des pilotes de périphériques Android vers Linux est une excellente occasion d'apprendre les compétences de développement de pilotes de périphériques, le processus de développement du noyau Linux et comment travailler avec la communauté Linux tout en faisant quelque chose d'utile.

[1] : http://williamstallings.com/OS/
[2] : http://blog.rlove.org/2010/07/linux-kernel-development-third-edition.html
[3] : http://lwn.net/Kernel/LDD3/
[4] : http://elinuxdd.com/
[5] : https://github.com/martinezjavier/ldd3
[6] : http://lwn.net/Articles/416690/

Les pilotes de périphériques Android peuvent être portés sur Linux.