Je voudrais écrire un pilote de périphérique Linux pour un périphérique matériel réel. Quels périphériques Raspberry Pi conviennent bien? Fondamentalement, j'ai besoin des éléments suivants:
Elle doit être suffisamment petite pour un débutant (quelques mois tout au plus, mieux quelques semaines).
La fiche technique doit être disponible. Au début, je pensais à l'adaptateur USB-Ethernet, mais il semble que sa fiche technique soit très limitée.
Des idées? Peut être quelque chose comme faire fonctionner la console série sur GPIO?
Réponses:
Il peut être difficile d'apprendre à écrire des pilotes lors de l'interfaçage avec des périphériques et / ou des bus compliqués. Pour cette raison, je recommanderais d'utiliser des périphériques simples et bien connus (en ignorant l'implémentation existante de leurs pilotes dans le noyau) comme les périphériques I²C / SPI qui sont généralement utilisés avec des microcontrôleurs. Par exemple, vous pouvez trouver n'importe quel appareil "pris en charge" par la communauté Arduino (ce qui signifie qu'il existe une bibliothèque / documentation pour cela) et essayer de l'utiliser avec RaspberryPi.
Si cela ne suffit pas ou si vous ne voulez pas acheter trop de matériel, vous pouvez en créer un vous-même. Procurez-vous simplement un microcontrôleur (comme atmega ou quelque chose comme ça), créez un programme pour qu'il devienne un périphérique, puis essayez de vous connecter avec des pilotes Linux. De cette façon, vous pouvez facilement créer des programmes qui émuleront différentes classes d'appareils. Et puisque vous écrirez vous-même votre "firmware", cela vous aidera à déboguer les problèmes.
Vous avez besoin de certaines compétences en programmation de microcontrôleur pour cela, mais il n'est pas difficile d'apprendre la programmation avec Arduino et je crois que ce sont des connaissances utiles pour le programmeur de pilotes de toute façon.
la source
BCM2835 ARM Peripherals
document. Mais rappelez-vous que pour l'utiliser, vous devez d'abord désactiver le pilote existant dans le noyau.Personnellement, je commencerais par un appareil très simple, comme une ou plusieurs LED connectées directement aux broches GPIO.
Vous pouvez soit acheter un appareil prêt à être branché, soit câbler le vôtre.
La raison pour laquelle je suggère cela est que le débogage des pilotes est généralement beaucoup plus difficile qu'un programme normal, donc un simple défi pour commencer est utile, vous pouvez également utiliser ce code comme méthode de débogage pour des appareils plus complexes (statut à une broche GPIO à fixer à un oscilloscope) où le timing est important.
S'il est intéressant de noter qu'un pilote de noyau pour LedBorg est disponible ici , la source devrait être un exemple assez simple pour piloter des broches GPIO à intervalles réguliers.
la source
Le "périphérique" le plus simple pour lequel vous pouvez écrire un pilote matériel (si le développement du pilote matériel est votre truc) peut également être aussi simple qu'une LED (j'ai ajouté des guillemets parce que techniquement une LED n'est pas un périphérique mais c'est toujours un morceau de comme l'a suggéré @PiBorg.
D'autres choix seraient des dispositifs / composants faciles à interfacer comme des photorésistances, des capteurs infrarouges passifs (court: PIR), des capteurs de température, des ventilateurs PC (de préférence un ventilateur à 4 fils qui vous permet non seulement de surveiller mais aussi de contrôler le RPM), matrices de points LED et ainsi de suite. Fondamentalement, ces appareils simples vous permettront d'avoir le minimum de matériel (de sorte que vous puissiez voir et toucher ce que vous avez réellement accompli) et en même temps, vous pouvez en apprendre davantage sur de nombreux sujets qui sont utilisés pour des appareils beaucoup plus complexes où la complexité vient principalement du protocole qu'ils utilisent.
Sachez également que vous n'avez pas besoin d'aller plus loin pour creuser dans les modules du noyau. Bien sûr, si vous voulez le faire, personne ne vous arrête. :)
Voici un exemple d'interfaçage d'un capteur infrarouge passif (je vais le tester bientôt lorsque mon PIR sera livré: 3). Vous pouvez prendre cela et commencer à creuser plus profondément dans le monde du noyau Linux afin de voir comment vous pouvez par exemple créer un pilote de noyau, qui fonctionne avec le PIR.
la source