Article HowTo pour développer des pilotes de périphériques Linux embarqués en tant que modules de noyau. Tout le contenu de cet article peut être exécuté sur Raspberry Pi.
J'ai créé des pilotes de périphériques jusqu'à présent, mais je les ai insérés manuellement à chaque fois. Cela peut être bien pendant le développement, mais lorsque je l'incorpore réellement dans le produit, je souhaite qu'il soit automatiquement chargé au démarrage du noyau.
Jusqu'à présent, j'ai construit le fichier MyDeviceModule.ko dans mon répertoire de développement. Copiez-le dans l'emplacement officiel du module du noyau. Cet emplacement dépend de la version du noyau, alors récupérez-le avec ʻuname. Après cela, vous devez mettre à jour les informations de dépendance du module du noyau. Pour ce faire, utilisez la commande
depmod`.
sudo cp MyDeviceModule.ko /lib/modules/$(uname -r)/kernel/drivers/.
sudo depmod -ae
Avec la copie et les paramètres ci-dessus, vous pouvez maintenant charger le pilote de périphérique créé avec modprobe MyDeviceModule
de n'importe où. Ce n'est pas grave si vous décrivez cela dans le script qui est exécuté au démarrage (par exemple, le script rc). Je pense qu'il existe différentes dépendances d'environnement, mais dans Raspeye, il semble que le nom du module devrait être décrit dans / etc / modules-load.d / modules.conf
. En fait, je pense que cela est décidé en tenant compte de la dépendance avec d'autres modules et de la vitesse à laquelle vous voulez qu'il se charge en fonction des spécifications du produit.
sudo bash -c 'echo MyDeviceModule >> /etc/modules-load.d/modules.conf'
Si vous redémarrez et regardez le journal avec dmesg, vous pouvez voir que ce pilote de périphérique est chargé au démarrage.
dmesg
[ 7.595531] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 7.955417] usb 1-1.3: reset high-speed USB device number 4 using dwc_otg
[ 8.097012] ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 5390, rev 0502 detected
[ 8.124187] MyDeviceModule: loading out-of-tree module taints kernel.
[ 8.131765] mydevice_i2c_probe
[ 8.131785] slave address = 0x18
[ 8.132270] id = 0x33
[ 8.173190] ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 5370 detected
[ 8.224829] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[ 8.231902] usbcore: registered new interface driver rt2800usb
[ 11.534982] Adding 102396k swap on /var/swap. Priority:-1 extents:1
Dans le cas du pilote de périphérique qui prend en charge l'arborescence de périphériques créée la dernière fois, le noyau chargera automatiquement MyDeviceModule.ko sans éditer / etc / modules-load.d / modules.conf
et le charger explicitement. Je vais. Il semble que cela soit dû au fait que le noyau recherche et charge automatiquement le pilote de périphérique correspondant au périphérique enregistré dans l'arborescence des périphériques.
Enfin c'est fini! !! Je suis content d'avoir fini cette année ~
Pour une raison quelconque, j'y ai soudainement pensé et j'ai posté des articles sur les pilotes de périphériques Linux 12 fois au total pendant environ 10 jours. J'ai l'intention de créer le contenu pour que les débutants, y compris moi-même, puissent le comprendre tout en l'essayant. Il s'agit plutôt d'un enregistrement de ce que le débutant lui-même a étudié au cours des deux dernières semaines.
Par conséquent, je pense qu'il y a plusieurs pièces manquantes. Par exemple, le contrôle exclusif doit être utilisé lors de l'accès aux variables, mais il a été omis. Aussi, avant de traduire l'adresse, je devrais vérifier si l'adresse est accessible, mais j'ai également omis cela. Celles-ci ont été intentionnellement omises par souci de clarté dans le code et la description. Cependant, en plus de cela, je pense qu'il y a beaucoup d'erreurs qui me manquent en raison de mon manque de connaissances et de compréhension. J'espère que vous pourrez le souligner de plus en plus dans les commentaires.
Le contenu décrit dans cette série n'est qu'une petite partie du pilote de périphérique Linux. De plus, la méthode et les règles de mise en œuvre changent chaque jour. Vous devez toujours lire le code source et la documentation Linux pour obtenir les informations les plus récentes. Nous espérons que cette série servira de tremplin pour franchir une telle étape.
Enfin, nous tenons à exprimer notre profonde gratitude à M. Yutaka Hirata pour avoir écrit "Linux Device Driver Programming". On dit souvent que vous pouvez lire le code source et les documents, mais au début, les livres qui ont été expliqués en japonais de manière facile à comprendre étaient très utiles.
http://elixir.free-electrons.com/linux/v4.14/source https://people.freedesktop.org/~narmstrong/meson_drm_doc/index.html
Recommended Posts