[vtuner-ng] Aktualisierter vtuner für kernel >= 4.16

  • Besser als mit dem satip-plugin?

    Ich kann da keine Zeitmessung machen, aber es fühlt sich viel schneller an. Es ist nicht gerade so, daß ich lange warten müsste, aber der direkte Vergleich ist nicht schlecht.

    Ich nutze es an einer OctopusNet (Firmware Version: octonet-pro-2.1.0)

    Dann mach ich mal nen Upgrade. Aber vorher mal den Thread dazu lesen. Ich meine, es gäbe was zu beachten.

    Was bedeutet denn lokal?

    Der Entwicklungsrechner und nicht auf dem entfernten (50cm) N2+ (arm). Da kann ich auch vernünftig debuggen und weiß jetzt, wo ich auf dem N2+ schauen muss. Ein ioctl scheint auf dem N2+ keine Daten zu liefern oder nichts vernünftiges: VTUNER_GET_MESSAGE

  • ich habe hier mal die Info´s zu vtuner_ng zusammengefasst.

    Wenn was fehlt oder nicht korrekt ist bitte schreiben


    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * NC * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) *

    (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • Das ist aber interessant, eine DISEQC_MSG, wird src richtig gesetzt?

    ja, src passt

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * NC * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) *

    (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • Mein Problem mit LibreELEC wurde identifiziert. Die Besonderheit ist, daß ein 64-Bit Kernel mit 32-Bit Userspace Programmen arbeitet (zumindest noch bei den meisten Versionen).


    Damit berechnet das Kernel-Modul einen anderen Wert für die ioctls, als das satip Program.

    Die Ursache sind die Defines

    Code
    #define VTUNER_GET_MESSAGE  _IOR(VTUNER_MAJOR, 1, struct vtuner_message*)

    Der Kernel kommt auf sizeof(struct vtuner_message*) == 8, während satip daraus eine 4 macht.


    Das nächste Problem ist, daß ein Kompatibiltätslayer für 32/64 Bit eingefügt werden muss. Aber der ist hier trivial:

    Code
    .unlocked_ioctl = vtunerc_ctrldev_ioctl,
    .compat_ioctl = compat_vtunerc_ctrldev_ioctl,

    compat_vtunerc_ctrldev_ioctl ruft einfach vtunerc_ctrldev_ioctl auf.


    Zusätzlich habe ich noch Warnungen beseitigt. Im angehängtem Patch findet sich alles. Und damit kann ich endlich an die Integration gehen :)


    satip_vtunerc.patch.txt

  • Wenn es funktioniert sind die Umschaltzeiten gefühlt halb so lang wie mit dem satip-Plugin.

    Aber dafür funktionieren nur ca. die Hälfte der Sender. Es gehen z.B. SWR RP HD, 3sat HD, BR Süd HD,

    aber z.B. nicht Das Erste HD, ZDF HD, hr-fernsehen HD.

    Ich habe mal Hi/Lo-Band und H/V Polarisierung gerpürft aber kein Muster gefunden. firewalld hatte ich auch schon testweise ausgeschaltet.

    Im satip Log werden mit -m 7 auch jede Menge "RTP: rd 1328 wr 1316" angezeigt, also wird etwas übertragen.


    Mit dem satip-Plugin gehen alle Sender problemlos.

  • nicht Das Erste HD, ZDF HD, hr-fernsehen HD

    Das Erste HD:

    Code
    PLAY rtsp://satip.lan/stream=137?src=1&fe=4&freq=11493.0&pol=h&msys=dvbs2&mtype=8psk&sr=22000&fec=23&ro=0.35&plts=on&pids=5101,5102,5103,5107,5106,5105 RTSP/1.0



    ZDF HD:

    Code
    PLAY rtsp://satip.lan/stream=137?src=1&fe=4&freq=11361.0&pol=h&msys=dvbs2&mtype=8psk&sr=22000&fec=23&ro=0.35&plts=on&pids=6110,6120,6121,6123,6122,6131 RTSP/1.0
  • hatte das früher auch mal aber der kernel part hatte mehr Funktionen.

    Äh, nö? Das war nur "gedankenloser" umgesetzt. Jeder DVB-Aufruf wurde einfach 1:1 an den Userspace weitergeleitet, ob sinnvoll oder nicht. Und manches echt dämlich, z.B. Status und Signalstärkenänderungen:

    Code
    #define MSG_READ_STATUS            3
    #define MSG_READ_BER            4
    #define MSG_READ_SIGNAL_STRENGTH    5
    #define MSG_READ_SNR            6
    #define MSG_READ_UCBLOCKS        7

    Dafür gibt es jetzt in vtuner-ng den ioctl VTUNER_SET_SIGNAL der vom Userspace-Programm gesetzt wird und intern folgende Struktur setzt:

    Code
    struct vtuner_signal
    {
        u8 status;
        u32 ber;
        u16 ss;
        u16 snr;
        u32 ucb;
    };

    Wenn nun über den Adapter der Status oder die Signalstärke gelesen wird kann das alles intern aus dem Speicher beantwortet werden -> viel schneller als der ioctl-Käse aus dem Original.


    Genauso diese "sinnvollen Funktionen" :

    Code
    #define MSG_SET_TONE            8
    #define MSG_SET_VOLTAGE            9
    #define MSG_ENABLE_HIGH_VOLTAGE        10

    Flogen bei mir alle raus, gibt es eh' nur bei DVB-S/S2 und z.B. nicht bei DVB-C/T ... wird intern ohne ioclt abgehandelt und alles zusammen mit SET_FRONTEND in den Userspace übergeben.


    Ebenso diese beiden:

    Code
    #define MSG_SEND_DISEQC_MSG        11
    #define MSG_SEND_DISEQC_BURST        13

    Eventuell macht es Sinn die beiden als ein Info-ioctl rauszuführen, konnte mir nur bislang keiner einen Anwendungsfall schildern :)

  • Ich habe noch mal eine kleine Änderung am Makefile für das Kernel-Modul gemacht, da man depmod die Kernelversion mitgeben muss, wenn man für einen anderen Kernel baut, als gerade läuft, also für den Kernelupdatefall...

    Gentoo Linux ~ VDR 2.6.9 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 16GB RAM ~ NVIDIA T400

  • Das Erste HD:

    Ich glaube Dir ja, dass es bei Dir (und anderen) geht. Sonst hätte es auch schon entsprechende Meldungen gegeben.

    Aber woran kann das liegen?

    Ich bekomme übrigens den gleichen Kernel-Fehler wie uwe67, aber nicht im Zusammenhang mit dem Umschalten auf die nicht funktionierenden Sender.


    Edit: Das Erste HD:

    Sieht so aus, als würde er keine Nutzdaten erkennen ....

  • Ich bekomme auf meiner X86 Maschine einen Segfault wenn ich auf RTL HD schalte:

    Code
    BUG: unable to handle page fault for address: 000000000000115c
    Dez 26 13:54:52 midas kernel: #PF: supervisor write access in kernel mode
    Dez 26 13:54:52 midas kernel: #PF: error_code(0x0002) - not-present page
    Dez 26 13:54:52 midas kernel: PGD 80000001d3bd8067 P4D 80000001d3bd8067 PUD 2125cf067 PMD 0 
    Dez 26 13:54:52 midas kernel: Oops: 0002 [#1] PREEMPT SMP PTI
    Dez 26 13:54:52 midas kernel: CPU: 1 PID: 6893 Comm: satip Tainted: P           OE  X  N 5.14.21-150400.24.28-default #1 SLE15-SP4 915f2e0498b5123d9c51edb9ffca1b68d958fb7f
    Dez 26 13:54:52 midas kernel: Hardware name: Gigabyte Technology Co., Ltd. Z97-D3H/Z97-D3H-CF, BIOS F9 09/18/2015
    Dez 26 13:54:52 midas kernel: RIP: 0010:vtunerc_ctrldev_write+0x1a2/0x430 [vtunerc]
  • Bin nun etwas weitergekommen und es liegt an dem Versuch die PIDS zu filtern. Wenn ich in vtuner_ctrl_dev.c das senden des fillers rausnehme dann klappt auch ARD und ZDF und RTL HD crasht nicht mehr.

    Warum werden denn da überhaupt die PIDS gefiltert, das macht der vdr dann doch eh nochmal.

  • Warum werden denn da überhaupt die PIDS gefiltert, das macht der vdr dann doch eh nochmal.

    Der SAT>IP Standard (https://www.satip.info/sites/s…ication_version_1_2_2.pdf) sieht vor, dass ein Client (die wichtigste Anwendung dafür dürfte sein Bandbreite zu sparen) bestimmte PIDs anfordern darf.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Wenn ich in vtuner_ctrl_dev.c das senden des fillers rausnehme dann klappt auch ARD und ZDF und RTL HD crasht nicht mehr.

    Danke, damit gehen bei mir auch die bisher nicht funktionierenden Sender.

    Allerdings crasht das Kernelmodul trotzdem nach dem Durchzappen von ca. 15 Sendern beim Testen.


    Zu den PIDs: Es werden doch nur die vom SATIP-Server geliefert, die er VDR anfordert .... ?!?

  • [ 5377.836502] RIP: 0010:vtunerc_ctrldev_write+0x16f/0x490 [vtunerc]

    Ja genau diesen crash hatte ich auch. Scheint also nicht behoben zu sein. Da muss Joe_D noch nacharbeiten mit den PIDs und dem crash.

    Ich habe nicht gesehen das hier das schreiben gegen mehrfachaufrufe geschützt ist. Allerdings kenne ich mich mit Linux Treibern nicht gut aus.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!