[ANNOUNCE] VDR developer version 1.7.34


  • Ich bin gerade dabei, die jüngsten Erkenntnisse einzuarbeiten und werde dann einen entsprechenden Patch hier posten.


    Ich weiß nicht, ob die jüngsten Erkentnisse vollständig sind.


    Aus irgendwelchen Gründen muß ich immer in dvbdevice.h 'typedef unsigned char __u8;' einfügen. Des weiteren scheint das Makefile nicht in der Lage zu sein, die aktuelle Kernel-Configuration zu finden. Ich muß immer dafür sorgen, daß die korrekte compiler.h gefunden wird. Meine Kernel werden alle mit der Option O=/my-kernel-build-dir gebaut.


    Aktuell definiere ich in make.config DVBDIR=/usr/src/media_build_experimental/linux. In /usr/src/media_build_experimental/linux/include/linux muß ich zwei Links setzen:
    dvb -> ../uapi/linux/dvb
    compiler.h -> /usr/src/linux-3.6.11/include/linux/compiler.h


    Das ich dem VDR mitteilen muß, wo neuere Include-Files für DVB liegen, ist klar. Die aktuelle Kernelkonfiguration (compiler.h) sollte er aber selber finden. Warum ich den Patch für __u8 benötige, ist mir auch nicht wirklich klar.


    Gruß
    e9hack


  • Lies mal, was ich vorhin im media_build_experimental Thread geschrieben habe.


    Quote


    Das ich dem VDR mitteilen muß, wo neuere Include-Files für DVB liegen, ist klar. Die aktuelle Kernelkonfiguration (compiler.h) sollte er aber selber finden. Warum ich den Patch für __u8 benötige, ist mir auch nicht wirklich klar.


    Seit geraumer Zeit ergänze ich in Make.config CXXFLAGS um

    Code
    1. -D__user= -D__KERNEL_STRICT_NAMES= -D__u8=uint8_t


    Dann braucht man nichts zu patchen.


    CU
    Oliver


  • Lies mal, was ich vorhin im media_build_experimental Thread geschrieben habe.


    Das hilft mir für die DVB-Header aber nicht für compiler.h.


    Ich würde mir wünschen, daß endgültig mal die Basic's bezüglich include-Files und Diretories in den Makefiles des VDR gerichtet werden würden.


    Quote


    Seit geraumer Zeit ergänze ich in Make.config CXXFLAGS um

    Code
    1. -D__user= -D__KERNEL_STRICT_NAMES= -D__u8=uint8_t


    Dann braucht man nichts zu patchen.


    Schön und warum wird das nicht einfach in den Makefiles vom VDR gerichtet?


    @Klaus:
    Du hast jetzt mehr Geschäft ;-)



    Gruß
    e9hack


  • Das hilft mir für die DVB-Header aber nicht für compiler.h.


    Afaik gibt es compiler.h nicht außerhalb des Kernels.
    Bei media_build_experimental könnte ich eine Dummy-Datei unter .../uapi/linux/compiler.h anlegen.
    Bisher hatte ich bei einem neuen System einmalig "touch /usr/include/linux/compiler.h" gamacht, und alle waren glücklich. :D


    Quote

    Schön und warum wird das nicht einfach in den Makefiles vom VDR gerichtet?


    Dann aber höchstens in Make.config. Siehe meine Lösung.


    Von Haus aus kompiliert VDR problemlos gegen /usr/include/..., alles andere - inkl. Workarounds für Kernel-Interna - muß konfiguriert werden.


    CU
    Oliver


  • Das hilft mir für die DVB-Header aber nicht für compiler.h.


    Ich würde mir wünschen, daß endgültig mal die Basic's bezüglich include-Files und Diretories in den Makefiles des VDR gerichtet werden würden.


    Was genau müsste denn da "gerichtet" werden?


    Ich benutze immer den Treiber von UFO, und wenn ich den baue dann mache ich da

    Code
    1. (cd linux/include/linux; ln -nfs /usr/src/linux/include/linux/compiler.h .)


    weil ich irgendwann mal bemerkt habe, daß das anscheinend notwendig ist.


    Quote


    Schön und warum wird das nicht einfach in den Makefiles vom VDR gerichtet?


    Siehe UFOs Antwort:


    "Von Haus aus kompiliert VDR problemlos gegen /usr/include/..., alles andere - inkl. Workarounds für Kernel-Interna - muß konfiguriert werden."


    Quote


    @Klaus:
    Du hast jetzt mehr Geschäft ;-)


    ???


    Klaus

  • Was ich auch irgendwie merkwürdig finde, ein einfaches 'make' erzeugt den Vdr und Plugins, ein 'make clean' räumt aber die Plugins nicht mit auf. Auch wenn ich dvb-Header, compiler.h und __u8 setzte, hagelt es Fehlermeldungen:


    Eine leere compiler.h reicht bei mir nicht. Verwendeter Kernel ist 3.6.11.


    Und jetzt wird es richtig merkwürdig. Es werden Header von der letzten installierten Vdr-Version verwendet:

    Code
    1. *** Plugin status:
    2. In file included from /usr/local/include/vdr/menuitems.h:14,
    3. from /usr/local/include/vdr/plugin.h:14,
    4. from status.c:9:
    5. /usr/local/include/vdr/dvbdevice.h:19:2: error: #error VDR requires Linux DVB driver API version 5.4 or higher!
    6. g++ -g -O3 -Wall -fPIC -I/usr/src/media_build_experimental/linux/include -Werror=overloaded-virtual -Wno-parentheses -fPIC -D__user= -D__KERNEL_STRICT_NAMES= -D__u8=uint8_t -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I/usr/src/vdr-1.7.34/include -c -DPLUGIN_NAME_I18N='"status"' status.c
    7. g++ -g -O3 -Wall -fPIC -I/usr/src/media_build_experimental/linux/include -Werror=overloaded-virtual -Wno-parentheses -fPIC -D__user= -D__KERNEL_STRICT_NAMES= -D__u8=uint8_t -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I/usr/src/vdr-1.7.34/include -shared status.o -o libvdr-status.so
    8. install -D libvdr-status.so /usr/src/vdr-1.7.34/PLUGINS/lib/libvdr-status.so.1.7.34


    Funktioniert das Plugin jetzt oder nicht? Bei status ist die DVB-Version vermutlich egal.


    Gruß
    e9hack

  • ...
    Eine leere compiler.h reicht bei mir nicht. Verwendeter Kernel ist 3.6.11.


    Es hat ja auch niemand behauptet, daß eine *leere* compiler.h reichen würde.



    Da frage ich mich allerdings, welche VDR-Version du verwendest!?
    Eine Abfrage auf "API version 5.4" hat es bisher nie gegeben. Das Höchste, was bisher abgefragt wurde, war 5.3.


    Klaus


  • Da frage ich mich allerdings, welche VDR-Version du verwendest!?
    Eine Abfrage auf "API version 5.4" hat es bisher nie gegeben. Das Höchste, was bisher abgefragt wurde, war 5.3.


    5.4 habe ich in die Error-Meldung der dvbdevice.h unter /usr/local/include/vdr eingetragen, um zu sehen welche tatsächlich verwendet wird (wenn ohne Pfadangabe). Ansonsten ist es 1.7.34 ohne weitere zusätzliche Plugins, aber mit folgenden Änderungen:


    Der auskomentierte Block am Ende von Make.config scheint für die 5.3 Fehlermeldungen am Anfang verantwortlich zu sein. Wenn aktiv, werden weiterhin falsche Header-Files für Plugins verwendet.


    Unter /usr/src/media_build_experimental/linux/include/linux habe ich noch zwei Links:
    dvb -> ../uapi/linux/dvb
    compliler.h -> /usr/src/linux-3.6.11/include/linux/compiler.h


    Gruß
    e9hack


  • Anbei mal der aktuelle Stand, soweit es die Makefile-Sachen betrifft.


    Irgendwas stimmt beim Erzeugen der Dependency-Files nicht. Es werden andere Include-Optionen als beim Compilieren gesetzt. Da das DVB-Directory an CFLAGS angehängt wird, sollte man CFLAGS auch für die Dependency-Files verwenden.


    Gruß
    e9hack

  • Wie ich schon weiter oben schrieb, hat sich die Directory-Struktur geändert. Du solltest also vor einem "make install" den alten media-Zweig unter /lib/modules/... wegräumen, damit sicher die aktuelle Version (und nur diese) geladen wird.


    Eine andere Möglichkeit wären evtl. noch falsche Plugin-Einstellungen. Was steht in setup.conf bzgl. dvbhhddevice?


    CU
    Oliver

    Hier ein Logauszug mit den VDR-relevanten Meldungen (also auch imon touch, DVB-Treiber etc.):


    Die setup.conf enthält bezüglich dvbhddevice keinerlei einträge.


    unter /lib/modules finde ich nur die Kernel-Verzeichnisse - in den entsprechenden media-Unterverzeichnissen sind Module mit Datum des letzten
    make install vom media_build_experimental vorhanden.

    Gruss,
    Michael

    VDR2: Ubuntu 20.04.2 LTS, 5.4.0-66-generic x86_64, TT-S2 6400 DVB-S, VDR 2.4.x, TouchTFT. Plugins: remote,dvbhddevice,live,graphtft,epgsearch,extrecmenu,

  • Update:


    habe mal mehrere male make distcleans gemacht und irgendwie alles aufgeräumt. Bin dann nach der Anleitung aus dem Wiki für Ubuntu vorgegangen, natürlich mit den Anpassungen für
    OpenSuse. Habe also nochmals die DVb-Treiber aus dem media_build_experimental ausgecheckt, ge-clean-t, ge-make-d und installiert. So wie es - für mich als Laie - aussieht, *kann* er jetzt
    nur noch die Treiber aus dem Experimental-Zweig laden (entnehme ich z.B. der Meldung beim Laden der Module). Habe in der folge auch den VDR nochmals komplett aufgeräumt.
    Status jetzt: Alles was OSD angeht kein Text, Bild und Ton einwandfrei.
    :rolleyes:

    Gruss,
    Michael

    VDR2: Ubuntu 20.04.2 LTS, 5.4.0-66-generic x86_64, TT-S2 6400 DVB-S, VDR 2.4.x, TouchTFT. Plugins: remote,dvbhddevice,live,graphtft,epgsearch,extrecmenu,


  • Du solltest Dir dringend zu Gemüte führen, was ich hier und hier geschrieben habe!


    Wenn Du dies auf Deine Konfiguration überträgst, nimmt vdr den richtigen Treiber und es reicht eine leere compiler.h. Man braucht keine Symlinks, und man sieht auch sofort, wenn die falsche frontend.h genommen wird.


    CU
    Oliver


  • Du solltest Dir dringend zu Gemüte führen, was ich hier und hier geschrieben habe!


    Wenn Du dies auf Deine Konfiguration überträgst, nimmt vdr den richtigen Treiber und es reicht eine leere compiler.h. Man braucht keine Symlinks, und man sieht auch sofort, wenn die falsche frontend.h genommen wird.


    OK, dann nochmal:
    1) Make.config erzeugen (DVBDIR und __u8 definieren)


    2.) Makefile anpassen, da sonst kein Plugin compiliert werden kann:


    3.) Links aus media_build_experimental entfernen und leere compiler.h per 'touch /usr/include/linux/compiler.h' erzeugen.
    4.) Compilieren mit folgendem Resultat:


    Es läßt sich mit einer leeren compiler.h nicht bauen!!


    Die Fehlermeldungen 'VDR requires Linux DVB driver API version 5.4 or higher!' kommen von falsch erzeugten dependency-Dateien. Ich habe da im Text der Fehlermeldung die Version auf 5.4 erhöht.


    Gruß
    e9hack

  • kls : Wenn man wie in der Mailinglist besprochen vor die jeweilige Einstellung "export" schreibt landet diese im Plugin.


    Ein zusätzliches PLGCFG ist daher nicht nötig.


    In welcher Datei willst du das export?


    cu

  • Make.config


    Die wird vom Pluginmakefile doch nicht mehr includiert. Wenn man make im Pluginverzeichnis direkt aufruft greift das also nicht.


    BTW: Schön das es nun doch ein gemeinsames Pluginconfigfile gibt :) Das vereinfacht einiges.


    cu


  • Anbei mal der aktuelle Stand, soweit es die Makefile-Sachen betrifft.
    Hoffentlich glättet das die Wogen wieder etwas... ;-)


    Ich habe probiert, VDR 1.7.34 und die mitgelieferten Plugins zusammen mit dem Patch vdr-1.7.34-makefile-2.diff zu übersetzen und installieren. Dabei ist in Make.config abweichend vom Template:

    Code
    1. INCDIR = $(PREFIX)/include
    2. LOCDIR = $(PREFIX)/share/vdr/locale
    3. LIBDIR = $(PREFIX)/lib/vdr


    Ich gehöre also zu denen, die VDR "ins System installieren" :)


    Dabei gibt es aber zwei Fehler:

    • Bei "make all" gibt es einen Fehler beim Übersetzen der Plugins, da diese die VDR-Includes nicht finden. Das ist klar, da diese ja noch nicht in "INCDIR" installiert wurden.
    • Bei "make install" werden die Plugin-Libs nach "/" installiert, da die Plugins die Pkgconfig-File nicht finden. Das liegt daran, dass "VDRDIR=." übergeben wird und das PKGCFG Makro dadurch falsch gesetzt wird.


    Meiner Meinung nach dürften die Targets "all" und "install" nicht von "plugin" und "install-plugins" abhängen, da ich ja erst dann Plugins übersetzen kann, wenn die Dateien des VDR (insbesondere die Includes) installiert worden sind. Die folgenden Änderungen sorgen daher bei mir dafür, dass ein "make, make install, make plugins, make install-plugins" reibungslos funktioniert.