Systemstart

Aus open7x0.org

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis


Einleitung

Beim Start der VDR Firmware untersucht diese den Startgrund und ein paar weitere Dinge und entscheidet danach, wie das System gestartet werden soll.

Ereignisse

Die folgenden Ereignisse können festgestellt werden:

Einschaltgrund (PIC)

Der eingebaute PIC teilt mit, warum er die Box eingeschaltet hat. Hierbei gibt es vier Gründe, von denen der erkannte in der Variable STATE_PIC_START_REASON eingetragen wird:

  • 'powerfail' : Einschalten nach einem Stromausfall.
  • 'timer' : Der programmierte Alarm hat das Einschalten verursacht.
  • 'remote' : Die Box wurde durch die Fernbedienung eingeschaltet.
  • 'reboot' : Es wurde ein Neustart der Box programmiert.

Firmware-Wechsel

Bei einem Firmware-Wechsel wird die Variable STATE_FW_CHANGED auf '1' gesetzt; sonst auf '0'.

Factory-Reset

Wurde über das Rettungs-System ein Factory-Reset ausgelöst, dann und genau dann wird die Variable STATE_FACTORY_RESET auf '1' gesetzt. Die Erkennung erfolgt über die Datei '/var/etc/vdr-ok', die bei einem Factory-Reset automatisch gelöscht wird.

Crash beim vorherigen Boot

Wurde festgetsellt, das der vorherige Boot-Vorgang nicht abgeschlossen wurden, dann und genau dann wird die Variable STATE_CRASHED auf '1' gesetzt.

Weitere Zustände

Neben den vier Ereignissen gibt es noch Informationen aus dem vorherigen Leben der Box, die für den Einschaltmodus berücksichtigt werden:

Vorgegebener Modus

Mit den beiden Kommandos 'halt' und 'reboot' kann der Box ein Modus für den nächsten Systemstart vorgeschlagen werden. Dieser Vorschlag wird über die beiden Variablen STATE_FORCE_MODE und STATE_NEXT_FORCE_MODE abgehandelt.

Mögliche Vorschläge sind:

  • 'rescue' : Das Rettungs-Menu soll aktiviert werden.
  • 'menu' : Das Start-Menu soll aktiviert werden, ohne das ein weiter Autostart vollzogen wird.
  • 'standby' : Der Standby-Modus soll aktiviert werden.
  • 'vdr' : Der VDR soll direkt gestartet werden.

VDR Timer

In der Variable STATE_NEXT_VDR_TIMER wird der nächste geplante VDR-Aufnahme-Zeitpunkt gespeichert.

Start-Menu-Modus

Der CONFIG_STARTMENU_MODE legt den Modus für das Erscheinen des Start-Menus im Normalfall fest.

Auswahl des Startmodusses

Mit allen obigen Parametern wird nun der Start-Modus wie folgt festgelegt, wobei erstgenannte Punkte eine höhere Prorität als die weiter unten genannten Punkte haben:

  1. Bei einem Crash wird das Rettungs-Menu aufgerufen.
  2. Wurde keine neue Firmware eingespiel und ein Factory-Reset erkannt, dann wird ebenfalsl das Rettungs-Menu aufgerufen.
  3. Falls STATE_FORCE_MODE gesetzt ist, dann wird die geforderte Aktion ausgeführt.
  4. Nach einem Firmware-Wechsel wird das Start-Menu auf jeden Fall angezeigt und es erfolgt kein Autostart.
  5. Bei einem Stromausfall wird der VDR-Aufnahme-Zeitpunkt untersucht. Ist keiner definiert oder liegt dieser mindestens 15 Minuten in der Zukunft, dann wird das System wieder abgeschaltet. Anderenfalls wird der VDR direkt oder mit Zwischenschritt Start-Menu gestartet, wobei das Start-Menu nur dann aktiviert wird, wenn die Timeraufnhame in mehr als 3 Minuten stattfinden soll. Der VDR wird auf jeden Fall gestartet, wenn die Systemzeit ungültig ist.
  6. In Abhängigkeit von CONFIG_STARTMENU_MODE wird der VDR direkt oder mit Zwischenschritt Start-Menu gestartet.

Kode aus /usr/mgr/mgr

Der folgende Kode aus der Datei /usr/mgr/mgr zeigt die Auswertung der Parameter:

function auto_setup()
{
    echo "`date '+%F %T'` MGR/auto: pic=$STATE_PIC_START_REASON, tmode=$STATE_TIMER_START_REASON, crash=$STATE_CRASHED, reset=$STATE_FACTORY_RESET, new-fw=$STATE_FW_CHANGED, force=$STATE_FORCE_MODE" | tee -a /opt/log/boot.log
    (( STATE_CRASHED || STATE_FACTORY_RESET && !STATE_FW_CHANGED )) && return $MGR_ST_RESCUEMENU

    case "$STATE_FORCE_MODE" in
	rescue)		return $MGR_ST_RESCUEMENU ;;
	menu)		return $MGR_ST_STARTMENU ;;
	standby)	return $MGR_ST_STANDBY ;;
	vdr)		return $MGR_ST_VDR ;;
	lastvdr)	return $MGR_ST_LASTVDR ;;
    esac

    (( STATE_FW_CHANGED )) && return $MGR_ST_STARTMENU

    if (( STATE_POWERFAIL ))
    then
	(( `date +%s` < FW_TIME )) && return $MGR_ST_STARTMENU_VDR
	(( ! STATE_NEXT_VDR_TIMER )) && return $MGR_ST_HALTMENU_HALT
	(( STATE_NEXT_VDR_TIMER < `date +%s`+180 )) && return $MGR_ST_VDR
	(( STATE_NEXT_VDR_TIMER < `date +%s`+900 )) && return $MGR_ST_STARTMENU_VDR
	return $MGR_ST_HALTMENU_HALT
    fi

    [[ $STATE_PIC_START_REASON = timer && $STATE_TIMER_START_REASON = standby ]] \
	&& return $MGR_ST_STANDBY

    case "$CONFIG_STARTMENU_MODE" in
	normal) return $MGR_ST_STARTMENU_VDR ;;
	fast)   return $MGR_ST_STARTMENU_VDR_FAST ;;
    esac

    return $MGR_ST_VDR
}

Links zum Thema »VDR Firmware« 

Persönliche Werkzeuge