• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Wintv-Nova-HD-S2 Fehler im Kernel ab 3.3

pitfl

Member
Hallo,
habe einen Bericht bei Heise gelesen, dass die Hauppauge Wintv-Nova durch einen Kernelfehler ab Kernel 3.3 nicht mehr richtig funktioniert.
Dort war auch ein Link auf nachfolgenden Patch der das Problem beheben soll.
Hier mal der Patch:
Code:
From: Knut Petersen <Knut_Petersen <at> t-online.de>
Subject: [REGRESSION][PATCH] Fix kernel 3.3 DVB-S support
Newsgroups: gmane.linux.kernel, gmane.linux.drivers.video-input-infrastructure
Date: 2012-03-19 12:58:44 GMT (34 weeks, 6 days, 20 hours and 56 minutes ago)

Kernel 3.3 breaks DVB-S reception on the
Hauppauge WinTV Nova HD-S2 and similar
cards.

The attached patch fixes this problem.

cu,
  knut

From 10934b412eb30fa815bad392b120eb9b83fe4ab5 Mon Sep 17 00:00:00 2001
From: Knut Petersen <Knut_Petersen <at> t-online.de>
Date: Mon, 19 Mar 2012 13:31:24 +0100
Subject: [PATCH] Fix DVB-S regression caused by a missing initialization

commit 7e0722215a510921cbb73ab4c37477d4dcb91bf8 killed
struct dvb_frontend_parameters and introduced bool re_tune
instead, but the patch missed that re_tune needs an
initialization here (previously the same effect was
reached by the params = NULL).

This patch fixes broken DVB-S support for the Hauppauge
WinTV Nova HD-S2 and similar hardware in kernel 3.3.

Signed-off-by: Knut Petersen <Knut_Petersen <at> t-online.de>
---
 drivers/media/dvb/dvb-core/dvb_frontend.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c
index fbbe545..a9602e0 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -650,6 +650,7 @@ restart:
 			switch (algo) {
 			case DVBFE_ALGO_HW:
 				dprintk("%s: Frontend ALGO = DVBFE_ALGO_HW\n", __func__);
+				re_tune = false;

 				if (fepriv->state & FESTATE_RETUNE) {
 					dprintk("%s: Retune requested, FESTATE_RETUNE\n", __func__);
-- 
1.7.9.2

Ich habe leider keine Ahnung was ich damit anfangen soll. Könnte mir bitte jemand helfen?

mfg
pitfl
 

josef-wien

Ultimate Guru
Die Kernel-Quellen müssen installiert sein.

Das "automatische" Ändern der Datei mit
Code:
cd /usr/src/linux
patch -p 1 < /pfad/zum/patch
wird nur klappen, wenn Deine Datei der des patch-Erstellers genau entspricht. Daher fügst Du besser als root mit einem Editor in der Datei /usr/src/linux/drivers/media/dvb/dvb-core/dvb_frontend.c die im patch genannte Zeile
Code:
            re_tune = false;
an der gewünschten Stelle (das ist nach zirka 650 Zeilen, die genaue Position mußt Du an Hand der im patch angeführten Zeilen davor und danach suchen) ein, und speicherst die Datei.

Jetzt steht der Erzeugung des Moduls als root nichts mehr im Weg:
Code:
cd /usr/src/linux
make O=/lib/modules/$(uname -r)/build oldconfig
make O=/lib/modules/$(uname -r)/build M=$(pwd)/drivers/media/dvb/dvb-core
make O=/lib/modules/$(uname -r)/build M=$(pwd)/drivers/media/dvb/dvb-core modules_install
depmod -a
Die während des Kompilierens erzeugten Zwischendateien kannst Du bei Bedarf mit
Code:
make O=/lib/modules/$(uname -r)/build M=$(pwd)/drivers/media/dvb/dvb-core clean
wieder entfernen.

Wenn Du einen neuen Kernel installierst, mußt Du diese Prozedur wiederholen. Das neue Modul ist im Verzeichnis /lib/modules/$(uname -r)/extra gespeichert, wenn Du es dort löschst, um das Original-Modul zu verwenden, mußt Du wieder
Code:
depmod -a
ausführen.

pitfl schrieb:
Opensuse 11.3 (i586)
1. Dessen Kernel ist viel älter als 3.x.
2. http://en.opensuse.org/Lifetime

P. S. Beim Kernel 3.6 finde ich
Code:
			case DVBFE_ALGO_HW:
				dprintk("%s: Frontend ALGO = DVBFE_ALGO_HW\n", __func__);

				if (fepriv->state & FESTATE_RETUNE) {
					dprintk("%s: Retune requested, FESTATE_RETUNE\n", __func__);
					re_tune = true;
					fepriv->state = FESTATE_TUNED;
				} else {
					re_tune = false;
				}
(aber das könnte auch in früheren Versionen der Fall sein).
 
OP
P

pitfl

Member
Hallo josef-wien,
ein ganz großes Danke für Deine sehr umfangreiche und ausführliche Antwort.
Leider werde ich wohl den Patch vergessen können. Suse 12.2 verwendet ja den Kernel 3.4.11-2.16. Ich finde in der dvb_frontend.c überhaupt keine dieser Zeilen.

Code:
case DVBFE_ALGO_HW:
             dprintk("%s: Frontend ALGO = DVBFE_ALGO_HW\n", __func__);
+            re_tune = false;

Somit kann ich auch das "re_tune = false" nicht einfügen.
Sehr Schade.
Trotzdem, Dir ein ganz herzliches Dankeschön.

ps: Salz auf meinen Kopf streu, habe sofort meine Signatur geändert.

mfg
pitfl
 
OP
P

pitfl

Member
HI, hast Recht,dass glaube ich mittlerweile auch. Weiß der Kuckuck warum die Suchfunktion mir diesen Abschnitt nicht angezeigt hat.
Kiffe eigentlich nicht!
Habe die Datei nochmal per Hand durchforstet und habe die Stelle gefunden.
Dann werde ich mal das patchen probieren und hoffen dass es etwas bringt.

mfg
pitfl
 
Oben