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:
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:
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:
2. Kernel Sources downloaden und entpacken:
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:
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:
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.