Sooo, bin um Einiges weitergekommen.
Dass mit dem Cross-Compiling war ziemlicher Blödsinn, weil es fast unmöglich ist, die Zielgröße für das Flash-Image auf unter 4MB zu drücken. Selbst wenn man alles Unwichtige abschaltet und als Modul auslagert (für später auf'n Stick) kam ich von 9MB auf gerade mal 8MB. Einen Vorteil hatte das Cross-Compiling aber: Ich hab ein neues TVHeadend3.4-Paket bekommen, das später noch nützlich wurde. Anders als Kernel-Pakete sind normale Software-Pakete nämlich nicht vom Kernel abhängig.
Erstmal müssen alle Dateien von hier nach
Zitat
Das geht nur, wenn man vorher extroot installiert hat, also das Dateisystems eines Sticks über dem Root-Dateisystem liegt. Der Speicherplatz des internen Flash-Chips ist mit 4MB nämlich viel zu klein. Extroot wird mit einem einfachen Befehl in der
Zitat
eingeschaltet. Wie das geht, steht genau im Wiki: Hier und hier (konkret am Beispiel). Man muss irgendwie block-mount installieren und einen ganz "normalen" Eintrag in die fstab machen.
Jedenfalls musste danach noch die Firmware des DVB-C-Sticks (2 Dateien) in
Zitat
kopiert werden (gibt's zum Download im Internet). Außerdem sicherheitshalber alles was mit v4l zu tun hat. v4l selbst gibt's nicht in den Paketquellen, aber einige Tools und Treiber.
Die beiden angeblich wichtigen Kernel-Pakete
Zitat
kmod-video-core und kmod-input-core
sind zwar in den Paketquellen, aber dummerweise inkompatibel mit dem offiziellen Openwrt Barrier-Braker. Da haben die Entwickler wohl Mist gebaut. Normalerweise werden bei jedem Cross-Compile-Vorgang auch alle passenden Kernelmodule rausgehauen. Die passen dann immer nur zu dem Kernel von genau diesem Cross-Compile-Vorgang. Deshalb kann man die auch nicht selbst nach-kompilieren. Bislang bin ich aber ohne diese beiden Module ausgekommen.
Die Kernel-Module, die per modprobe für den TVB-C-Stick geladen werden mussten waren:
Zitat
drxk.ko
xc5000.ko
em28xx-dvb
Beim Laden werden automatisch auch alle anderen Pakete geladen, die benötigt werden. Deshalb musste der ganze Ordner media von der Webseite zuvor heruntergeladen werden.
Jetzt kommt der spannende Teil: TVHeadend liegt mir hier in drei Versionen vor, die alle drei schlimme Bugs haben, aber in Kombination funktionieren:
1.) TVHeadend 3.2: Keine Ahnung wo ich das her habe. Das kann jedenfalls die Muxes finden. Das Programm verfügt über Listen ganz vieler Kabelanbieter auf der ganzen Welt. In Version 3.4 ist diese Funktion defekt. Leider versagt Version 3.2 aber beim Suchen nach Services und Sendern. Außerdem hat es viele Fehler bei der Darstellung der Weboberfläche. Deshalb muss es nach dem Finden aller Muxes mit
Zitat
wieder entfernt werden. Die Einstellungen unter
Zitat
werden dadurch nicht mitgelöscht.
Dann kommt die selbst-kompilierte 3.4er-Version drauf. Anders als bei der offiziellen 3.4er-version fehlt dort nicht der Tab "DVB-Inputs" in den Einstellungen der Weboberfläche. Damit lassen sich jetzt also Services und Sender finden. Das Finden der Sender wird nach dem Suchdurchlauf für die Services mit dem Button "Map DVB Services to channels..." manuell angestoßen. Tja und dann gibt's auch irgendwann TV.
Wichtig ist noch zu erwähnen, dass die Datei
Zitat
abgeändert werden muss. TVHeadend kann unter openwrt keinen Benutzer hts anlegen, weil es nur einen Nutzer gibt, nämlich root. Folglich lautet die Zeile zum Starten des TV-Headend-Service:
Zitat
tvheadend -f -u root -g root
-f lädt TVHeadend im Hintergrund (ein sogenannter "fork"), -u ist der Nutzername und -g der Gruppennname. Auch die Option -c /etc/tvheadend, die in der Voreinstellung hinter dem Befehl hängt, kann weg. Schließlich sollen die Einstellungen ganz normal aus dem Nutzerordner (bei openwrt also /root/) gelesen (und auch dorthin geschrieben) werden.
Auch wichtig ist die Einrichtung einer Swap-Partition, weil der Speicher mit 32MB schlicht zu klein ist. Dafür muss das Paket zram-swap installiert werden.
Zitat
schaltet swap manuell ein. Automamtisch soll es wohl mit /etc/config/fstab gehen. Das hat bei mir aber nicht geklappt. Daher habe ich dem Upstart-Script über die Luci-Oberfläche von Openwrt einfach den swapon-Befehl hinzugefügt.
Mein Problem jetzt: Die Performance ist unbefriedigend. Grund ist wahrscheinlich die Speicherauslastung. Die CPU-Werte sind während der TV-Wiedergabe in Ordnung. Hab Swappiness schon auf 90 gestellt (/proc/sys/vm/swappiness ...glaub ich) und einen schnellen USB-Stick benutzt. Außerdem hab ich einen Hub angeschlossen, der 'ne externe Stromversorgung hat.
Trotzdem hakt das Bild sehr und TVHeadend gibt sehr viele Fehlermeldungen raus:
Zitat
erscheint unzählige male im Log. Die Speicherauslastung liegt laut Luci-Weboberfläche dabei immer bei über 200%. Mit
Zitat
kann ich sehen, dass auch fleißig Swap benutzt wird. Der Stick hat Schreibraten zwischen 6MB/s und 20MB/s - das sollte also für ein flüssiges Bild reichen. Hab's mit rsync getestet.
Hat jemand Ideen, wie ich die Performance weiter steigern kann? Hintergrund-Sender-Suche und ähnliches hab ich schon abgeschaltet.
Außerdem funktioniert das automatische Laden der drei Kernel-Module beim Booten nicht. Nur zwei werden geladen. Das dritte muss ich immer manuell nachladen und danach TVHeadend neu starten, weil es den Stick sonst nicht findet. Hab's mit
Zitat
im Upstart-Script unter Luci versucht. Leider kein Erfolg. Auch hab ich den Bugfix angewandt, der hier zu finden ist. Eigentlich gilt das Problem schon als behoben, doch vor der aktuellen Openwrt-Version 14.07, wurde bekannt, dass der Pfad für die Kernel-Module in
Zitat
falsch ist (auf der verlinkten Seite befindet sich functions.sh noch in einem anderen Ordner). Durch den Bugfix laden jetzt die beiden anderen Module automatisch, das dritte fehlt aber immernoch