Meine Erfahrungen mit vdr+nvram-wakeup+swsusp (lang!)

  • Hallo Leute,


    so einem Forum tut es sicher gut, wenn nicht nur bei Problemen was geschrieben wird, sondern auch gelöste Probleme mal geschildert werden.
    Ich will das jetzt mal für meine Umgebung tun. Der Text ist sehr lang geworden, aber ich habe auch sehr viel Zeit und Arbeit in die Lösung der diversen Probleme gesteckt. Und vielleicht kann ja der eine oder andere davon profitieren. Also, schnell noch 'ne Tüte Chips und ein Bier oder eine Flasche Rotwein geholt, es geht los!


    Das HW-Umfeld:
    AMD Duron 1300 auf MB K7SOM+ Rev. 7.5A, TT DVB-S Rev. 1.6


    Aufgabenstellung:
    Dieses System mit einem VDR zu betreiben, und zwar sowohl mit nvram-wakeup als auch mit swsusp. Ausgangsgbasis ist SuSE 8.2, vdr 1.2.5, DVB 1.0/1.0.1


    Vorgehensweise:
    Nach der SuSE-Installation mit dem Orig-Kernel (2.4.20) und der VDR-Umgebung (zunächst ohne swsusp, ohne nvram-wakeup) nach "Sandmann" lief alles auf's erste Mal --> gut.
    Dann wollte ich swsusp installieren, um die Boot-Zeiten zu verkürzen. Das "stable" Release ist derzeit 1.0, aber die aktuellen Release-Candidates für Version 1.1 sollen funktional schon wesentlich verbessert ggü. 1.0 sein. Also 1.1-rc9 runtergeladen. Das erfordert einen 2.4.22-Kernel --> Vanilla 2.4.22-Sourcen gezogen. Zusätzlich noch den neuesten acpi-Patch. Kernel gemäß swsusp-Anleitung konfiguriert und übersetzt --> Internal Compiler Error! Nachforschungen ergaben, dass SuSE mit der 8.2 einen gcc 3.3. "prerelease" ausgeliefert hat. Also den aktuellen gcc 3.3.1 geholt. Damit ließ sich der Kernel und die Module dann bauen.
    Das "Hibernate" von swsusp blieb hängen. Debugging ergab, dass ein Kernel-Bug im Highmem-Modul der Auslöser war. Da ich bei 128MB auf Highmem getrost verzichten kann, habe ich es ausgeschaltet (gibt aber wohl auch einen Patch dafür) und den Kernel neu übersetzt. Dann ging Hibernate und das Wiederaufwachen (zunächst noch ohne VDR) super.
    swsusp bei laufendem VDR machte dann Probleme dergestalt, dass beim Aufwachen zwar das Bild wieder da war, der Ton aber nicht. Auch die Bedienung des VDR klappte nur noch über Tastatur, über's Netz (vdradmin) ging nichts mehr. Die Logs wiesen auf einen Ressourcenkonflikt hin. Ein sauberer händischer Restart des VDR, inklusive entladen und laden der DVB-Treiber (wichtig!), dann war wieder alles im Lot. Also muss das automatisiert werden. Dem swsupend kann man mitteilen, dass es Services vor dem Hibernate stoppen und beim Resume wieder starten soll. Voraussetzung ist ein SystemV-konformes start/stop-Script in /etc/init.d. Nun, das hatte ich sowieso schon erstellt, damit der VDR beim "normalen" Hochfahren gestartet wird (die inittab-Methode gefällt mir nicht so). Also die /etc/suspend.conf entsprechend angepasst. Aber es hatte keine Wirkung :-(. Irgendwie wurde der VDR nicht gestoppt. ich hatte nach dem Resume zwar nicht immer, aber immer wieder (unregelmäßig) die beschriebenen Ressourcen-Konflikte. Nach Umschiffung diverser Klippen und Untiefen in den Weiten der Unix-Meere war der Auslöser gefunden: der Watchdog-Timer! Es gibt keine (mir bekannte) saubere Prozedur für das Beenden des VDR mit aktivem Watchdog. Da ja normalerweise ein shutdown oder reboot erfolgt, ist das normalerweise auch egal. Ich muss aber ja die Treiber entladen, und das geht nur bei beendetem VDR. Also killte ich in meinem VDR-Initscript die VDR-Prozesse raus, und machte danach einen "make rmmod". Aber gleich nach dem Killen schlug wohl meistens (nicht immer!) der Watchdog zu und verhinderte durch den Restart, dass die Treiber entladen werden konnten ("device or ressource busy"). So wurde beim Hibernate das Image des Systems wieder mit laufender VDR-Umgebung abgelegt--> Konflikt beim Resume. Andererseits wollte ich auf den Watchdog nicht verzichten. Die Lösung war schließlich, vor dem Killen der VDR-Prozesse auch den runvdr-Prozess (ich starte im init-Script diesen per nohup) explizit rauszuschmeißen. Seitdem klappt das mit dem Hibernate und dem Restart des VDR sauber.
    Hochfahrzeit des VDR bis das Bild kommt ist ab Drücken des Einschaltknopfes incl. Selbsttest, BIOS etc. ca. 30 Sekunden.
    Nächste Baustelle: nvram-wakeup. Mein Board wird unterstützt, braucht aber den (doofen) reboot. Also musste ich dem swsusp einen Reboot beibringen. Es sieht wohl so aus, als würde dies (bei meinem Board) nur in der Debug-Variante von swsusp gehen. Jedenfalls hat es ohne Debug-Opotion nicht auf das entspr. Flag reagiert und immer einen power-off gemacht. Im Debug-Modus geht's. Die Flags für Power-off oder Reboot stellt man über die /etc/suspend.conf ein. Das ist natürlich schwierig zu automatisieren. Es erschien mir deswegen elegant, das Hibernate-Script so zu "customizen", dass es einen entsprechenden Parameter "--reboot" mit bekommt. Dann noch das vdrshutdown-Script angepasst, damit es den Grub richtig behandelt, und das war's!


    Also momentaner Stand der Dinge:
    VDR mit swsusp und nvram-wakeup tut wie gewünscht. Nachdem dies ja die unbedingte Mindestvoraussetzung ist (ok, swsusp hätte man zugunsten längerer Anlaufzeiten weglassen können, aber der "Jagdistinkt" war geweckt), werde ich mich nun den Plugins widmen.


    Achja, schön wäre noch die Möglichkeit, vielleicht über einen "Special Key" auf der FB die Kiste zu veranlassen, beim vdrshutdown wahlweise einen "ordentlichen" shutdown -h zu machen, damit man auch mal "von Grund auf" booten kann. Aber solange man über's Netz noch an die Büchse (bzw. eine Shell) kommt, geht ja alles. Zudem werde ich mir eine "Web-Console" (Terminalserver) an die serielle Schnittstelle anschließen. Damit habe ich auch Zugriff auf die Büchse, wenn sie nicht mehr ins Netz kommt .


    So, das war lang, aber es steckt ja auch genug Arbeit drin. Vielleicht hilft's ja jemandem...


    So long
    Jürgen :)

  • Das klingt ja nach wirklich viel arbeit.


    Ich habe das selbe Board wie Du.
    Da fast alles onboard ist ist mir mal so ein gedanke gekommen.
    Macht es eigentlich sinn Images der ganzen "/" Partition auszutauschen?
    Wäre doch auch nicht schlecht oder?


    Vielleicht gibt es ja noch andere die die selbe Hardware haben.

  • Hi,


    ich habe das selbe Board, und möchte nvram-wakeup auch nutzen.( Soweit bin ich aber noch nicht.)
    Eine Frage habe ich aber schon mal allgem. zum K7SOM Board, ohne Keyboard lässt sich das Teil nicht Booten - Keyboard-Error - und im bios hab ich keine Option gefunden wie z.B. "Halt on no Errors", wie bei manch anderem Board.
    Wie hast Du das gelößt??


    Grüsse


    Frank :(


    wrhel@gmx.de

  • Hallo Frank,


    bei mir klappt das (ohne Datensichtgerät und ohne Eingabegerät). Das war auf jeden Fall im BIOS einzustellen. Vielleicht hast Du eine andere BIOS-Version?
    Ich schrieb an anderer Stelle schon mal, dass das K7SOM+ lt. ECS defintiv ein "OEM-Board" ist. D.h., dass im Prinzip (übertrieben) keines aussieht wie das andere. Meins hat z.B. eine gesockelte CPU, obwohl dies lt. ECS-Spezi gar nicht vorgesehen ist.


    HTHH
    Jürgen :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!