[[Vorlage(Archiviert)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:sudo: Root-Rechte] [:Kernelmodule: Umgang mit Kernelmodulen (Treibern)] }}} [[Inhaltsverzeichnis()]] Folgender Beitrag soll eine Hilfestellung zur Lösung für das Problem geben, dass eine PCMCIA-DVB-T-Karte (mit Philips [:Archiv/saa7134:] Chip) nach dem Ubuntu-Start nicht korrekt geladen wird. = Problembeschreibung = Das Laden der Treiber hatte bei den früheren Ubuntu-Versionen immer funktioniert. Seit den 9.x-Versionen bis aktuell funktioniert das automatische Laden der Firmware dieser TV-Karte meistens nicht mehr korrekt. Fehlermeldung[1]: {{{#!vorlage Befehl dmesg }}} {{{ DVB: registering new adapter (saa7133[0]) DVB: registering adapter 0 frontend 0 (Philips TDA10046H DVB-T)... tda1004x: setting up plls for 48MHz sampling clock tda1004x: found firmware revision ea -- invalid }}} In diesem Fall kann man mit TV-Programmen nicht mehr auf die Karte zugreifen, Radioempfang o.ä. geht möglicherweise noch. Die Ursache für die fehlerhafte Initialisierung könnte in einem zu frühen Laden der TV-Karten-Firmware begründet liegen. Kommt es zu diesem Fehler, wird anscheinend eine Blockade des Busses der Karte ausgelöst und die Firmware lässt sich in diesem Fall nicht laden - alle weiteren Aktionen über Laden und Entladen von Modulen sind dann zwecklos, die Karte reagiert nicht mehr ([http://www.mail-archive.com/universe-bugs@lists.ubuntu.com/msg186471.html Erklärung des Firmware-Programmierers(?)] {en}). Da hilft dann nur noch Abziehen und wieder Einstecken der Karte oder ein Neustart. Beim Verwenden von Programmen, die auf die TV-Karte zugreifen, wird die Firmware in die Karte geladen. Einigen Beiträgen zufolge kann unter Verwendung von TV-Programmen unter Windows die Firmware ebenfalls in die Karte geladen werden (die Firmware bleibt dann auch nach dem Start von Ubuntu in der Karte erhalten). Nach dem Trennen der Stromversorgung muss die Firmware erneut geladen werden. = TV-Karten-Info = Zur TV-Karte werden folgende Informationen geliefert: {{{#!vorlage Befehl lspci }}} {{{ 06:00.0 Multimedia controller: Philips Semiconductors SAA7131/SAA7133/SAA7135 Video Broadcast Decoder (rev d0) }}} {{{#!vorlage Befehl dmesg }}} {{{ subsystem: 5168:3502, board: LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB [card=94,insmod option] }}} = Vorgehensweise = Folgende Dateien werden bearbeitet: * '''/etc/modprobe.d/blacklist.conf''' * das Modulskript [[Anhang(saa7134/Module_korrekt_laden/lade_tv-module.sh, lade_tv-module.sh)]] {dl} * '''/etc/rc.local''' == Blacklisting == Der erste Schritt ist, die TV-Karten-Module zu blacklisten, damit diese beim Booten gar nicht erst geladen werden und die Blockade ausgelöst wird. Dazu wird die Datei '''/etc/modprobe.d/blacklist.conf''' in einem Editor [2] mit Root-Rechten [3] um folgende Einträge erweitert {{{ ... # TV-Karten-Treiber/Firmware: blacklist tda1004x blacklist saa7134 blacklist saa7134_dvb blacklist saa7134_alsa }}} Ziel der Vorgehensweise ist es, das Modulmanagement für die Karte dem System zu entziehen und dieses selbst zu steuern. = Modulskript = Das Skript herunterladen oder in einen Editor kopieren, und unter einem aussagekräftigen Namen abspeichert, z.B als '''lade_tv-module.sh'''. Zur Erläuterung der Funktion findet man ein paar Kommentierungen zu den einzelnen Aktionen im Skript. {{{#!code bash # -> starten ueber /etc/rc.local # # Anwendungsfall: # dmesg sollte nach Anwendung des Scripts (und eigentlich regulaer) # ausgeben: # > tda1004x: found firmware revision 29 -- ok # Ueber dieses Script koennen die (vorher geblacklisteten) Kartentreiber # nachgeladen werden. # # Lademoeglichkeiten: # # 1) Manchmal klappt das direkt ueber das Nachladen # des _dvb-Moduls (muss normalerweise vorher entladen werden, # sonst tut sich nichts). # Dies kann funktionieren, wenn man die Karte im Betrieb entfernt # und wieder eingesteckt hat. # 2) Wenn das nicht klappt, vorher das tda-Modul entladen, # neu laden und dann Schritt 1) versuchen. # # Ausgangslage: # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 1) "Geblacklistete" TV-Module (alles) # Dabei in # /etc/modprobe.d/blacklist.conf # eintragen: # # blacklist tda1004x # blacklist saa7134_dvb # # 2) zunächst keine Module über dieses Script laden # # Es sind mit lsmod keine tda- oder saa-Module sichtbar! # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CMD=/sbin/modprobe ins="$CMD -v" # Alias fuer "install" rem="$CMD -vr" # Alias fuer "remove" ROOT=root if [ $USER != $ROOT ] then echo "! Das Script kann nur unter \"$ROOT\" laufen" exit 1 fi echo "* Lade TV-Module:" echo " Lade Treiber 1/2 ..." # Laden des Moduls # saa7134 (quasi das Hauptmodul) # mit Optionen, das ist OK. # Kartennummer: aus http://wiki.ubuntuusers.de/saa7134 # 94 -> LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB [5168:3306,5168:3502,5168:3307,4e42:3502] # Dieses zieht einige saa- sowie einige tda-Module # mit, jedoch nicht das wichtige Firmware-Modul tda1004x. # -> funktioniert soweit, Karte leuchtet (aktiviert). # Fuehrt zur Ausgabe von # saa7133[0]: subsystem: 5168:3502, board: LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB [card=94,insmod option] # Das Modul laedt (u.a.) folgende weitere davon abhaengige Module: # saa7134_* $ins saa7134 card=94 # (Laden dauert einige Zeit) echo " ... " sleep 2 # Noch fehlendes Modul # tda1004x # laden (laedt die Firmware) echo " Lade Firmware ..." $ins tda1004x echo " ... " sleep 2 modul=saa7134_dvb echo " Lade Treiber 2/2 ..." # OK-Meldung wird noch nicht ausgegeben, # es muss das bereits geladene _dvb-Modul neu geladen werden: # Das Laufende entfernen und dieses neu laden: echo " Entferne geladenen Treiber ... " $rem $modul # Entfernen dauert etwas; hier ist sinnvoll, # etwas zusaetzliche Wartezeit zu geben, # damit das Neuladen der Treiber erfolgreich ist. echo " ... " sleep 2 echo " Lade Treiber neu ... " $ins $modul # => Nun sollte die Karte funktionieren. }}} {{{#!vorlage Hinweis Wichtig sind die `sleep`-Angaben nach den einzelnen Aktionen. Beim Versuch, diese herauszunehmen, trat das bekannte Problem wieder auf. Hier gibt es also vielleicht noch Optimierungspotenzial. An irgendeiner, ggf auch mehreren Stellen scheint es also so zu sein, dass das Problem aufgrund einer zu schnellen Abfolge der Aktionen begründet liegt. Wahrscheinlich genau das, was sonst ohne manuelle Eingriffe systemgesteuert zu diesem Problem führt. }}} Ausgabe des Skripts: {{{ * Lade TV-Module: Lade Treiber 1/2 ... insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/tveeprom.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/videobuf-core.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/videobuf-dma-sg.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/v4l2-compat-ioctl32.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/v4l1-compat.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/videodev.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/v4l2-common.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/common/ir-common.ko install /sbin/modprobe --ignore-install saa7134 card=94 && { /sbin/modprobe --quiet --use-blacklist saa7134-alsa ; : ; } insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/saa7134/saa7134.ko card=94 insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/saa7134/saa7134-alsa.ko index=-2 Lade Firmware ... insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/dvb/frontends/tda1004x.ko Lade Treiber 2/2 ... Entferne geladenen Treiber ... rmmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/saa7134/saa7134-dvb.ko rmmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/videobuf-dvb.ko rmmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/dvb/dvb-core/dvb-core.ko Lade Treiber neu ... insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/dvb/dvb-core/dvb-core.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/videobuf-dvb.ko insmod /lib/modules/2.6.32-24-generic/kernel/drivers/media/video/saa7134/saa7134-dvb.ko }}} == kurzes Modulskript == Hier folgt ein kürzeres Skript, das von dem oberen abgeleitet wurde und zum gleichen Ergebnis geführt hat. Das `X` nach `card=` ist durch die entsprechende Zahl für die verwendete TV-Karte zu ersetzen (siehe [:Archiv/saa7134#Liste-der-Karten:Liste]). Wenn es nicht automatisiert mit Hilfe der Datei [:rc.local:rc.local] gestartet wird (siehe unten [#Autostart-fuer-das-Modulskript Autostart für das Modulskript]), muss es mittels [:sudo:] mit Superuser-Rechten ausgeführt werden. {{{#!code bash #!/bin/bash sleep 5 modprobe tda1004x modprobe saa7134 card=X modprobe saa7134_dvb modprobe saa7134_alsa }}} == Autostart für das Modulskript == Damit die Aktionen wieder automatisiert ablaufen können, braucht man für die Kommandos eine "Autostartrampe". Dazu bietet sich die Datei [:rc.local:rc.local] an. Diese ist standardmäßig leer. Hierzu kann man das Modulskript in '''/etc/rc.local''' eintragen [2] [3] (oberhalb von `exit 0`) eintragen, z.B. als {{{ # By default this script does nothing. /pfad/zum/Skript/lade_tv-module.sh exit 0 }}} = Kontrolle = Wird damit nun das System gestartet, sollte man, wenn alles richtig funktioniert hat, folgende Ausgabe erhalten: {{{#!vorlage Befehl dmesg }}} {{{ ... tda1004x: setting up plls for 48MHz sampling clock tda1004x: found firmware revision 29 -- ok }}} #tag: Hardware, Multimedia, TV