Danke für die Info. Dann kaufe ich doch lieber die v5.5, ich find's deutlich bequemer, nur den Stock Kernel zu brauchen.
Beiträge von kolja
-
-
Edit: (13.6.2011)
Ein stabiler Treiber ist in Kernel 2.6.39+ enthalten.Gilt das auch für cineS2 V6?
-
Danke, damit muss ich mal herumspielen. Hat noch den Nachteil, dass Sound-Treiber auch entladen werden. Aber sich nur auf drivers/media/dvb zu beschränken, reicht scheinbar auch nicht.
Was basename angeht, das braucht man tatsächlich nicht:
-
Hmm. Selbst wenn ich manuell cx88_dvb, videobuf_core und dvb_core entlade und neu lade, ist /dev/dvb/adapter0/dvr0 hinterher kaputt.
-
Kacke, ist das kompliziert. Eine Lösung für mein System habe ich jetzt natürlich, ich kann die Liste der Module einfach hardcoden, aber ein Patch, der das Problem allgemeingültig löst, scheint alles andere als trivial zu sein. Das Perl-Script von v4l funktioniert übrigens nicht so ohne weiteres, wenn man nur ein Standard-Kernel-Paket installiert hat.
-
Ich habe gerade testweise 2.6.25-2-686 (2.6.25-7) gebootet, und damit tritt das Problem bei mir auch nicht mehr auf, aber aus einem ganz einfachen Grund: die Module werden gar nicht mehr neu geladen! (Das sieht man im syslog und mit dmesg, onur, kannst Du das bei Dir bestätigen?) Außerdem glaube ich nun auch verstanden zu haben, worin das Problem bei 2.6.26-1-686 (2.6.26-8) besteht.
Die Ursache für diesen Unterschied zwischen beiden Kerneln hängt mit der Strategie zusammen, mit der /usr/sbin/runvdr ermittelt, welche Module zu entladen sind, und den unterschiedlichen Abhängigkeiten zwischen den Modulen bei den beiden Kerneln.
Code
Alles anzeigenKVERS_2_6=`uname -r | grep -e '2.6'` function get_modulenames() { if [ "$KVERS_2_6" ]; then MODULES=`lsmod | awk '/^dvb_core/ {gsub(/,/,"\n", $4); print $4}' | tac` [ "$MODULES" ] && MODULES="$MODULES dvb_core" else MODULES=`lsmod | grep dvb-core | cut -d'[' -f2 | cut -d']' -f1` [ "$MODULES" ] && MODULES="$MODULES dvb-core" fi }
Die Funktion get_modulenames() filter zunächst per awk aus lsmod alle Module aus, die dvb_core nutzen, kehrt deren Reihenfolge um, und fügt der Liste noch dvb_core hinzu. Beim Emergency-Neustart des vdr werden die Module in der so erzeugten Liste der Reihe nach mit rmmod entladen.
Das führt bei 2.6.25 zu folgendem Effekt:
Code
Alles anzeigenserver:~# lsmod | grep dvb cx88_dvb 13028 10 cx88_vp3054_i2c 3072 1 cx88_dvb videobuf_dvb 6660 1 cx88_dvb dvb_core 71744 1 videobuf_dvb cx8802 16708 1 cx88_dvb cx88xx 62280 4 cx88_dvb,cx88_alsa,cx8802,cx8800 videobuf_dma_sg 13028 6 cx88_dvb,videobuf_dvb,cx88_alsa,cx8802,cx8800,cx88xx videobuf_core 17316 5 videobuf_dvb,cx8802,cx8800,cx88xx,videobuf_dma_sg server:~# lsmod | awk '/^dvb_core/ {gsub(/,/,"\n", $4); print $4}' | tac videobuf_dvb server:~# rmmod videobuf_dvb ERROR: Module videobuf_dvb is in use by cx88_dvb server:~# rmmod dvb_core ERROR: Module dvb_core is in use by videobuf_dvb
Wie man sieht, findet der aus get_modulenames() entnommene Filter nur ein Modul, videobuf_dvb, und wenn dieses und anschließend dvb_core entladen werden soll, passiert gar nichts, weil die Abhängigkeiten nicht korrekt berücksichtigt wurden.
Mit 2.6.26 sieht der Effekt dank veränderter Abhängigkeiten etwas anders aus:
Code
Alles anzeigenserver:~# lsmod | grep dvb cx88_dvb 14820 10 cx88_vp3054_i2c 2528 1 cx88_dvb videobuf_dvb 4580 1 cx88_dvb dvb_core 66528 2 cx88_dvb,videobuf_dvb cx8802 13636 1 cx88_dvb cx88xx 61704 4 cx88_dvb,cx8802,cx88_alsa,cx8800 videobuf_dma_sg 11140 5 cx88_dvb,cx8802,cx88_alsa,cx8800,cx88xx videobuf_core 16100 5 videobuf_dvb,cx8802,cx8800,cx88xx,videobuf_dma_sg server:~# lsmod | awk '/^dvb_core/ {gsub(/,/,"\n", $4); print $4}' | tac videobuf_dvb cx88_dvb server:~# rmmod videobuf_dvb ERROR: Module videobuf_dvb is in use by cx88_dvb server:~# rmmod cx88_dvb server:~# rmmod dvb_core ERROR: Module dvb_core is in use by videobuf_dvb
Wie man sieht, findet der Filter nun zwar alle relevanten Module, aber auch hier ist die Reihenfolge unbrauchbar, so dass am Ende nur cx88_dvb entladen wird.
Es sieht so aus, als sei in get_modulenames() implementierte Ansatz nicht ausreichend, um komplexere Abhängigkeiten zwischen den Modulen zu berücksichtigen.
Vielleicht sollte man auf diesen Automatismus verzichten, und den Leuten, die aus Stabilitätsgründen das Neuladen der Module brauchen, die Möglichkeit anbieten, die richtige Liste von Modulen in der richtigen Reihenfolge in einer Config-Datei einzutragen.
Oder man schreibt Code, der die Dependencies in lsmod komplett auswertet und eine Liste in der richtigen Reihenfolge erzeugt. Das dürfte aber nicht ganz trivial sein.
Das Script stammt doch von Tobi, oder? Kann Tobi mal seine Meinung dazu sagen?
-
Vorher:
Codeserver:/# ls -l /dev/dvb/adapter0/ total 0 crw-rw---- 1 root video 212, 4 2008-10-23 22:37 demux0 crw-rw---- 1 root video 212, 5 2008-10-23 22:37 dvr0 crw-rw---- 1 root video 212, 3 2008-10-23 22:37 frontend0 crw-rw---- 1 root video 212, 7 2008-10-23 22:37 net0 server:/# cat /dev/dvb/adapter0/dvr0 ^C
Nachher:
Codeserver:/# ls -l /dev/dvb/adapter0/ total 0 crw-rw---- 1 root video 212, 4 2008-10-24 22:30 demux0 crw-rw---- 1 root video 212, 5 2008-10-24 22:30 dvr0 crw-rw---- 1 root video 212, 3 2008-10-24 22:30 frontend0 crw-rw---- 1 root video 212, 7 2008-10-24 22:30 net0 server:/# cat /dev/dvb/adapter0/dvr0 cat: /dev/dvb/adapter0/dvr0: No such device
Sieht aus, wie das Problem, welches Du verlinkt hast.Seit wann sollte das denn gefixt sein? Debian lenny ist doch ziemlich dicht am aktuellen 2.6.26er Kernel, oder?
Ansonsten könnte man vielleicht runvdr dahingehend ändern, dass auch dvb_core neu geladen wird.
-
Kann mir keiner helfen?
-
Hi,
ich habe folgendes Problem beobachtet. Aus irgendwelchen Gründen schiebt der vdr Panik und beendet sich mit einem Exitcode ungleich Null. (Kann sein, dass das mit meinem Recording-Hook zusammenhängt, ist aber für die weiteren Konsequenzen unerheblich.) Das veranlasst runvdr, den Wachhund, erstmal die DVB-Kernelmodule zu entladen und neu zu laden und anschließend den vdr neu zu starten.
Code
Alles anzeigenOct 17 23:10:00 server vdr: [2870] executing '/usr/lib/vdr/vdr-recordingaction after "/var/lib/video.00/..."' Oct 17 23:10:00 server recordingaction: executing /usr/share/vdr/recording-hooks/R90.custom after recording /var/lib/video.00/... as shell script Oct 17 23:11:00 server vdr: [2870] PANIC: watchdog timer expired - exiting! Oct 17 23:11:01 server vdr: [22646] streamdev-livestreaming thread ended (pid=2870, tid=22646) Oct 17 23:11:01 server vdr: [22645] streamdev-writer thread ended (pid=2870, tid=22645) Oct 17 23:11:01 server vdr: [2870] cTS2PES got 0 TS errors, 1 TS continuity errors Oct 17 23:11:01 server vdr: [2870] buffer stats: 175592 (4%) used Oct 17 23:11:01 server vdr: [3035] fatal error, server exiting: Bad file descriptor Oct 17 23:11:01 server vdr: [3035] streamdev server thread ended (pid=2870, tid=3035) Oct 17 23:11:02 server runvdr: restarting VDR Oct 17 23:11:02 server kernel: [130625.612827] cx88/2: unregistering cx8802 driver, type: dvb access: shared Oct 17 23:11:02 server kernel: [130625.612857] cx88[0]/2: subsystem: 0070:9202, board: Hauppauge Nova-S-Plus DVB-S [card=37] Oct 17 23:11:05 server kernel: [130628.343638] cx88/2: cx2388x dvb driver version 0.0.6 loaded Oct 17 23:11:05 server kernel: [130628.343665] cx88/2: registering cx8802 driver, type: dvb access: shared Oct 17 23:11:05 server kernel: [130628.343686] cx88[0]/2: subsystem: 0070:9202, board: Hauppauge Nova-S-Plus DVB-S [card=37] Oct 17 23:11:05 server kernel: [130628.343715] cx88[0]/2: cx2388x based DVB/ATSC card Oct 17 23:11:05 server kernel: [130628.344340] CX24123: detected CX24123 Oct 17 23:11:05 server kernel: [130628.344697] DVB: registering new adapter (cx88[0]) Oct 17 23:11:05 server kernel: [130628.344715] DVB: registering frontend 0 (Conexant CX24123/CX24109)... Oct 17 23:11:21 server vdr: [25296] cTimeMs: using monotonic clock (resolution is 1 ns) Oct 17 23:11:21 server vdr: [25296] VDR version 1.6.0-2 started
Das ist zwar eine nette Idee, führt aber zumindest bei mir zu Problemen. Sobald der vdr Videodaten aufzeichnen soll, kann er /dev/dvb/adapter0/dvr0 nicht öffnen.Code
Alles anzeigenOct 17 23:12:28 server vdr: [25432] recording to '/var/lib/video.00/... Oct 17 23:12:28 server vdr: [25456] file writer thread started (pid=25432, tid=25456) Oct 17 23:12:28 server vdr: [25457] recording thread started (pid=25432, tid=25457) Oct 17 23:12:28 server vdr: [25458] receiver on device 1 thread started (pid=25432, tid=25458) Oct 17 23:12:28 server vdr: [25458] ERROR: /dev/dvb/adapter0/dvr0: No such device Oct 17 23:12:28 server vdr: [25458] receiver on device 1 thread ended (pid=25432, tid=25458) Oct 17 23:12:29 server vdr: [25437] changing pids of channel 2 from 110+110:120=deu,121=2ch;125=dd:0:130 to 110+110:120=deu,121=2ch;125=dd:131=deu:130 Oct 17 23:12:29 server vdr: [25432] stopping recording due to modification of channel 2 Oct 17 23:12:29 server vdr: [25457] recording thread ended (pid=25432, tid=25457) Oct 17 23:12:29 server vdr: [25456] file writer thread ended (pid=25432, tid=25456) Oct 17 23:12:29 server vdr: [25432] buffer stats: 0 (0%) used Oct 17 23:12:29 server vdr: [25432] timer 1 (2 2255-2340 '...') stop
Dieser Zustand ist nur noch durch einen Neustart des Rechners zu beheben. Man kann den Zustand auch künstlich herbeiführen, indem man den vdr mit kill -9 beendet, denn auch dann lädt runvdr die DVB-Module neu. Wenn der vdr sauber neu gestartet wird, tritt das Problem nicht auf.Daher nehme ich an, dass es meinem Kernel irgendwie nicht gut tut, wenn die DVB-Module neu geladen werden, oder zumindest der Zusammenhang mit /dev/dvb/adapter0/dvr0 dadurch verloren geht oder so.
Ist das Problem bekannt? Kann man runvdr abgewöhnen, die DVB-Module neu zu laden? Ich habe in den Manpages und den Initscripten und Configdateien nichts derartiges gefunden.
Mein System: Debian lenny mit Stock-Kernel linux-image-2.6.26-1-686 (2.6.26-8), vdr (1.6.0-6ctvdr2) von e-tobi.net, Hauppauge Nova-S-Plus DVB-S.
Grüße, Kolja.
-
Ich hab' ihm eine Mail mit Link auf diesen Thread geschickt.
-
Hmm, das Wiki hilft beim Betrieb mit VLC als Client nicht wirklich weiter, schau' mal in diesen Thread:
-> [ANNOUNCE] VLC-Player als Streaming-Client für das ffnetdev-plugin
-
Das Plugin vdr-plugin-ffnetdev auf dem VDR und VLC auf dem Client-PC sind Deine Freunde.
-> http://www.vdr-wiki.de/wiki/index.php/Ffnetdev-plugin
-
Damit man project-x wie gewohnt über das Shell-Script /usr/bin/projectx aufrufen kann, muss man dieses noch so anpassen, dass es auch andere jvm's als sun's verwendet:
Bash
Alles anzeigen#!/bin/sh set -e -JAVA_PATHS="/usr/lib/jvm/java-1.5.0-sun /usr/lib/jvm/java-6-sun" +JAVA_PATHS="/usr/lib/jvm/java-1.5.0-sun /usr/lib/jvm/java-6-sun /usr" for JAVA_PATH in $JAVA_PATHS ; do if [ -x $JAVA_PATH/bin/java ] ; then break; fi done if [ $# -eq 0 ] ; then $JAVA_PATH/bin/java -jar /usr/share/project-x/ProjectX.jar "$@" else $JAVA_PATH/bin/java -Djava.awt.headless=true -jar /usr/share/project-x/ProjectX.jar "$@" fi exit 0
-
So, ausprobiert. Ich hab' das aktuelle project-x .deb von e-tobi heruntergeladen, in den Metadaten die Dependencies und die Version nach meinen Vorstellungen gepatcht, dieses gepatchte .deb in mein lokales APT-Repository gelegt, und dann wie üblich installiert.
Mit java-gcj-compat funktioniert headless nicht. Project-X bricht trotz "java.awt.headless=true" nach der Begrüßung und der Kommandozeilenhilfe mit "Gtk-WARNING **: cannot open display" ab. Ob es mit GUI funktionieren würde, weiß ich nicht, da ich keinen X-Server habe. Aber mit openjdk-6-jre funktioniert headless einwandfrei, habe soeben eine Aufnahme des VDR nach TS konvertiert! (Anschauen kann ich das TS allerdings erst heute abend, wenn ich wieder zu Hause bin ...)
Da default-jre in Debian java-gcj-compat installiert, anstatt openjdk-6-jre wie in Ubuntu, ist mein obiger Vorschlag so nicht brauchbar.
Aber folgende Abhängigkeiten würden gehen: "openjdk-6-jre | sun-java5-jre | sun-java6-jre", oder flexibler: "openjdk-6-jre | java2-runtime".
Was noch interessant wäre, ob es auch reicht, wenn man nur openjdk-6-jre-headless installiert. Leider kann ich das nicht testen, weil einige andere Java-Libraries indirekt die Installation der nicht-headless-Variante erzwingen (#500839, #500840).
-
Anscheinend glaubt der Ubuntu-Betreuer, dass es geht, denn in hardy hängt project-x direkt von "openjdk-6-jre | ...sun-java..." ab, in intrepid ebenfalls, wenn auch indirekt über "default-jre | java2-runtime". Deswegen auch mein Vorschlag.
Ausprobiert hab' ich's noch nicht, ich hatte die Hoffnung, es wüsste bereits jemand genaueres dazu.
-
Korrektur: "default-jre | java2-runtime", bzw. falls headless möglich ist, "default-jre | java2-runtime | java2-runtime-headless".
-
Hi Tobi,
könnte "project-x", zumindest die Variante(n) für sid (und bald lenny), von "default-jre" abhängen, anstatt von "sun-java5-jre | sun-java6-jre"? Noch besser, von "default-jre | default-jre-headless"?
Grüße,
Kolja. -
Zitat
Original von lexi
kannst du noch verraten wie man das dauerhaft speichern kann? die shopt -s ist spätestens nach den reboot wieder "weg"
Hmm, bei jedem Booten? D.h. Du musst nach jedem Booten den Inhalt von /tmp/ und /log/ erneut wegkopieren? Kannst Du nicht die Netzverzeichnisse nach /tmp/ und /log/ mounten, bevor überhaupt in diese Verzeichnisse geschrieben wird? Irgendwie kann ich auch noch nicht ganz folgen ...Wie auch immer - einfach so speichern kann man das nicht, aber es gibt Profil-Skripte, die die Shell zur Initialisierung abarbeitet, da kann man beliebige Befehle eintragen. Es gibt aber mehrere davon, und welches das richtige wäre, hängt davon ab, welche Shell verwendet wird und wie diese aufgerufen wird. Einfacher wäre es, den Aufruf von shopt und cp in ein Skript zu packen, oder direkt in einem Schritt aufzurufen ...
... oder wie oben erwähnt die Wildcards zu vermeiden, damit shopt gar nicht benötigt wird. -
Zitat
mit cp -rfdp ist das resultat das selbe und bei cp -R /tmp/*.* /cf/tmp" wird gemeckert das es kein ordner ist. (ist natürlich an persönliche struktur angepasst wurden)
Das Problem sind vermutlich nicht die Schalter, sondern die Form, in der Du Quelle und Ziel angibst. Alles mit "*" wird von der Shell expandiert, so das cp eine Liste von Quellen sieht, und deswegen erwartet, dass das Ziel ein bereits existierendes Verzeichnis ist. Wenn Du nur eine Quelle angibst (also auf "*" verzichtest!) und diese ein Verzeichnis ist, dann wird dessen Inhalt komplett kopiert und das Zielverzeichnis automatisch erzeugt. -
Zitat
Original von fitzefatze
Wenn Dateien, die mit einem Punkt "." beginnen kopiert werden sollen, musst du "*.*" als Maske angeben, um alle Dateien zu kopoeren, z.B. "cp -R /tmp/*.* /cf/tmp"
So einfach ist das leider nicht, zumindest verhält sich bash bei mir diesbezüglich anders. (Die Shell expandiert "*", nicht cp!) Es gibt eine Reihe von internen Shell-Optionen, die die Expansion von "*" steuern:Damit findet "*.*" nur Dateien, die einen Punkt mit Zeichen davor und dahinter enthalten, also z.B. "test.ext", aber nicht ".test" oder "test". Auch ".*" hilft nicht weiter, das findet zwar ".test", aber weder "test.ext" noch "test", dafür aber ".", das übergeordnete Verzeichnis, was bei cp -R ziemlich unerwünscht sein dürfte.
Um Dateien mit Punkt am Anfang gemeinsam mit allen anderen Dateien mit "*" zu finden, muss man vorher dotglob einschalten:
Am besten lässt man die Wildcards weg und gibt nur den Namen des zu kopierenden Verzeichnis an:
Oder, um das aktuelle Verzeichnis zu kopieren: