Contrôler les DEL sur Alpine Linux à l'aide de la ligne de commande
Nous avons développé une carte porteuse de module de calcul Raspberry Pi embarquée pour un usage industriel : la PCCB.
Comme vous pouvez le voir, il y a trois LEDs (directement) programmables par l'utilisateur sur le PCCB : USER / INFO / ACT.
Ils sont définis dans l'arbre des périphériques. Par exemple, nous pouvons définir ce qui suit dans notre superposition de l'arbre des périphériques :
//LEDs
fragment@11 {
cible = ;
__overlay__ {
led_act : ledact {
label = "myledact" ;
gpios = ;
linux,default-trigger = "mmc0" ;
};
led_info : ledinfo {
label = "myledinfo" ;
gpios = ;
linux,default-trigger = "cpu" ;
};
led_user : leduser {
label = "myleduser" ;
gpios = ;
linux,default-trigger = "heartbeat" ;
};
};
};
Le fichier source de la superposition de l'arbre des périphériques (.dts) devra être compilé, et produira un fichier .dtbo.
Ce fichier est inclus en tant que superposition dans le fichier config.txt (dans notre cas, il est en fait inclus dans un sous-fichier, usercfg.txt, qui est inclus dans le fichier config.txt).
# Pi Control Carrier Board Overlay (carte de contrôle)
dtoverlay=pi-control-carrier-board
Cela indique au VideoCore OS qui est chargé en premier de transmettre l'arbre des périphériques pour le modèle particulier de Pi, y compris notre superposition au noyau Linux.
Qu'est-ce qu'une arborescence de dispositifs ?
Les dispositifs ARM sont devenus de plus en plus personnalisés et diversifiés par rapport aux dispositifs x86 standard dont les composants étaient standardisés.
Afin d'éviter de recompiler le noyau et de devoir adapter chaque matériel modifié, un système permettant de décrire la disposition du matériel au noyau Linux a été conçu.
L'arbre des périphériques.
Il s'agit d'un concept indépendant du système d'exploitation, car il est chargé dans le noyau du système d'exploitation. Tout système d'exploitation qui le souhaite peut le prendre en charge.
Le noyau Linux recevra l'arbre des périphériques, et saura donc quel périphérique est présent, comment il est connecté, et comment lui parler (les pilotes sont chargés en fonction des indices dans l'arbre des périphériques, par exemple).
Comme un Raspberry Pi n'est pas un matériel statique, mais qu'il existe dans différentes configurations & peut exposer différentes broches, par exemple, et aussi avoir différents add-ons (HATs), un add-on supplémentaire était nécessaire : les superpositions de l'arbre des périphériques.
Ces fichiers permettent de modifier l'arborescence des périphériques, sans avoir à créer une nouvelle arborescence pour chaque combinaison possible de matériel que vous pouvez attacher au Pi / configurer le Pi.
Comment puis-je contrôler les LEDs ?
Ces diodes s'allument dans le système, dans la section /sys/class/leds répertoire :
Comme vous pouvez le voir, un total de quatre LED est exposé ici, dont trois (myledact, myledinfo, myleduser) ont été ajoutées par nous à l'aide de la superposition !
Chacune de ces DEL est un répertoire en soi,
qui vous permet de contrôler la LED.
Rappelez-vous, dans Linux tout est un fichier / parler au noyau est abstrait pour faire des opérations sur le système de fichiers (c'est en fait un paradigme UNIX).
Exécuter
déclenchement du chat
pour la LED.
Vous verrez alors une liste des déclencheurs qui peuvent être définis pour ce produit :
none rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu cpu0 cpu1 cpu2 cpu3 default-on input panic [mmc0]
Notez que le dernier trigger, mmc0 est entre crochets. C'est ce sur quoi la LED est actuellement réglée !
Vous pouvez essayer de le régler sur n'importe quel autre déclencheur en écrivant ce déclencheur sur la LED (si vous avez les droits suffisants). ):
echo "timer" > trigger
Fait clignoter la LED.
Notez que si vous répertoriez à nouveau le répertoire de contrôle des LED, vous verrez des entrées supplémentaires - une nouvelle fonctionnalité qui est exposée pour le mode minuterie :
delay_off et delay_on
cat delay_off
donne 500. Ce sont 500 millisecondes.
Vous pouvez ajuster ces valeurs pour que la LED clignote plus rapidement, par exemple :
echo "150" > delay_off
echo "150" > delay_on
Ou plus lentement ...
echo "1500" > delay_on
echo "1500" > delay_off
Quelques déclencheurs dignes d'intérêt :
- none : il n'y a aucune activité sur la LED
- mmc0 : est actif si la Flash / microSD est en cours d'accès
- cpu : est actif en fonction de l'activité du processeur (utile pour surveiller l'activité du processeur, car il sera un peu plus faible si l'activité du processeur est moindre, grâce à une sorte de PWM)
- heartbeat : donne un clignotement régulier pour montrer que le Pi est toujours actif et que le noyau est toujours en ligne et fait son travail.
Contrôler le GPIO de la LED depuis mon propre code ?
Pour contrôler les DEL à partir de votre propre code, en utilisant les bibliothèques GPIO, réglez le déclencheur sur "none".
echo "none" > trigger
Vous pouvez toujours l'activer et le désactiver à partir de la ligne de commande, en écrivant à brightness (1 pour l'activer, 0 pour le désactiver) :
echo "1" > luminosité
echo "0" > luminosité
Vous êtes maintenant en mesure de contrôler une LED à partir de la ligne de commande. Et vous avez appris quelque chose sur les arbres de périphériques et les superpositions d'arbres de périphériques, félicitations !