Patchen und kompilieren eines Kernel-Moduls

Hinweis: In dem Thema Patchen und kompilieren eines Kernel-Moduls gibt es 6 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hallo,


    ich wollte eine DVB-S2 PCIe-Karte (TechnoTrend TT-budget S2-4200 Twin)
    unter openSUSE Leap 42.3 (Kernel 4.4.104-39-default) betreiben (mit VDR).


    Vorab: Die Frage ist etwas ungewöhnlich, da ich soweit bereits erfolgreich war. Ich
    denke aber, dass ich nicht den korrekten Weg gegangen bin. Daher meine Bitte
    um Kommentare. Ich habe trotz intensiver Recherche nichts gefunden was
    wirklich auf meinen Anwendungsfall passt, daher war da viel Raterei dabei.


    Ablauf:

    • Herausfinden ob Karte unterstützt
      Laut TechnoTrend TT-budget S2-4200 Twin - LinuxTVWiki

    • Da mein Kernel älter -> muss Kernelmodul patchen
    • Da ich grenzenloser Optimist bin, trotzdem ausprobiert, ist außerdem immer
      gut vorher/nachher zu kennen:

      • Karte wird nicht erkannt da:

        • kein /dev/dvb
        • smipcie: Unknown symbol dvb_dmxdev_init (err 0)
    • Kernermodul patchen und kompilieren
      Aktive Repositories: openSUSE-Leap-42.3-Non-Oss, openSUSE-Leap-42.3-Oss,
      openSUSE-Leap-42.3-Update, openSUSE-Leap-42.3-Update-Non-Oss
    Code
    zypper in kernel-source
    cd /usr/src/linux
    patch -p1 < ~/1-2-smipcie-add-support-for-TechnoTrend-S2-4200-Twin.patch
    make modules SUBDIRS=drivers/media/pci/smipcie
    make modules_install SUBDIRS=drivers/media/pci/smipcie


    • Testen, leider kein Erfolg. Hier hätte ich gedacht, dass ich fertig wäre
      aber alles war wie zuvor. rmmod/modprobe oder auch reboot haben nichts
      geändert. Hier ist die Hauptfrage: Warum?


    • Manuell smipcie.ko an die geschätzt richtige Stelle kopieren:


    Code
    cp drivers/media/pci/smipcie/smipcie.ko
    /lib/modules/4.4.104-39-default/kernel/drivers/media/pci/smipcie/
    • Testen, jetzt sieht's erwartungsgemäß aus:


    Für den Inhalt des Beitrages 117562 haftet ausdrücklich der jeweilige Autor: achimoe

  • Du brauchst kernel-devel und kernel-default-devel, sowie make und mindestens gcc.


    Wobei der Kernel von Leap 42.3 auch schon Patches aus Kernel 4.9 enthält....


    Und es auch noch den Kernel aus kernel:stable gibt:

    Code
    lsb-release -id && uname -a
    Distributor ID: openSUSE Leap
    Description:    openSUSE Leap 42.3
    Linux linux64 4.14.15-1.gfe1d712-default #1 SMP PREEMPT Tue Jan 23 20:12:07 UTC 2018 (fe1d712) x86_64 x86_64 x86_64 GNU/Linux


    Für den Inhalt des Beitrages 117563 haftet ausdrücklich der jeweilige Autor: Sauerland

  • Zuerst mal danke für die schnelle Antwort!


    Ich bräuchte allerdings noch den ein- oder anderen Tipp um sie zu verstehen.
    Ich bitte um Nachsicht, meine letzten Aktivitäten mit Linux-Kernels liegt über 15 Jahre zurück ;)


    kernel-devel, kernel-default-devel und die ganze Toolchain hatte ich natürlich, vergaß ich zu erwähnen.
    Das kompilieren (make) ging ja auch.


    Du sagst der Kernel von Leap 42.3 enthält schon Patches aus Kernel 4.9. Das geht so in Richtung
    meines Punkt 3): Einfach mal ausprobieren ob's schon geht. War denn meine Schlussfolgerung "Geht nicht!"
    falsch? Falls ja, wo ging's daneben? Ich habe natürlich nicht alles geschrieben wo ich nach einem erfolgreichen
    laden des Treibers gesucht habe (dmesg, systemd-journalctl, systemctl status vdr.service usw).


    Ohne den Patch immer Fehlanzeige, danach wie gezeigt, sehen die Meldungen aus wie von


    TechnoTrend TT-budget S2-4200 Twin - LinuxTVWiki beschrieben.
    Hätte ich was anderes tun können/sollen?


    Dein zweiter Punkt ist noch interessanter, und da zeigt sich auch meine Ahnungslosigkeit wie openSUSE
    funktioniert: Es gäbe kernel:stable und dein Code zeigt eine Version 4.14. Da sollte mein Treiber ja dann
    auf jeden Fall dabei sein. Ich hab' mich mal kurz informiert was das ist, was mich zu folgender Frage bringt:
    Was ist für einen Rechner, der als permanent laufender Heimserver noch DVB-Aufnahmen machen soll sinvoller:
    Beim default Kernel bleiben und dieses eine Modul patchen oder auf kernel:stable umsteigen?
    Ich meine im Sinne von problemloser.


    Und zuletzt, was mich immer noch brennend interessiert: Warum hat make modules_install ...
    nicht gereicht? Warum musste ich smipcie.ko manuell kopieren, dass sich was tat?


    Danke schon mal vorab,
    Achim

    Für den Inhalt des Beitrages 117564 haftet ausdrücklich der jeweilige Autor: achimoe

  • Da wir die kompletten!! Ausgaben incl. der kompletten!!! Eingabezeile nicht kennen, ist hier Rosenthal angesagt.


    Und das mache ich bei so einem Thema nicht.

    Für den Inhalt des Beitrages 117566 haftet ausdrücklich der jeweilige Autor: Sauerland

  • Versteh' ich ja und ich will ja auch niemand meine Recherchearbeit aufdrücken, ich komme halt leider nicht weiter mit recherchieren.


    Hier noch mal die exakten Eingabezeilen mit Ausgabe:


    Meine Frage ist nur: Ist das prinzipiell die richtige Vorgehensweise?
    Falls nein, hab' ich was triviales vergessen oder muss ich mich tiefergehend mit der Materie befassen?


    smipcie.ko wird ja gebaut, nur nicht an die richtige Stelle kopiert. Immer vorausgesetzt ich habe das prinzipiell richtig verstanden.
    Kopiere ich's von Hand, wird der Treiber wie erwartet geladen. Ich fürchte ich vergesse was, finde aber nicht heraus was.

    Für den Inhalt des Beitrages 117574 haftet ausdrücklich der jeweilige Autor: achimoe