Beiträge von DazDavid

    Ich weiß dieser Thread ist schon uralt aber da das Thema nach wie vor aktuell ist und dieser Thread das erste und einzige Suchergebnis bei Google zum Thema Kernel Module kompilieren für Qnap ist wollte ich ihm mal ein kleines Update verpassen, da ich das Prozedere auch gerade erst durch habe und es ein paar Fallstricke gab.


    Erstmal zu meiner Ausgangssituation:

    Ich habe eine alte Playstation Eye Kamera rumliegen welche ich als Webcam für meinen 3D-Drucker nutzen möchte (via Octoprint). Dummerweise wird beim einstecken der Kamera nur das Mikrofone korrekt erkannt, für die Kamera fehlt der Treiber.

    Nach einiger Suche habe ich herausgefunden das ich das Kerne Modul gspca_ov534.ko benötige welches in QTS fehlt.


    NAS: TS-253BE

    CPU Architektur: 64 Bit x86

    QTS: 4.4.1.1086


    cat /proc/version gibt folgende Informationen zum verwendeten Kernel:

    Code
    Linux version 4.14.24-qnap (root@U16BuildServer49) (gcc version 4.9.2 (toolchain config: [gcc-4.9.2 binutils-2.25 glibc-2.21])) #1 SMP Thu Oct 10 01:06:18 CST 2019



    Vorgehensweise:

    1. Buildumgebung bauen:

    Anhand der Ausgabe von /proc/version sieht man welche Tools benötigt. Eine Toolchain zum Download wie für ARM CPU gibt es für x86 Systeme nicht. Stattdessen muss man sich die benötigen Tools selbst zusammensuchen. Nach einigem rumprobieren habe ich letztlich eine Ubuntu 15.4 VM in der Virtualization Station aufgesetzt. Ubuntu 15.4 ist zwar schon recht alt und wird nicht mehr gepflegt, die Tools gcc-4.9, binutils-2.25 und glibc.2-21 sind aber in den entsprechenden Versionen verfügbar.


    Um für die alte Version noch Pakete installieren zu können, müssen die ersten vier URLs in /etc/apt/sources.list wie folgt angepasst werden:

    Code
    sudo nano /etc/apt/sources.list
    
    deb http://old-releases.ubuntu.com/ubuntu/ vivid main restricted
    deb-src http://old-releases.ubuntu.com/ubuntu/ vivid main restricted
    
    deb http://old-releases.ubuntu.com/ubuntu/ vivid-updates main restricted
    deb-src http://old-releases.ubuntu.com/ubuntu/ vivid-updates main restricted


    Anschließend einmal ein Update ausführen und die benötigten Pakete installieren:

    Code
    sudo apt-get update
    sudo apt-get install binutils gcc-4.9 libssl-dev libelf-dev


    2. Kernel Sources downloaden und entpacken:

    Code
    mkdir build    # Build Verzeichnis im Home-Verzeichnis erstellen
    mkdir build/kernel
    mkdir build/qts
    mkdir build/compiled
    
    mv build/kernel # Ins Kernel Verzeichnis wechseln und Kernel downloaden
    wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.14.24.tar.gz
    tar -xvzf linux-4.14.24.tar.gz   


    3. QTS Sourcen downloaden und config kopieren:

    Die QTS Sourcen sind hier zu finden:

    https://sourceforge.net/projec…NAP%20NAS%20GPL%20Source/


    In meinem Fall war dies GPL_QTS-4.4.0-20190806_Kernel.tar.gz

    Datei herunterladen und z.B. per WinSCP auf die Ubuntu Maschine nach /home/user/build/qts kopieren


    Dann entpacken und Config File extrahieren:

    Code
    cd build/qts
    tar -xvzf GPL_QTS-4.4.0-20190806_Kernel.tar.gz
    cd ..
    cp qts/GPL_QTS/kernel_cfg/TS-X53B/linux-4.14-x86_64.config kernel/linux-4.14.24/.config # WICHTIG IST DER PUNKT VOR CONFIG


    Jetzt sollte alles soweit vorbereitet sein das wir die benötigten Treiber in der Config aktivieren können:

    Code
    make menuconfig
    Device Drivers --> Multimedia Support --> Media USB Adapters --> GSPCA based Webcams --> OV534 OV772x USB Camera Driver &  OV534 OV965x USB Camera Driver aktivieren
    
    make
    make modules_install INSTALL_MOD_PATH=/home/user/build/compiled


    Nun sollten sich die kompilierten Module hier finden lassen:

    build/compiled/lib/modules/4.14.24-qnap/kernel/drivers/media/usb/gspca


    Die Module auf das NAS kopiern und mit insmod aktivieren. Wichtig ist im Fall von dem ov534 Moduls auch das _Main Modul dazu zu laden da sonst funktionen fehlen.


    Wird nun die PS Eye Cam angeschlossen wird sie als /dev/video0 gemountet (/dev/video0 gibt es auch vorher schon aber ohne "Inhalt").


    Sollte beim Laden des Modules etwas nicht klappen hilft ein Blick in dmesg um zu wissen wo es klemmt.

    Guten Morgen Community :)


    ich versuche seit ein paar Tagen eine Playstation Eye Kamera an meinem Qnap TS-253BE zum laufen zu bekommen um diese unter Octoprint (3D-Druck-Server) nutzen zu können.

    Das dafür zuständige Kernel Modul gspca_ov534.ko scheint in QTS 4.4.1.1086 jedoch zu fehlen.


    Nach langen Bemühungen habe ich nun versucht anhand der Anleitung hier im Forum das Modul selbst zu kompilieren.

    Als Build Umgebung nutze ich ein Ubuntu 15.4, da dieses von der Toolchain her zu der von Qnap genutzen passt.


    Die Kompilierung lief soweit erfolgreich durch, allerdings bekomme ich folgende Fehlermeldung beim laden des Modules auf dem Qnap:

    Code
    insmod: can't insert 'gspca_ov534.ko': invalid module format


    Der Grund dafür ist ziemlich eindeutig wie dmesg zeigt:

    Code
    gspca_ov534: version magic '4.14.24 SMP mod_unload modversions ' should be '4.14.24-qnap SMP mod_unload '


    Hier noch der Auszug aus /proc/version vom NAS:

    Code
    Linux version 4.14.24-qnap (root@U16BuildServer49) (gcc version 4.9.2 (toolchain config: [gcc-4.9.2 binutils-2.25 glibc-2.21])) #1 SMP Thu Oct 10 01:06:18 CST 2019



    Ich habe das Modul für Kernel 4.14.24 kompiliert, erwartet wird aber 4.14.24-qnap. Ich habe zum kompilieren natürlich die config aus den Qnap Sources genommen (komischerweise war dort das Module welches ich benötige auch schon aktiviert...)


    Nun meine Frage:

    Kann ich den Suffix "qnap" beim kompilieren einfach irgendwie irgendwo anhängen oder wie muss ich vorgehen, damit das Modul geladen werden kann?


    Danke und Gruß

    David



    EDIT: Wie meistens offenbart sich einem die Antwort nachdem man im Forum gepostet hat... In meinem Fall gibt es wohl zwei Lösungen.

    1. Die schnellste Lösung wäre ein insmod -f bzw. modprobe -f um die version magic zu ignorieren. Leider unter QTS nicht möglich, da es für beide Tools kein Force gibt...

    2. Kernel neu kompilieren und vorher den Ordner entsprechend umbenennen --> in Progress. Ich melde mich in 10 Stunden wieder obs geklappt hat...



    EDIT2: Die Ordner Umbenennung war natürlich quatsch. Ich habe den Suffix nun über den Tag "EXTRAVERSION" im Makefile hinzugefügt, leider ist das Ergebnis immer noch das Gleiche, nur das ich jetzt nicht mehr weiß was der eigentliche Fehler ist, da der Kernel nun gleich ist:


    Code
    gspca_ov534: version magic '4.14.24-qnap SMP mod_unload modversions ' should be '4.14.24-qnap SMP mod_unload '