Développement de pilotes Linux

L'apprentissage des drivers Linux se base généralement sur les précédents. Bien sûr, vous n'avez pas besoin d'écrire une excellente application pour apprendre le pilote, mais vous devez toujours être capable d'écrire l'application de base, afin de pouvoir déboguer le pilote facilement. Ensuite, parlez grossièrement de l'ordre d'apprentissage.

(1) Programme planche nue

En fait, le programme de la carte nue n'est pas différent du programme du microcontrôleur, et ils gèrent tous directement les registres. Alors pourquoi avez-vous besoin d'apprendre ce contenu ? En fait, c'est pour jeter les bases plus tard, car le pilote Linux est le cadre du pilote Linux plus le registre d'exploitation. Et cette étape nous sera également très utile pour visualiser le schéma de circuit et la fiche technique.

(2) Portage Uboot

Uboot appartient en fait à la couche système, mais actuellement, tout le monde dans l'industrie est divisé en couche inférieure et couche d'application, de sorte que ces couches système sont généralement classées comme la couche inférieure, donc les ingénieurs pilotes doivent généralement le faire. L'objectif principal d'Uboot est de démarrer le noyau.Bien sûr, Uboot aura également son propre pilote (le pilote ici est différent du pilote du noyau et est indépendant). En cours d'apprentissage, en plus de repiquer étape par étape selon les tutoriels d'autres personnes, vous pouvez également trouver une autre version d'Uboot par vous-même, puis la repiquer lentement vous-même, ce sera très intéressant.

(3) Portage du noyau Linux

Le portage du noyau est similaire au portage Uboot, tous deux basés sur des architectures de puces spécifiques. Maintenant, le noyau devient de plus en plus parfait, et l'usine de puces d'origine a soumis son propre code au noyau, donc lentement, les ingénieurs non originaux transplantent de moins en moins cette pièce. Mais j'espère toujours pouvoir trouver une version à repiquer par moi-même pendant le processus d'apprentissage, j'apprendrai beaucoup en vérifiant les informations et en repiquant. Il est recommandé à ceux qui ont du temps et de l'énergie d'étudier en profondeur le noyau Linux, ce qui sera d'une grande aide pour l'écriture des pilotes.

(4) Créer un système de fichiers racine

Le système de fichiers racine est relativement simple. Le système de fichiers racine intégré utilise généralement busybox, qui est généralement configuré, compilé, produit et empaqueté. Il appartient aussi au système.

(5) Pilote de périphérique de caractères

Les périphériques de caractères sont les plus basiques, comme RTC, audio et LCD sont tous des périphériques de caractères. Il ne s'agit pas seulement de boutons et de voyants. Bien que nous aimions tous commencer par eux lors de l'apprentissage, c'est parce qu'ils sont simples et n'impliquent pas beaucoup de connaissances sur l'appareil lui-même. De cette façon, nous accorderons plus d'attention à l'apprentissage du cadre de conduite lui-même lorsque nous étudierons. Dans le processus d'apprentissage des pilotes de périphériques de caractères, en plus de l'ouverture, de la lecture, de l'écriture, de l'ioctl, de la fermeture de base, vous devez également apprendre la concurrence (poids atomique, verrouillage de rotation, mutex, etc.), les E/S bloquantes et non bloquantes, la notification asynchrone et les E/S asynchrones, etc., et enfin il y en a une très importante qui est l'interruption. Si vous vissez l'une de ces choses, vous pouvez les apprendre pendant longtemps. Des choses comme la concurrence, le blocage et les E/S asynchrones sont également utilisées dans d'autres pilotes de périphériques, vous devez donc bien les apprendre à ce stade.

(6) Architecture du pilote

Peut-être que beaucoup de gens continueront à apprendre les pilotes de périphérique de bloc et de périphérique réseau immédiatement après avoir appris les pilotes de périphérique de caractère. Mais je pense qu'il est plus facile d'être touché en apprenant ces choses en ce moment. Et je pense qu'il faut d'abord comprendre un type, puis aller vers les plus compliqués, ce qui améliorera la confiance et sera plus utile pour l'apprentissage.
L'architecture de pilote mentionnée ici est le modèle "pilote de périphérique de bus". Plate-forme généralement maître, spi, i2c et autres bus. La plate-forme est un bus virtuel, qui est généralement utilisé par les contrôleurs, ainsi que des voyants et des boutons qui ne sont pas connectés à un bus spécifique, mais utilisent également la plate-forme. Le but de ce modèle est de séparer la partie matérielle afin que le pilote puisse être réutilisé.
Dans ce processus, nous pouvons modifier le pilote de périphérique de caractères ci-dessus pour utiliser le modèle "pilote de périphérique de bus". À ce stade, nous pouvons essentiellement traiter de nombreux pilotes de capteur.

(7) Bloquer le pilote de périphérique et le pilote de périphérique réseau

Les périphériques de bloc sont généralement des périphériques de stockage, tels que des disques, MMC, FLASH, etc. Linux définit un grand nombre d'interfaces de structure et de fonction pour nous permettre de remplir les appels. Il en va de même pour les périphériques réseau, Linux encapsule la structure net_device, puis remplissons l'enregistrement. Un grand nombre de pilotes sont comme ça.Le système Linux protège de nombreux détails, ce qui nous permet de nous concentrer sur le contrôle des périphériques, la lecture et l'écriture. Tels que RTC, LCD, etc., nous n'avons besoin d'utiliser que la structure rtc_device pour enregistrer un périphérique RTC. Les périphériques réseau actuels sont généralement divisés en une structure MAC + PHY, c'est-à-dire que la puce principale possède un contrôleur MAC, puis une puce PHY externe est installée. Comme le premier DM9000, MAC et PHY sont intégrés ensemble.

(8) Chaque sous-système d'entraînement

Il existe de nombreux sous-systèmes de pilotes dans Linux, tels que le RTC mentionné ci-dessus, Linux fournit la couche centrale RTC et LCD fournit FrameBuffer, etc. Il existe également des sous-systèmes d'entrée (entrée) tels que la souris et le clavier. Chaque pilote peut être mangé pendant longtemps et Wifi, Bluetooth, USB, etc. peuvent être touchés à l'avenir. Ces choses nécessitent non seulement des connaissances liées au conducteur, mais nécessitent également beaucoup de connaissances liées au protocole et à l'interface, d'où leur complexité. Ces pilotes complexes seront étudiés en profondeur en cas de besoin ou lorsque le temps sera disponible.

(9) Arborescence des appareils

Pourquoi mettre l'arborescence des appareils à la fin, car vous pouvez vous passer de l'arborescence des appareils, mais depuis que l'arborescence des appareils est apparue, pratiquement tout le monde l'utilise. C'est donc devenu une compétence essentielle pour les ingénieurs d'entraînement. L'introduction de cette chose par Linux a dû être mûrement réfléchie, et nous devons suivre la tendance.
La mise à jour de Linux est très rapide et beaucoup de choses sont itérées, nous devons donc y prêter attention fréquemment. L'architecture du pilote est également mise à jour et vous constaterez souvent que de nombreuses structures sont différentes dans différentes versions.
Livres recommandés :
"LINUX Device Drivers"
"Complete Handbook of Embedded Linux Application Development" "
Detailed Explanation of Linux Device Driver Development - Based on the latest Linux4.0 Kernel"
Suggestion :
achetez une carte pour apprendre. Auparavant, vous pouviez recommander le 2440 de Samsung, mais celui-ci est lentement abandonné. Je recommande donc maintenant le Samsung 210 ou 4412, et l'IMX6 de NXP. Ces puces ont de bonnes performances et peuvent être utilisées pour apprendre Android à l'avenir.

Je suppose que tu aimes

Origine blog.csdn.net/lijiahao1212/article/details/130051925
conseillé
Classement