Vorab
- sorry, falls es für jemanden dumm klingt, aber mein LinuxWissen ist
nicht riesig
- ich verwende Ubuntu 14.04 (Trusty Tahr)
- ich benötige einen Treiber um das USB-device DVI2USB-3.0 der Firma
Epiphan verwenden zu können
(http://www.epiphan.com/products/dvi2usb-3-0/downloads/)
Zu meiner Frage
Ich habe ein USB-device, welches standardmäßig nicht mit Treibern von
Ubuntu unterstützt wird. Laut Hersteller (dessen readme ist im Anhang)
muss ich dazu einen KernelSourceTree installieren um den Treiber
kompilieren zu können. Das habe ich wie hier beschrieben getan:
https://wiki.ubuntuusers.de/Kernel/Kompilierung/
Nun habe ich jede Menge Dateien vor mir liegen, die ich nun zum bauen
benötigen soll. Mit dem kurzen Hinweis "2) Verify path to the kernel
source tree in Config.mak", erwähnt der Hersteller, dass ich vor dem
Bauen einen Pfad eventuell anpassen muss.
Auszug aus "Config.mak":
1
# Where is the target kernel
2
ifeq($(KDIR),)
3
KDIR:=/lib/modules/$(shelluname-r)/build
4
endif
Aber wohin? In dem vom KernelSourceTree runter geladenen Dateien gibt es
im Ordner ".../lib/" keinen Unterordner "modules". Im Ubuntu-eigenem
Verzeichnis "/lib" gibt es den Ordner zwar, aber dann würde es doch
keinen Sinn machen zuvor die ganzen Linux-sourcen mit KernelSourceTree
runter zu laden.
Ich bin mir ziemlich sicher, daß sie nicht die Kernelsourcen meinen,
sondern wie üblich nur die header. Und diese installierst Du über den
Paketmanager. Du willst ja nur ein Treibermodul kompilieren und nicht
einen eigenen Treiber.
brechpunkt schrieb:> - ich benötige einen Treiber um das USB-device DVI2USB-3.0 der Firma> Epiphan verwenden zu können> (http://www.epiphan.com/products/dvi2usb-3-0/downloads/)
Und auf dieser Seite werden mir für die Treiberinstallation debs
angeboten. Und es wird ausdrücklich erwähnt, daß nur binaries zur
Verfügung gestellt werden. Wo hast Du das her?
Das Verzeichnis /lib/modules/x.y.z/build enthält die Konfiguration des
Kernels (zusätzliche Module müssen genau die selben Einstellungen
verwenden). In Ubuntu findet man es im Paket linux-kernel-devel; den
Pfad solltest du nicht verändern müssen.
Andre R. schrieb:> Wo hast Du das her?
Ich habe mir das vga2usb-3.30.2.10-ubuntu-3.19.0-25-generic-x86_64.deb
von dieser Seite runter geladen. Das ReadMe befindet sich darin unter
vga2usb-3.30.2.10-ubuntu-3.19.0-25-generic-x86_64/usr/src/vga2usb-3.30.2
.10/README
Andre R. schrieb:> Und diese installierst Du über den Paketmanager.
Installiere ich das Paket mit Ubuntu Software Centre erhalte ich
lauter Fehlermeldungen:
brechpunkt schrieb:> Auszug aus "Config.mak":# Where is the target kernel> ifeq ($(KDIR),)> KDIR := /lib/modules/$(shell uname -r)/build> endif> Aber wohin? In dem vom KernelSourceTree runter geladenen Dateien gibt es> im Ordner ".../lib/" keinen Unterordner "modules".
Wo steht denn, dass das innerhalb der Kernel-Sourcen sein muss? Das ist
einfach in deinem Verzeichnisbaum. /lib/modules ist das Verzeichnis, in
dem alle Kernel-Module installiert sind. $(shell uname -r) ruft das
Kommando "uname -r" auf, das die Versionsnummer des aktuell laufenden
Kernels ergibt. build sollte darin dann ein Link auf die dazugehörigen
Kernel-Headers sein.
> Im Ubuntu-eigenem Verzeichnis "/lib" gibt es den Ordner zwar, aber dann> würde es doch keinen Sinn machen zuvor die ganzen Linux-sourcen mit> KernelSourceTree runter zu laden.
Warum nicht?
brechpunkt schrieb:> Installiere ich das Paket mit Ubuntu Software Centre erhalte ich> lauter Fehlermeldungen:> Details:> Lintian check results for> /home/user/Desktop/vga2usb-3.30.2.10-ubuntu-3.19.0-25-generic-x86_64.deb :> E: vga2usb-dkms: arch-independent-package-contains-binary-or-object> usr/src/vga2usb-3.30.2.10/drvwrapper.o
[...]
Offenbar hat derjenige, der das Paket zusammengepackt hat, vergessen,
vorher ein "make clean" auszuführen. Sprich: Er hat selber den Treiber
gebaut und dann die generierten Object-Files mit ins Paket gepackt, was
er eigentlich nicht soll.
Rolf M. schrieb:>> Im Ubuntu-eigenem Verzeichnis "/lib" gibt es den Ordner zwar, aber dann>> würde es doch keinen Sinn machen zuvor die ganzen Linux-sourcen mit>> KernelSourceTree runter zu laden.>> Warum nicht?
Ok, soweit habe ich es nun verstanden, dass einfach nur der Pfad zu den
aktuellen / bereits im System abgelegten modul-headers benötigt. Mein
Gedanke war nur, dass es dann doch garnicht nötig gewesen wäre die
linux-sourcen (KernelSourceTree ) vorher runter zu laden.
brechpunkt schrieb:> Ok, soweit habe ich es nun verstanden, dass einfach nur der Pfad zu den> aktuellen / bereits im System abgelegten modul-headers benötigt. Mein> Gedanke war nur, dass es dann doch garnicht nötig gewesen wäre die> linux-sourcen (KernelSourceTree ) vorher runter zu laden.
Ja. Zum Bauen von Kernel-Modulen reichen in der Regel die
Kernel-Headers. Die sind ein Teil der Kernel-Sourcen. Sollte genauso
gehen mit den kompletten Kernel-Sourcen, aber kann sein, dass man sich
den Kernel damit zuerst bauen muss, damit alles generiert worden ist,
was benötigt wird. In den Kernel-Headers ist schon alles nötige drin.
Gerade mal ausprobiert: Das passende .deb Paket von epiphan
heruntergeladen.
Mit dpkg installiert. Nun nach /usr/src/vga2usb-3.30.2.10 gewechselt.
Ein beherztes sudo make eingegeben - geht schon mal ohne Fehler.
sudo make install habe ich nicht, da ohnehin keine Hardware vorhanden.
Du musst eventl. noch den gcc installieren, bei mir sind die
Kernel-Header unter /usr/src schon da, keine Ahnung wieso.
Ich habe aber gerade noch festgestellt, das offenbar bereits bei der
dpkg-Installation das Kernelmodul mitgebaut wird - ganz von allein.
Kleiner Wehrmutstropfen: bei jeden Kernelupdate muß die Prozedur
wiederholt werden.
knollo schrieb:> Du musst eventl. noch den gcc installieren, bei mir sind die> Kernel-Header unter /usr/src schon da, keine Ahnung wieso.
Vielleicht hast du dkms drauf für irgendwelche Module, z.B. VirtualBox
oder NVidia.
> Ich habe aber gerade noch festgestellt, das offenbar bereits bei der> dpkg-Installation das Kernelmodul mitgebaut wird - ganz von allein.> Kleiner Wehrmutstropfen: bei jeden Kernelupdate muß die Prozedur> wiederholt werden.
Wenn der Treiber auch dkms-fähig wäre, würde das von alleine passieren.