Konstantin Filtschew WebLog

Der tägliche IT-Wahnsinn

HOWTO: Hauppauge HVR 900 DVB-T Tuner und verwandte Modelle unter Linux nutzen

Das ist die dritte Fassung der Anleitung.

Nutzer bis einschließlich Kernel 2.6.23.X richten sich bitte an der folgenden Anleitung:
http://konstantin.filtschew.de/blog/2006/11/30/.../

Nutzer ab Kernel 2.6.24.X benutzen bitte diese Anleitung.
Die laufende Kernel Version kann unter Linux mit dem Befehl "uname -r" eingesehen werden.

Hintergrundwissen:
Die Treiberstruktur hat sich mit dem Wechsel auf Kernel 2.6.24 komplett geändert. Das aktuelle Modul basiert auf dem Userspace Modul System und erleichtert die Portierung von einer Kernel Version zur nächsten erheblich. Zusätzlich wird das extra runterladen und auswählen der Firmware erspart.

Erklärung zu dem Befehl "sudo":
Sudo erlaubt es als normaler Benutzer Befehle mit root-Rechten (Administrator Rechten) auszuführen. Alle Zeilen, die mit "sudo" beginnen, können auch unter "root" ohne Sudo ausgeführt werden. Der Befehl "whoami" hilft sich zu identifizieren. Wenn man als normaler Benutzer "whoami" ausführt, so erhält man seinen aktuell angemeldeten Benutzernamen zurück. Führt man den Befehl so aus "sudo whoami", so erscheint dort der Benutzername root. Ich werde dieses durchgehend in dieser Anleitung nutzen.

Folgende Pakete (unter Debian) werden für die Erstellung der Module benötigt:

  • make
  • build-essential # (Wird für Debian gebraucht)
  • libncurses5-dev
  • kernel-package #(Wird für Debian gebraucht)
  • gcc #(muss mit der Version übereinstimmen, mit der der Kernel erstellt wurde)
  • linux-source-2.6 #(die zum laufenden Kernel passende Quellen)
  • linux-headers-2.6 #(müssen ebenfalls zur Kernel Version passen)
  • mercurial #(dieses Paket wird benötigt, um die Quellen aus dem Repository zu holen)

Mit dem folgenden Befehl werden die benötigten Pakete auf einem Debian oder Ubuntu Linux System installiert:

CODE:
  1. user@debian:~$ sudo aptitude install make gcc linux-source-2.6 linux-header-2.6 mercurial libncurses5-dev kernel-package build-essential

Linux löst die nötigen Abhängigkeiten selber auf und installiert die zusätzlich benötigen Pakete.

Um die laufende Kernel Version zu bestimmen, reicht der Befehl "uname -a". Meine Ausgabe an einem Debian Lenny (testing) System:

CODE:
  1. user@debian:~$ uname -r
  2. 2.6.25-2-686

Ubuntu Nutzer bekommen ab jetzt die erste Schwierigkeit, die sie bewältigen müssen. Der vorinstallierte Kernel in der aktuellen Ubuntut Hardy (Version 8.04) ist zum Vanilla Kernel (Kernel von www.kernel.org) verändert und bereitet Probleme. Die Ubuntu Entwickler haben haben in den Kernel die Alsa Verison 0.16 integriert, obwohl im Vanilla Kernel 0.15 verwendet wird. Damit entstehen Schwierigkeiten, wenn eigene Module erstellt werden müssen.
Der folgende Eintrag beschreibt das Problem genauer (auf Englisch):

https://bugs.launchpad.net/ubuntu/+bug/204578

Ich werde für Ubuntu Nutzer eine extra Anleitung verfassen, da es doch sehr viele treffen wird. Bitte richtet euch bis dahin an diesem sehr radikalen Skript. Bitte nicht einfach ausführen, da es zu großen Problemen führen kann!

http://mcentral.de/wiki/index.php5/Installation_Guide

Im nächsten Schritt muss untersucht werden, ob die Kernel Quellen installiert und richtig verlinkt sind. Dafür geht man in den Ordner "/usr/src" und für dort "ls -l" aus. Die Ausgabe müsste so ungefähr aussehen:

CODE:
  1. debian:/usr/src# ls -l
  2. total 47412
  3. lrwxrwxrwx  1 root src        19 2008-07-13 18:53 linux -> linux-source-2.6.25
  4. drwxr-xr-x  4 root root     4096 2008-07-13 18:34 linux-headers-2.6.25-2-686
  5. drwxr-xr-x 18 root root     4096 2008-07-13 18:34 linux-headers-2.6.25-2-common
  6. drwxr-xr-x  3 root root     4096 2008-07-13 18:34 linux-kbuild-2.6.25
  7. drwxr-xr-x 21 root root     4096 2008-06-27 01:49 linux-source-2.6.25
  8. -rw-r--r--  1 root root 48478530 2008-06-27 03:27 linux-source-2.6.25.tar.bz2

Die zweite Zeile der Ausgabe "linux -> linux-source-2.6.25" zeigt, dass die von mir gewählten Quellen richtig verlinkt sind.
Fehlt die Zeile, so muss man sie mit dem folgenden Befehl verlinken (-s steht für symbolisch - so wie ein Alias):

CODE:
  1. user@debian:~$ sudo ln -s /usr/src/linux-source-2.6.25 /usr/src/linux

Damit das build-Skript funktioniert, muss zusätzlich in dem Pfad /lib/modules/ die Quellen verlinkt werden

CODE:
  1. user@debian:~$ cd /lib/modules/2.6.25-2-686
  2. user@debian:/lib/modules/2.6.25-2-686# ls -l
  3. total 1760
  4. lrwxrwxrwx 1 root root     35 2008-07-13 18:34 build -> /usr/src/linux-headers-2.6.25-2-686
  5. drwxr-xr-x 2 root root   4096 2008-07-13 18:55 empia
  6. drwxr-xr-x 9 root root   4096 2008-07-13 18:05 kernel
  7. -rw-r--r-- 1 root root 385573 2008-07-13 18:55 modules.alias
  8. -rw-r--r-- 1 root root     69 2008-07-13 18:55 modules.ccwmap
  9. -rw-r--r-- 1 root root 385485 2008-07-13 18:55 modules.dep
  10. -rw-r--r-- 1 root root    147 2008-07-13 18:55 modules.ieee1394map
  11. -rw-r--r-- 1 root root    451 2008-07-13 18:55 modules.inputmap
  12. -rw-r--r-- 1 root root  22301 2008-07-13 18:55 modules.isapnpmap
  13. -rw-r--r-- 1 root root     74 2008-07-13 18:55 modules.ofmap
  14. -rw-r--r-- 1 root root 291390 2008-07-13 18:55 modules.pcimap
  15. -rw-r--r-- 1 root root   1387 2008-07-13 18:55 modules.seriomap
  16. -rw-r--r-- 1 root root 172847 2008-07-13 18:55 modules.symbols
  17. -rw-r--r-- 1 root root 476400 2008-07-13 18:55 modules.usbmap
  18. lrwxrwxrwx 1 root root     28 2008-07-13 18:54 source -> /usr/src/linux-source-2.6.25

Die letzte Zeile "source -> /usr/src/linux-source-2.6.25" sagt aus, dass die Quellen für diesen Kernel unter "/usr/src/linux-source-2.6.25" liegen. Fehlt so ein Eintrag, so holt man dies mit dem folgenden Befehl nach:

CODE:
  1. user@debian:~$ sudo ln -s /usr/src/linux-source-2.6.25 /lib/modules/2.6.25-2-686/source

Damit sollte jetzt alle für das Erstellen der Module vorhanden sein.

Im nächsten Schritt müssen die Quellen runtergeladen werden. Mercurial legt schon einen passenden Ordner an. Bitte den folgenden Befehl ausführen und schauen, ob alles funktioniert hat:

CODE:
  1. user@debian:~$ hg clone http://mcentral.de/hg/~mrec/em28xx-new

Die Ausgabe des "hg clone .." Befehls wird etwas länger sein und deswegen habe ich sie aus der Beschreibung raus gelassen.

Im nächsten Schritt müssen die Module erstellt werden. Das geschieht momentan (das Skript ändert sich immer wieder) so:

CODE:
  1. user@debian:~$ sudo ./build.sh build
  2. rm -rf Module.symvers;
  3. make -C /lib/modules/`if [ -d /lib/modules/2.6.21.4-eeepc ]; then echo 2.6.21.4-
  4. eeepc; else uname -r; fi`/build SUBDIRS=/root/temp/em28xx-new modules
  5. make[1]: Entering directory `/usr/src/linux-headers-2.6.25-2-686'
  6. CC [M]  /home/user/em28xx-new/em2880-dvb.o
  7. CC [M]  /home/user/em28xx-new/em28xx-video.o
  8. CC [M]  /home/user/em28xx-new/em28xx-i2c.o
  9. ....
  10. LD [M]  /root/temp/em28xx-new/xc5000/xc5000-tuner.ko
  11. CC      /root/temp/em28xx-new/zl10353/zl10353.mod.o
  12. LD [M]  /root/temp/em28xx-new/zl10353/zl10353.ko
  13. make[1]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686'

Ich habe die Ausgabe gekürzt, weil es dort nichts interessantes gibt. Warnungen können hier ruhig ignoriert werden. Treten Fehler auf, dann sollte man genauer nach der Meldung schauen. Meistens fehlt irgendwas und das steht in der Meldung meistens genau drin.

Ist das Erstellen der Module erfolgreich gewesen, so müssen im nächsten Schritt die Module installiert werden. Das Erfolgt mit dem Befehl:

CODE:
  1. user@debian:~$ sudo ./build.sh install

Das dauert ein Moment und normalerweise erfolgt keine Ausgabe. Nur im Fehlerfall könnte hier noch was kommen. Meistens wird "sudo" vergessen und das Skript hat keine Schreibrechte auf Systemordner.

Damit wäre die Installation hoffentlich vollendet und man !!!sollte!!! an dieser Stelle das System neustarten. Wenn irgendwelche DVB-Module schon geladen waren, so werden sie spätestens jetzt unter Umständen Ärger machen.

Nach dem Neustart sollten sie die Module mit den folgenden Befehlen fehlerfrei laden lassen:

CODE:
  1. user@debian:~$ sudo modprobe em28xx
  2. user@debian:~$ sudo modprobe em28xx-dvb
  3. user@debian:~$ sudo modprobe em28xx-audio

Das "build.sh" Skript bietet ebenfalls die Möglichkeit alle Module zu laden. Dies geschieht mit dem folgenden Befehl:

CODE:
  1. user@debian:~$ sudo ./build.sh load

Damit kann der Neustart vermieden werden. Wer allerdings beim Laden der Module Probleme bekommt, sollte vorsorglich einen Neustart durchführen, um nicht unnötig Fehler zu produzieren, die durch bereits geladene Module entstehen können!

Wenn ich jetzt meinen Receiver einstecke, so sieht die Ausgabe wie folgt aus:

CODE:
  1. [ 1950.302760] usb 1-1: new high speed USB device using ehci_hcd and address 2
  2. [ 1950.454688] usb 1-1: configuration #1 chosen from 1 choice
  3. [ 1950.456720] em28xx new video device (2040:6500): interface 0, class 255
  4. [ 1950.456783] em28xx: device is attached to a USB 2.0 bus
  5. [ 1950.456834] em28xx #0: Alternate settings: 8
  6. [ 1950.456881] em28xx #0: Alternate setting 0, max size= 0
  7. [ 1950.456889] em28xx #0: Alternate setting 1, max size= 0
  8. [ 1950.456892] em28xx #0: Alternate setting 2, max size= 1448
  9. [ 1950.456894] em28xx #0: Alternate setting 3, max size= 2048
  10. [ 1950.456896] em28xx #0: Alternate setting 4, max size= 2304
  11. [ 1950.456898] em28xx #0: Alternate setting 5, max size= 2580
  12. [ 1950.456900] em28xx #0: Alternate setting 6, max size= 2892
  13. [ 1950.456902] em28xx #0: Alternate setting 7, max size= 3072
  14. [ 1950.814288] trying to set disabled gpio? (00)
  15. [ 1950.926465] attach_inform: tvp5150 detected.
  16. [ 1950.931991] cx25843.c: starting probe for adapter em28xx #0 (0x1001f)
  17. [ 1950.965050] tuner' 0-0061: chip found @ 0xc2 (em28xx #0)
  18. [ 1950.965050] attach inform (default): detected I2C address c2
  19. [ 1951.024446] attach_inform: eeprom detected.
  20. [ 1951.121182] em28xx #0: i2c eeprom 00: 1a eb 67 95 40 20 00 65 50 12 5c 03 82 1e 6a 18
  21. [ 1951.121182] em28xx #0: i2c eeprom 10: 00 00 24 57 66 07 00 00 60 00 00 00 02 00 00 00
  22. [ 1951.121182] em28xx #0: i2c eeprom 20: 46 00 01 00 f0 10 02 00 b8 00 00 00 5b 00 00 00
  23. [ 1951.121182] em28xx #0: i2c eeprom 30: 00 00 20 40 20 6e 02 20 10 01 01 01 00 00 00 00
  24. [ 1951.121182] em28xx #0: i2c eeprom 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  25. [ 1951.121182] em28xx #0: i2c eeprom 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  26. [ 1951.121182] em28xx #0: i2c eeprom 60: 00 00 00 00 00 00 00 00 00 00 18 03 34 00 30 00
  27. [ 1951.121182] em28xx #0: i2c eeprom 70: 32 00 36 00 38 00 39 00 38 00 38 00 37 00 38 00
  28. [ 1951.121182] em28xx #0: i2c eeprom 80: 00 00 1e 03 57 00 69 00 6e 00 54 00 56 00 20 00
  29. [ 1951.121182] em28xx #0: i2c eeprom 90: 48 00 56 00 52 00 2d 00 39 00 30 00 30 00 00 00
  30. [ 1951.121182] em28xx #0: i2c eeprom a0: 84 12 00 00 05 50 1a 7f d4 78 23 f0 fd d0 18 85
  31. [ 1951.121182] em28xx #0: i2c eeprom b0: ff 00 00 00 04 84 0a 00 01 01 20 77 00 40 be 99
  32. [ 1951.121183] em28xx #0: i2c eeprom c0: 05 f0 74 02 01 00 01 79 0c 00 00 00 00 00 00 00
  33. [ 1951.121183] em28xx #0: i2c eeprom d0: 84 12 00 00 05 50 1a 7f d4 78 23 f0 fd d0 18 85
  34. [ 1951.121183] em28xx #0: i2c eeprom e0: ff 00 00 00 04 84 0a 00 01 01 20 77 00 40 be 99
  35. [ 1951.121183] em28xx #0: i2c eeprom f0: 05 f0 74 02 01 00 01 79 0c 00 00 00 00 00 00 00
  36. [ 1951.121183] EEPROM ID= 0x9567eb1a
  37. [ 1951.121183] Vendor/Product ID= 2040:6500
  38. [ 1951.121183] AC97 audio (5 sample rates)
  39. [ 1951.121183] 500mA max power
  40. [ 1951.121183] Table at 0x24, strings=0x1e82, 0x186a, 0x0000
  41. [ 1951.215248] tvp5150 0-005c: tvp5150am1 detected.
  42. [ 1956.755148] successfully attached tuner
  43. [ 1956.815279] em28xx #0: V4L2 VBI device registered as /dev/vbi0
  44. [ 1956.858622] em28xx #0: V4L2 device registered as /dev/video0
  45. [ 1956.858788] em2880-dvb.c: DVB Init
  46. [ 1976.984939] analog tv open()
  47. [ 1976.985010] modelock active!
  48. [ 1976.992903] vbi open()
  49. [ 1976.992935] modelock active!
  50. [ 1957.188645] DVB: registering new adapter (em2880 DVB-T)
  51. [ 1957.188645] DVB: registering frontend 0 (Zarlink ZL10353 DVB-T)...
  52. [ 1957.190935] em28xx #0: Found Hauppauge WinTV HVR 900
  53. [ 1957.192191] em28xx audio device (2040:6500): interface 1, class 1
  54. [ 1957.192771] em28xx audio device (2040:6500): interface 2, class 1
  55. [ 1957.193563] usb 1-1: New USB device found, idVendor=2040, idProduct=6500
  56. [ 1957.193601] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=2
  57. [ 1957.193604] usb 1-1: Product: WinTV HVR-900
  58. [ 1957.193667] usb 1-1: SerialNumber: 4026898878
  59. [ 1958.013115] usbcore: registered new interface driver snd-usb-audio

Nach dem einstecken müssen die folgenden Devices in /dev vorhanden sein:

CODE:
  1. /dev/vbi0
  2. /dev/video0
  3. /dev/dvb/adpater0/demux0
  4. /dev/dvb/adpater0/dvr0
  5. /dev/dvb/adapter0/frontend0

Weitere Hinweise:
Unter Umständen wird es nötig sein den Nutzer zu der Gruppe Video hinzuzufügen, weil er sonst keine Zugriffsrechte auf das Video Device bekommt. Dafür muss der folgende Befehl ausgeführt werden. (Die Variable $USER wird vom System gesetzt und ist der aktuell angemeldete Benutzer):

CODE:
  1. user@debian:~$ sudo adduser $USER video

Wenn Schwierigkeiten nach der erfolgreichen Installation entstehen, dann bitte das System ohne eingesteckten Receiver hoch fahren, dann die Module per Hand laden (unter dmesg die Meldungen beachten) und erst dann den Receiver einstecken. Dadurch sind die Fehler besser sichtbar, weil sie nicht durcheinander in dmesg beim Booten eingestreut werden.

Falls jemand Trotzdem Schwierigkeiten hat, der kann mir Gerne ein Kommentar hinterlassen. Damit es für mich einfacher wird euch zu helfen, bitte ich euch die folgenden Informationen mir zu geben:
- Linux Version (z.B. Ubuntu Hardy 8.04, Debian Linux 4.0 (Etch))
- Kernel Version 2.6.25-2 (Der Befehl: "uname -r" verrät es. Auch bitte angeben, ob es ein selbst erstellter Kernel ist oder vom Distributor)
- Sind die Linux Quellen Installiert? (Folgende Befehle helfen weiter "sudo ls -l /usr/src" und "sudo ls -l /lib/modules/$(uname -r)/source"
- Ist was beim Erstellen scheif gegangen, so bitte ich um die komplette Ausgabe, falls ihr den Fehler nicht selber seht.
- Hat das Installieren der Module funktioniert, aber danach geht irgendwas schief, so bitte ich euch das System ohne Receiver zu starten, dann die Module zu laden und erst dann den Receiver einzustecken. Danach mir bitte die dmesg-Ausgabe ab der Stelle in der die Module geladen wurden geben.
- Bitte alle längeren Ausgaben wie von dmesg oder vom Erstellen des Treibers auf der Seite http://www.pastebin.com oder auf http://ubuntuusers.de/paste/ posten und hier nur den Link rein stellen, da es sonst zu unübersichtlich wird.

Ich hoffe damit möglichst vielen Nutzern zu helfen. Wer mir danke möchte, der möge es mit einem Kommentar tun. Spenden nehme ich gerne als Geschenke von meiner Amazon Wunschliste an.

Copyright © 2012 by: Konstantin Filtschew WebLog • Template by: BlogPimp Lizenz: Creative Commons BY-NC-SA.