[Howto] Buildumgebung - Kernelmodule für QNAP bauen

  • Für welches Gerät willst du module bauen?


    was ist die Ausgabe der folgenden Befehle auf der konsole?

    Code
    cat /proc/version
    strings /lib/libc* | grep GCC | uniq
    strings /lib/libc.so.6 |grep 'GNU C'


    vg kasimodo

    Einmal editiert, zuletzt von bladekiller () aus folgendem Grund: Codeblock eingefügt - siehe Forenregeln

  • Code
    [~] # cat /proc/version
    Linux version 2.6.33.2 (root@VMBuildEnv001) (gcc version 4.2.1) #1 Wed Dec 5 19:17:53 CST 2012
    [~] # strings /lib/libc* | grep GCC | uniq
    GCC: (GNU) 4.2.1
    [~] # strings /lib/libc.so.6 |grep 'GNU C'
    GNU C Library stable release version 2.5, by Roland McGrath et al.
    Compiled by GNU CC version 4.2.1.
    [~] #


    Es befindet hier im Gegensatz zu früher kein direkter Hinweis mehr für den Toolchain. Außerdem sind die früher im Thread erwähnten Toolchains nicht mehr vorhanden, denn Codesourcery hat umstrukturiert.


    Bei mir geht es um die TS 212 bzw. 259. Allerdings benötige ich aktuell den Toolchain nicht um Kernelmodule zu bauen, sondern um mit Freepascal/Lazarus Crosscompiling zu machen. Die Basismaschine ist Debian i386 und auf dieser will ich für den Arm meine selbstgeschriebenen Programme übersetzen und debuggen.

  • Hi,


    die notwendige toolchain ist immer noch die gleiche!


    der link auf die webseite geht nicht mehr, das ist richtig - aber für den fall hab ich den wget aufruf mit im ersten beitrag hinterlegt.


    download mit wget geht immer noch!! (bzw. Link direkt)
    wget http://www.codesourcery.com/pu…rm-none-linux-gnueabi.bin


    für kernelmodule muss man genau die passende toolchain benutzen (gcc, glibc), mit der auch der kernel gebaut wurde.
    für Anwendungen kann man auch die neuere version aus dem ersten Beitrag nehmen.


    Link für Installationsanleitung im ersten Beitrag funzt noch!


    vg kasimodo

  • hallo gemeinde,


    ich suche für eine qnap ts-109 pro 2 mit

    Code
    Linux version 2.6.12.6-arm1 (root@NasARM4) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #1 Fri Sep 24 01:42:05 CST 2010

    die richtigen ftdi_sio und usbserial versionen
    mit dmesg bekomme ich folgendes

    Code
    ftdi_sio: version magic '2.6.33.2 mod_unload ARMv5 ' should be '2.6.12.6-arm1 AR
    Mv5 gcc-3.4'
    usbserial: version magic '2.6.33.2 mod_unload ARMv5 ' should be '2.6.12.6-arm1 A
    RMv5 gcc-3.4'


    danke für die eventuelle hilfe im voraus.
    noob

  • Hi,


    Ich habe z.Z. auch keine fertige Buildumgebung und müsste mir auch erst alles wieder aufsetzen.


    Das kannst du mit den folgenden Links und den Hinweisen in den vorherigen Beiträgen auch leicht selbst machen.
    Bei Fragen dann einfach einen neues Thema eröffnen. Da kann dir dann nicht nur von mir, auch von anderen weitergeholfen werden.
    Ich lese hier nicht immer mit und andere können dann auch von den Beiträgen profitieren.


    vg kasimodo


    Hier die wichtigsten Downloads:
    https://www.virtualbox.org/wiki/Downloads -> als alternative zu vmware!
    http://sourceforge.net/projects/freetz-linux/files/ -> hier die aktuellen freetz!
    http://www.codesourcery.com/pu…i686-pc-linux-gnu.tar.bz2 -> u.a. auch für TS 109
    ftp://gpl:download@ftp.qnap.com/gpl/

  • Hallo zusammen.


    ich benötige das Kernelmodul pl2303.ko, um meinen USB-to-Serial-Adapter ans Laufen zu kriegen.


    Nach meiner bewusst naiven Anfrage an den Support, konnte dieser mir wenigstens sagen, wo man die aktuellen kernelsourcen findet.
    http://sourceforge.net/project…NAP%20NAS%20GPL%20Source/


    Ich werde jetzt wohl selbst anfangen müssen zu crosscompilen. (noch nie gemacht)


    Meine Frage ist, in wie weit ich dieser Anleitung nun folgen kann.
    Ist die noch aktuell?
    Der Hinweis auf die Courcen bei Sourceforge fehlt ja schon mal. :(


    Außerdem weiß ich nicht genau, warum in der Anleitung freetz genommen wird und ob ich das durch zB. Ubuntu ersetzen kann.
    Ich vermute, dass das am ARM-Prozessor in diesem beispiel liegt.


    Optimal wäre natürlich, wenn jemand diese Anleitung auf den neusten Stand bringen könnte.
    Oder mir wenigstens in Stichworten sagen kann, welche Punkte angepasst werden müssten, damit ich zum Ziel komme. :)



    Hier meine Daten:
    QNAP TS-859 Pro



    Vielen Dank

  • Hallo,


    ich möchte gerne die Firmware für meine PCTV 461e (vendor 2013 id 0258) mit einbinden, damit (so hoffe ich) diese geladen wird und TVHeadend finden kann.


    Habe alles lt. Anleitung soweit gemacht, nur wie bekomme ich die Datei in den VMWare-Player mit freetz hinein und den neuen Kernel wieder heraus?
    DIe Firmware bekomme ich von dort: https://github.com/OpenELEC/dv…re/dvb-demod-m88ds3103.fw
    Und vor allem wohin muss sie in das Kernelverzeichnis (im meinem Fall Linux-3.4.6) kopieren?


    Und dann einfach neu kompilieren und mit insmod installieren und gut ist?


    Danke im voraus, für die Hilfe


    PS: Ein Versuch diese zum laufen zu bringen mit DVBLink (DVBLogic) war erfolgreich, würde aber lieber TVHeadend einsetzen.

  • 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.

  • Kurz noch als Ergänzung: es ist auch möglich mit Hilfe von -C einzelne Kernelmodule zu kompilieren, ohne das man den gesamten Kernel bauen muss. Damit erspart man sich die 10 stündige Prozedur :cup:
    Ich habe es dank der Anleitung jetzt übrigens wieder hinbekommen das Wireguard Modul zu kompilieren :thumbup:

  • Hallo,


    kannst Du hier dann die Einstellung bzw. Änderung aufführen, die Du für Wireguard verwendet hast?


    Ich versuche auch unter dem LxD Ubuntu Container den Wireguard Server auf ipv6 zu bekommen.


    Allerdings fehlt das Kernelmodul ip6table_nat.ko was ich auch gerne compilieren würde.

    D.h. das make menuconfig bzw. das make danach erstellt mir den Kernel und alle möglichen Module. Soweit bin ich immerhin schon gekommen...

    Allerdings weiß ich nicht in welchem Abschnitt in dem menuconfig ich dieses Modul zum Compilieren "aktivieren" kann.



    Grüße


    Gerhard

    Einmal editiert, zuletzt von bsv ()

  • Hallo,


    wenn Du ausschließlich IPv4 über QVPN machst, dann klappt das.


    Dabei habe ich allerdings keine IPv6 Möglichkeit gefunden oder verstanden darüber aufzusetzen.


    Daher mein Versuch über einen LxD Ubuntu Container mit eben auch IPv6.

    Da wird aber ein Fehlen von dem ip6table_nat.ko Modul im QNAP Kernel bemängelt.


    Daher der Versuch das entsprechende Kernelmodul zu compilieren, was ich auch schon geschafft habe - meine ich zumindestens.


    Jetzt habe ich aber leider:

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

    oder

    Code
    modprobe: module ip6table_nat.ko not found in modules.dep


    Da fehlen mir die entsprechenden Kenntnisse oder es passt doch noch etwas nicht.


    Dazu ist jeder Tipp willkommen...



    Grüße


    Gerhard

  • Wireguard kannst Du in QVPN vollumfänglich mit IPv6 nutzen, selbst mit OVPN soll es mittlerweile möglich sein, wobei ich selbst noch keinen OVPN v6 Server auf QNAP erstellt habe.


    Edit:

    Wobei "vollumfänglich" etwas gelogen ist... Tunneln kann man v6 Traffic nämlich nicht.

    Einmal editiert, zuletzt von tiermutter ()

  • Hallo,


    würde ich gerne glauben, bzw. vielleicht verstehe ich da etwas nicht richtig.


    Im QVPN Menu gibt es ja keine Möglichkeit für den Server eine IPv6 Adresse anzuwenden.

    Da gibt es ja nur die Voreinstellung mit dem 198.18.7.0 Netz.


    Selbst das finde ich nicht verständlich, da dieses Netz ja kein privates Netz ist.

    Theoretisch könnten dieses Netz ja im Internet belegt sein...


    Aber zurück zum IPv6, habe ich da etwas falsch verstanden?



    Grüße


    Gerhard


    Gerade erst Deinen "Edit" gelesen, passt also zu meinem Kenntnisstand...


    Und hier weitere Details zu meinen Fehlermeldungen mit der Bitte um Tipps bei dem Versuch mit insmod das Modul zu laden:


    Code
    [2892706.669003] ip6table_nat: Unknown symbol ip6t_unregister_table (err -2)
    [2892706.675855] ip6table_nat: Unknown symbol ip6t_register_table (err -2)
    [2892706.682497] ip6table_nat: Unknown symbol ip6t_unregister_table_exit (err -2)
    [2892706.689765] ip6table_nat: Unknown symbol ip6t_alloc_initial_table (err -2)
    [2892706.696839] ip6table_nat: Unknown symbol ip6t_do_table (err -2)

    2 Mal editiert, zuletzt von bsv ()

  • Was vielleicht auch noch eine Alternative sein könnte, wäre Tailscale. Die werben damit, dass es dort volle IPv6 Unterstützung gibt. Und es gibt ein qpkg welches unter MIT Lizenz von der Community bereitgestellt wird.

  • Hallo,



    danke für die versuchte Hilfe, aber:

    - Tailscale ist zwar VPN aber eine Art zentral gemanaged Peer to Peer VPN Netz...

    das will ich so halt mal nicht...

    - QVPN - wie auch "tiermutter" geschrieben hat - macht eben kein ipv6 Traffic über den Tunnel...


    Daher bin ich weiter dran den wireguard-Server als LxD Container mit ipv6 zum laufen zu bringen.


    Hat sonst jemand noch Erfahrung mit Kernelmodulen?


    In der Zwischenzeit habe ich für meinen Kernel "Linux version 5.10.60-qnap" die ipv6tables crosscompiliert.

    Ging eigentlich ohne Probleme.


    Nur jetzt die Frage:

    Auf meiner TS-473 sind alle Kernelmodule "flach in /lib/modules/5.10.60-qnap zu finden...


    Auf meiner Ubuntu-Maschine crosscompliert:

    /lib/modules/5.10.60-qnap/kernel/net/ipv6:

    ah6.ko

    esp6.ko

    ipcomp6.ko

    ipv6.ko

    sit.ko

    tunnel6.ko

    xfrm6_tunnel.ko


    und im nächsten SubDir "netfilter":

    ip6table_filter.ko

    ip6table_mangle.ko

    ip6table_nat.ko

    ip6_tables.ko

    ip6t_ipv6header.ko

    ip6t_NPT.ko

    ip6t_REJECT.ko

    nf_log_ipv6.ko

    nf_reject_ipv6.ko


    Jetzt die Fragen, ob:

    1. ich wahrscheinlich die zusätzlichen reinkopieren und alle vorhandenen Dateien ersetzen soll?

    - da ansonsten eben die oben stehende Fehlermeldung kommt, wenn ich versuche nur "ip6table_nat.ko" zu laden.

    - weil sonst wahrscheinlich die anderen Module dazu nicht passen?


    2. Falls aber meine Crosscompileden Module irgendwie nicht passen,

    2a. bootet meine QNAP dann dennoch?

    2b. kann ich sie dann dennoch über IPv4 erreichen?



    Grüße


    Gerhard