Steuerung von LEDs auf Alpine Linux über die Kommandozeile

Wir haben ein eingebettetes Raspberry Pi Compute Module Carrier Board für den industriellen Einsatz entwickelt: das PCCB.

pccb-klein

Wie Sie sehen können, gibt es drei (direkt) benutzerprogrammierbare LEDs auf dem PCCB: USER / INFO / ACT.

Diese werden in der Gerätestruktur definiert. Zum Beispiel können wir in unserem Gerätebaum-Overlay Folgendes definieren:

//LEDs
fragment@11 {
   target = ;
   __overlay__ {
     led_act: ledact {
       label = "myledact";
       gpios = ;
       linux,default-trigger = "mmc0";
     };
     led_info: ledinfo {
       Bezeichnung = "myledinfo";
       gpios = ;
       linux,standard-auslöser = "cpu";
     };
     led_user: leduser {
       label = "myleduser";
       gpios = ;
       linux,default-trigger = "heartbeat";
     };
   };
};

Bild

Die Quelldatei des Gerätebaum-Overlays (.dts) muss kompiliert werden und ergibt eine .dtbo-Datei.

Bild

Diese Datei wird als Overlay in die config.txt eingefügt (in unserem Fall ist sie in einer Unterdatei, usercfg.txt, enthalten, die in die config.txt eingefügt wird)

# Pi-Steuerungs-Trägerplatte Overlay
dtoverlay=pi-Steuerung-Trägerplatte

Dadurch wird das VideoCore OS, das zuerst geladen wird, angewiesen, den Gerätebaum für das jeweilige Pi-Modell einschließlich unseres Overlays an den Linux-Kernel weiterzugeben.

Was ist ein Gerätebaum?

ARM-Geräte sind im Vergleich zu den standardisierten x86-Geräten, die über standardisierte Komponenten verfügen, immer individueller und vielfältiger geworden.

Um zu vermeiden, dass der Kernel neu kompiliert wird und jede einzelne geänderte Hardware angepasst werden muss, wurde ein System zur Beschreibung des Hardware-Layouts für den Linux-Kernel entwickelt.

Der Gerätebaum.

Es ist ein betriebssystemunabhängiges Konzept, da es in den Kernel des Betriebssystems geladen wird. Jedes Betriebssystem, das dies wünscht, kann es unterstützen.

Der Linux-Kernel erhält den Gerätebaum und weiß somit, welches Gerät vorhanden ist, wie es angeschlossen ist und wie es angesprochen werden kann (Treiber werden z. B. abhängig von Hinweisen im Gerätebaum geladen).

Da ein Raspberry Pi keine statische Hardware ist, sondern in verschiedenen Konfigurationen erhältlich ist und beispielsweise verschiedene Pins freilegen kann und auch verschiedene Add-ons (HATs) besitzt, wurde ein zusätzliches Add-on benötigt: Gerätebaum-Overlays.

Diese Dateien ermöglichen es, den Gerätebaum zu modifizieren, ohne für jede mögliche Kombination von Hardware, die Sie an den Pi anschließen bzw. für die Sie den Pi konfigurieren können, einen eigenen neuen Gerätebaum anlegen zu müssen.

Wie kann ich die LEDs steuern?

Diese LEDs leuchten im System auf, in der /sys/class/leds Verzeichnis:

Bild

Wie Sie sehen können, werden hier insgesamt vier LEDs angezeigt, von denen drei (myledact, myledinfo, myleduser) von uns mithilfe des Overlays hinzugefügt wurden!

Jede dieser LEDs ist ein Verzeichnis für sich,

Bild

die Ihnen die Kontrolle über die LED gibt.

Denken Sie daran, dass in Linux alles eine Datei ist / die Kommunikation mit dem Kernel wird abstrahiert, um Operationen auf dem Dateisystem durchzuführen (es ist eigentlich ein UNIX-Paradigma).

ausführen.

Katalysator

für die LED.

Es wird Ihnen eine Liste der Auslöser angezeigt, die Sie für diesen Eintrag festlegen können:

keine rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanallock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu cpu0 cpu1 cpu2 cpu3 default-on input panic [mmc0]

Beachten Sie, dass der letzte Trigger, mmc0, in eckigen Klammern steht. Dies ist der Wert, auf den die LED derzeit eingestellt ist!

Sie können versuchen, ihn auf einen der anderen Trigger zu setzen, indem Sie diesen Trigger auf die LED schreiben (wenn Sie genügend Rechte haben Lächeln):

echo "timer" > trigger

Bringt die LED zum Blinken.

Wenn Sie nun das Verzeichnis für die LED-Steuerung erneut auflisten, sehen Sie zusätzliche Einträge - neue Funktionen, die für den Timer-Modus verfügbar sind:

Bild

delay_off und delay_on

cat Verzögerung_aus

ergibt 500. Dies sind 500 Millisekunden.

Sie können diese Werte anpassen, um z. B. die LED schneller blinken zu lassen:

echo "150" > Verzögerung_aus

echo "150" > delay_on

Oder langsamer ...

echo "1500" > delay_on

echo "1500" > Verzögerung_aus

Ein paar bemerkenswerte Auslöser:

  • keine: es gibt keine Aktivität auf der LED
  • mmc0: ist aktiv, wenn auf das Flash / microSD zugegriffen wird
  • cpu: ist bei CPU-Aktivität aktiv (gut, um zu überwachen, wie stark die CPU ausgelastet ist, da sie bei geringerer CPU-Aktivität etwas dunkler wird, dank einer Art PWM)
  • heartbeat: zeigt mit einem gleichmäßigen Blinkmuster an, dass der Pi noch aktiv ist und der Kernel noch online ist und seine Arbeit verrichtet.

Steuerung des LED-GPIO über meinen eigenen Code?

Um die LEDs von Ihrem eigenen Code aus mit GPIO-Bibliotheken zu steuern, setzen Sie den Trigger auf "none".

echo "keine" > Auslöser

Sie können sie immer noch über die Befehlszeile ein- und ausschalten, indem Sie den Wert für die Helligkeit eingeben (1 zum Einschalten, 0 zum Ausschalten):

echo "1" > Helligkeit

echo "0" > Helligkeit

Jetzt können Sie eine LED über die Kommandozeile steuern Lächeln Und Sie haben etwas über Gerätebäume und Gerätebaum-Overlays gelernt, herzlichen Glückwunsch!

Referenzen: