Maison  >  Article  >  Tutoriel système  >  Pilote Linux PWM

Pilote Linux PWM

王林
王林avant
2024-02-05 15:40:031223parcourir

1. Aperçu

Cet article fournira une introduction approfondie au cadre de pilote PWM (Pulse-Width Modulation) de Linux, y compris ses principes de mise en œuvre, ses méthodes d'ajout de pilote et ses méthodes de débogage pour aider les développeurs à mieux comprendre et utiliser cette fonction.

L'exemple de version du noyau Linux présenté dans cet article est la 6.2.8.

2.Principe

La technologie PWM, en tant que technologie de modulation couramment utilisée, peut modifier le cycle de service du signal effectif en ajustant la largeur temporelle de haut niveau de la forme d'onde périodique, permettant ainsi de contrôler l'alimentation de l'appareil. Les domaines d'application PWM courants incluent le réglage de la luminosité du rétroéclairage de l'écran, le contrôle de la vitesse du moteur et le contrôle de la vitesse du ventilateur. Le noyau Linux prend en charge le cadre de pilote PWM et fournit le code principal du cadre de pilote PWM et le code d'interface sysfs en faisant abstraction des types de données de structure du contrôleur PWM et des signaux PWM. Les développeurs peuvent utiliser ce framework de pilotes pour ajouter facilement leurs propres pilotes de contrôleur PWM spécifiques et utiliser l'interface sysfs pour le débogage fonctionnel.

Pilote Linux PWM

Les développeurs de pilotes peuvent concevoir une structure de contrôleur PWM dédiée selon les besoins, en utilisant la structure struct pwm_chip comme variable membre. Ce qui suit est un exemple, défini dans le pilote ./drivers/pwm/pwm-ab8500.c.

Pilote Linux PWM

(2) structure struct pwm_ops, y compris la fonction de fonctionnement du contrôleur PWM. Les deux fonctions de base qui doivent être implémentées par les développeurs de pilotes sont la fonction apply et la fonction get_state ; la fonction apply est utilisée pour configurer le contrôleur PWM, y compris la configuration de l'état d'activation, de la période, du rapport cyclique, de la polarité, etc. du signal PWM. ; la fonction get_state est utilisée pour obtenir l'état initial du signal de canal PWM spécifié lors de l'enregistrement du contrôleur PWM, y compris l'état d'activation, la période, le rapport cyclique, la polarité, etc.

Pilote Linux PWM

(3) structure struct pwm_device, représentant le signal PWM émis par le contrôleur PWM.

Pilote Linux PWM

3.3 Fonction de base du framework de pilotes

(1) fonction pwmchip_add. Utilisé pour enregistrer un nouveau périphérique contrôleur PWM. Défini dans ./drivers/pwm/core.c.

Pilote Linux PWM

(2) fonction pwmchip_remove. Utilisé pour supprimer un périphérique de contrôleur PWM. Défini dans ./drivers/pwm/core.c.

Pilote Linux PWM

Méthode d'implémentation typique du pilote 3.4

(1) Résumé

Le fichier source du pilote PWM se trouve dans le chemin ./drivers/pwm. Le développeur du pilote doit ajouter le fichier source correspondant. La conception du fichier source peut faire référence au code du pilote d'autres fabricants. En vous référant au style de dénomination du code d'origine, vous pouvez nommer le fichier source du pilote nouvellement ajouté pwm-xx.c, nommer la sonde et supprimer les fonctions respectivement xx_pwm_probe et xx_pwm_remove, et définir la structure du contrôleur PWM comme struct xx_pwm_chip. Les fichiers dans le chemin ./drivers/pwm sont les suivants.

Pilote Linux PWM

(2) appliquer la fonction et la définition de la fonction get_state

Selon le manuel du contrôleur PWM, la fonction apply et la fonction get_state sont définies par le développeur du pilote.

(3)Définition de la fonction xx_pwm_probe

La méthode d'implémentation de la fonction xx_pwm_probe est la suivante : initialisez d'abord la variable struct xx_pwm_chip de la structure du contrôleur PWM, puis appelez la fonction principale du cadre de pilote PWM pwmchip_add pour enregistrer un nouveau périphérique de contrôleur PWM.

(4) définition de la fonction xx_pwm_remove

La fonction

xx_pwm_remove est implémentée en appelant la fonction principale du cadre de pilote PWM pwmchip_remove pour supprimer un périphérique de contrôleur PWM.

4. Comment ajouter un pilote

4.1 Ajouter des fichiers sources du pilote

Suivez la méthode décrite dans la section 3.4, écrivez le fichier source du pilote pwm-xx.c et ajoutez-le au chemin ./drivers/pwm.

4.2 ajoute le support de la compilation

(1) Modifiez le fichier Kconfig sous le chemin ./drivers/pwm et ajoutez les options de configuration du pilote PWM ajoutées.

(2) Modifiez le fichier Makefile dans le chemin ./drivers/pwm et ajoutez l'option de compilation de pwm-xx.c.

(3) Dans l'interface memuconfig, activez le pilote PWM ajouté. L'interface de configuration est la suivante.

Pilote Linux PWM

4.3 Ajouter un nœud d'arborescence de périphériques de contrôleur PWM

Ajoutez un nœud d'arborescence de périphériques de contrôleur PWM dans l'arborescence des périphériques. Les propriétés de base de ce nœud incluent la compatibilité, les registres et le nombre de cellules #pwm. Ajoutez des interruptions, des horloges, des réinitialisations et d'autres propriétés si nécessaire.

Pour la méthode de conception de l'arborescence des périphériques du contrôleur PWM, veuillez vous référer à ./Documentation/devicetree/bindings/pwm.

Vous trouverez ci-dessous un exemple de nœud d'arborescence de périphériques de contrôleur PWM. Les documents de référence sont les suivants :

./Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.yaml.

Pilote Linux PWM

5.Méthode de débogage

Utilisez l'interface sysfs pour déboguer fonctionnellement le pilote PWM. Des exemples des principales commandes de débogage sont les suivants.

(1) Afficher le nœud du contrôleur PWM

ls /sys/class/pwm/pwmchip0

(2) Activez le signal du canal PWM spécifié

echo n > /sys/class/pwm/pwmchip0/export

//n est le numéro de la chaîne

(3) Définir la période du signal PWM

echo pvalue > /sys/class/pwm/pwmchip0/pwm0/period

//pvalue est la valeur de la période

(4) Définir le cycle de service du signal PWM

echo dvalue > /sys/class/pwm/pwmchip0/pwm0/duty_cycle

//dvalue est la valeur effective de la largeur du niveau

(5) Activer un certain signal de canal PWM

echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable

(6) Désactivez un certain signal de canal PWM

echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer