So reduzieren Sie die Startzeit eines Beaglebone mit systemd

So reduzieren Sie die Startzeit eines Beaglebone mit systemd

Ich versuche derzeit, die Zeit zu verkürzen, die zum Booten meines Beaglebone Green und zum Starten eines Python-Skripts erforderlich ist. Mein einfaches Python-Skript schaltet lediglich ein Relais an einem Umhang ein.

Ich verwende die Zeit, die das Relais zum Schalten benötigt, als die Zeit, die zum Booten und für eine nützliche Funktion benötigt wird.

Früher dauerte die Weiterleitung 18 Sekunden, durch Herumprobieren mit systemd habe ich es auf 14 Sekunden reduziert.

Ich habe eine einfache Unit-Datei erstellt, die mein Python-Programm startet

[Unit]
Description=Relaycheck run on startup
DefaultDependencies=no
After=systemd-system.slice

[Service]
WorkingDirectory=/home/
ExecStart=/home/relaycheck2.py
StandardOutput=null

[Install]
Alias=relaycheck2.service

Und hier ist ein zugeschnittenes Bild der aktuellen Boot-Tabelle: Bootchart

Meines Wissens wird mein Dienst ziemlich früh ausgeführt und die zeitaufwändigen Dienste wie das Netzwerk haben keinen Einfluss auf meinen Relay-Dienst. Ist das richtig?

Kann ich die Bootzeit mit systemd sonst noch verkürzen?

Antwort1

Muss Ihr Programm den Status beibehalten (brauchen Sie eine beschreibbare Festplatte?) Am schnellsten können Sie wahrscheinlich überhaupt kein Init-System verwenden. Erwägen Sie stattdessen, Folgendes an Ihre Kernel-Argumente anzuhängen (höchstwahrscheinlich in Ihrer uBoot-Umgebung/-Konfiguration):

init=/path/to/your/program

Anstatt also systemd(den Prozessmanager) auszuführen, wird der Linux-Kernel Ihr Programm als ersten Prozess ausführen. Jetzt haben Sie gesagt, dies sei ein Python-Skript. Ich nichtdenkenSie können ein Skript als Init ausführen. Möglicherweise müssen Sie ein kleines Wrapper-Programm in einer kompilierten Sprache schreiben, das Ihre Python-Anwendung erzeugt.

Bedenken Sie, dass Ihr Shell-/Wrapperprogramm auch Signale verarbeiten muss (init/systemd verarbeiten Signale für Programme, die keine Standardsignalhandler haben). Möglicherweise können Sie mit etwas wiedumm-initdas normalerweise für Docker-Container verwendet wird.

Wenn Sie ein beschreibbares Volume benötigen, können Sie Ihr Wrapper-Programm auch eine Partition für Sie mounten lassen (das muss nicht Ihre Root-Partition sein. Sie können zur Speicherung auch einen USB-Stick mounten).

Ich würde dies zuerst in einer Desktop-VM versuchen, da Kernel-Parameter auf eingebetteten Systemen/uBoot etwas knifflig sein können.

verwandte Informationen