Hallo beisammen,
ich eröffne mal einen neuen Thread und fasse den (meinen) bisherigen Kenntnisstand zu o.a. Problematik zusammen:
Problem:
Die Digital Devices DuoFlex CT hat zwei Tuner, die jeweils als DVB-C- oder DVB-T-Tuner initialisiert werden können.
Beim Laden des Treibers werden zwei Adapter mit je zwei Frontends angelegt:
ls -lR /dev/dvb
/dev/dvb:
insgesamt 0
drwxr-xr-x 2 root root 140 2011-08-30 18:52 adapter0
drwxr-xr-x 2 root root 140 2011-08-30 18:52 adapter1
/dev/dvb/adapter0:
insgesamt 0
crw-rw----+ 1 root video 212, 0 2011-08-30 18:52 demux0
crw-rw----+ 1 root video 212, 1 2011-08-30 18:52 dvr0
crw-rw----+ 1 root video 212, 3 2011-08-30 18:52 frontend0
crw-rw----+ 1 root video 212, 4 2011-08-30 18:52 frontend1
crw-rw----+ 1 root video 212, 2 2011-08-30 18:52 net0
/dev/dvb/adapter1:
insgesamt 0
crw-rw----+ 1 root video 212, 5 2011-08-30 18:52 demux0
crw-rw----+ 1 root video 212, 6 2011-08-30 18:52 dvr0
crw-rw----+ 1 root video 212, 8 2011-08-30 18:52 frontend0
crw-rw----+ 1 root video 212, 9 2011-08-30 18:52 frontend1
crw-rw----+ 1 root video 212, 7 2011-08-30 18:52 net0
Alles anzeigen
Soweit ich weiß, ist Frontend0 das DVB-C-Frontend, Frontend1 das DVB-T-Frontend.
Greift der VDR auf die Frontends zu, werden die Tuner als DVB-C initialisiert und stehen für DVB-T nicht mehr zur Verfügung.
Es hilft dann auch nicht, mit dem dynamite-Plugin das Frontend1 anzuhängen.
Hängt die Karte mit der DVB-C-Initialisierung an DVB-T-Input, wirft der Treiber (natürlich) Fehler aus, VDR zeigt "No signal".
Abhilfe schafft das Umkopieren der Frontends nach Initialisieren des Treibers vor dem Start des VDR:
mv /dev/dvb/adapter0/frontend0 /dev/dvb/adapter0/frontend0.disabled
mv /dev/dvb/adapter0/frontend1 /dev/dvb/adapter0/frontend0
Dies hat aber den Nachteil, dass der Systemstart verzögert wird bzw. bei yaVDR der meisterhaft getimte Startprozess durcheinandergerät.
Es löst aber das Problem, dass der Treiber beim Start nur für Frontend0 auch dvr und demux anlegt:
$ ls -lR /dev/dvb
/dev/dvb:
insgesamt 0
drwxr-xr-x 2 root root 140 2011-08-30 18:52 adapter0
drwxr-xr-x 2 root root 140 2011-08-30 18:52 adapter1
/dev/dvb/adapter0:
insgesamt 0
crw-rw----+ 1 root video 212, 0 2011-08-30 18:52 demux0
crw-rw----+ 1 root video 212, 1 2011-08-30 18:52 dvr0
crw-rw----+ 1 root video 212, 3 2011-08-30 18:52 frontend0
crw-rw----+ 1 root video 212, 4 2011-08-30 18:52 frontend1
crw-rw----+ 1 root video 212, 2 2011-08-30 18:52 net0
/dev/dvb/adapter1:
insgesamt 0
crw-rw----+ 1 root video 212, 5 2011-08-30 18:52 demux0
crw-rw----+ 1 root video 212, 6 2011-08-30 18:52 dvr0
crw-rw----+ 1 root video 212, 8 2011-08-30 18:52 frontend0
crw-rw----+ 1 root video 212, 9 2011-08-30 18:52 frontend1
crw-rw----+ 1 root video 212, 7 2011-08-30 18:52 net0
Alles anzeigen
Wenn ich das Dynamite-Plugin nutze, um nur Frontend1 zu laden, fehlen mir demux1 und dvr1.
Daher meine ich derzeit, dass eine Lösung über die Kombination dynamite/udev allein möglicherweise nicht zielführend ist.
keine_Ahnung hat vorgeschlagen , das Kopieren via upstart-script zu regeln, das aber an die Registrierung der Frontends gekoppelt ist. Greift es vorher, wirft es (natürlich) File-not-found-Fehlermeldungen aus.
Die Vorgehensweise wäre dann so:
1. Der Treiber registriert die Frontends.
2. Dadurch löst der upstart-job aus, der frontend1 zu frontend0 macht.
3. Der VDR darf bis dahin nicht auf das frontend zugreifen, weil er sonst das alte frontend0 initialisiert und der Tuner dann auf DVB-C gelockt ist.
4. Falls das Dynamite-Plugin standardmäßig greift, muss man ihm evtl. sagen, dass es nach Registrierung der Frontends noch einen kurzen Moment warten soll.
Ich verweise auch auf die (yaVDR-spezifische) Diskussion hier .
Einen Ansatz habe ich hier gefunden, eine udev-Regel, die für jedes Frontend einen Adapter anlegt:
/etc/udev/rules.d/10-persistent-dvb.rules SUBSYSTEM=="dvb", ATTRS{device}=="0x0374", PROGRAM="/bin/sh -c ' K=%k; K=$${K#dvb}; A=$(echo -n $K | tail -c -1); A=$(echo 100+$A | bc); N=$${K#*.}; N=$(echo -n $N | head -c -1); printf dvb/adapter%%s/%%s0 $A $N; exit 0'", SYMLINK+="%c"
Das Funktionieren setzt aber voraus, dass ich dann in einer (zweiten) udev-Regel die so angelegten Adapter blacklisten kann, damit frontend0 (DVB-C) nicht angesteuert wird. Evtl. kann man beide Regeln auch mergen bzw. so filtern, dass nur die frontend1s als adapter gelistet oder die frontend0s weggeworfen werden.
Aber erstmal muss ich die Regel testen, ob mit ihr mit den frontends auch dvr und demuxe angelegt werden.
Das werde ich die nächsten vier Tage wegen Urlaubs leider nicht schaffen.
L.B.Q.R.img, #cubbies-overlay{ -moz-transition-property: margin, box-shadow, z-index; -moz-transition-duration: 0.1s; -webkit-transition-property: margin, box-shadow, z-index; -webkit-transition-duration: 0.1s; }
.cubbies-selected{ z-index: 9999; box-shadow: 3px 3px 8px -1px blue !important; cursor: pointer !important; margin: -3px 3px 3px -3px; }
.cubbies-selected:active{ box-shadow: 2px 2px 5px -1px darkblue !important; margin: -1px 1px 1px -1px; }
#cubbies-overlay{ position: fixed; z-index: 9999; bottom: 30px; left: 30px; box-shadow: 0 2px 3px rgba(0,0,0,0.8); border: none; }
#cubbies-overlay:hover{ box-shadow: 0 2px 3px rgb(0,0,0); }