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.

pccb-petit

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
[email protected] {
   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" ;
     };
   };
};

image

Le fichier source de la superposition de l'arbre des périphériques (.dts) devra être compilé, et produira un fichier .dtbo.

image

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 :

image

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,

image

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). Sourire):

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 :

image

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. Sourire Et vous avez appris quelque chose sur les arbres de périphériques et les superpositions d'arbres de périphériques, félicitations !

Références :