Fusion IO Karte, build driver from Source -> Nicht erfüllte Bauabhängigkeiten

hardware

#1

Hallo,
ich versuche gerade auf einem Univention Corporate Server,
Version 4.2.3, kernel 4.9.0-ucs107-amd64
einen Treiber für eine Fusion IO karte bauen zu lassen.
Ausgangspunkt ist ein frisch installierter UCS.
Nachdem ich der Anleitung des Herstellers gefolgt bin,

sudo apt-get install gcc fakeroot build-essential debhelper linux-headers-uname -r rsync

anschließend die Quelle in ein Verzeichnis entpackt habe und ein

sudo dpkg-buildpackage -uc -us

absetze, erhalte ich ein

dpkg-checkbuilddeps: Nicht erfüllte Bauabhängigkeiten: linux-headers | linux-headers-amd64

Das installieren von

apt-get install univention-kernel-headers

bringt keinen Erfolg.

Hat jemand vielleicht Erfahrung mit Fusion IO Karten und kann mir hier weiterhelfen, bitte?

Gruß

Josef


#2

Huhu,

Unabhängig vom ursprünglichen Problem, aber trotzdem erwähnenswert: Pakete sollten aus Sicherheitsgründen eigentlich nicht als root gebaut werden. Statt dessen kann man fakeroot nutzen: dpkg-buildpackage -rfakeroot <andere Parameter> oder kurz dpkg-buildpackage -r <andere Parameter>

Liegt daran, dass Univention bei 4.2[1] noch eigene Kernel-Pakete mitliefert und eben nicht den Standard-Debian-Kernel. Daher heißt das Meta-Paket halt schlicht univention-kernel-headers und nicht linux-headers.

Ich rate schlicht dazu, den Paketnamen in der Datei debian/control im Feld Build-Depends von linux-headers | … auf univention-kernel-headers | … anzupassen und es anschließend erneut zu probieren.

Alternativ kann man dpkg-buildpackage auch mit dem Parameter -d sagen, dass fehlende Abhängigkeiten ignoriert werden sollen. Würde ich aber nur machen, wenn linux-headers die einzige fehlende Abhängigkeit ist.

Gruß
mosu

[1] Anmerkung: in UCS 4.3, bei dem der Unterbau von Debian 8 Jessie auf Debian 9 Stretch getauscht wird, will Univention wohl wieder auf den regulären Debian-Kernel zurück wechseln. Daher kann es sein, dass sich das Problem mit 4.3 erledigen wird. Allerdings wird 4.3 erst im März herauskommen, sofern alles glatt läuft.


#3

Hi mosu!
Dank deines Hinweises lief der build process. ich habe in control die

linux-headers | linux-headers-amd64
durch
univention-kernel-headers | univention-kernel-headers-amd64

ersetzt, jedoch lief das build mit Fehlern und wurde nicht abgeschlossen:

Blockquote
1517602580.884 Exiting
Preserving configdir due to ‘-p’ option: /home/iomemory-vsl-3.2.15.1699/driver_source/kfio_config
/usr/bin/make
-j8
-C /lib/modules/4.9.0-ucs107-amd64/build
FIO_DRIVER_NAME=iomemory-vsl
FIO_SCSI_DEVICE=False
FUSION_DRIVER_DIR=/home/iomemory-vsl-3.2.15.1699/driver_source
SUBDIRS=/home/iomemory-vsl-3.2.15.1699/driver_source
EXTRA_CFLAGS+="-I/home/iomemory-vsl-3.2.15.1699/driver_source/include -DBUILDING_MODULE -DLINUX_IO_SCHED"
INSTALL_MOD_DIR=extra/fio
INSTALL_MOD_PATH=
KFIO_LIB=kfio/x86_64_cc49_libkfio.o_shipped
modules
make[2]: Entering directory ‘/usr/src/linux-headers-4.9.0-ucs107-amd64’
printf ‘#include “linux/module.h”\nMODULE_LICENSE(“Proprietary”);\n’ >/home/iomemory-vsl-3.2.15.1699/driver_source/license.c
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/main.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/pci.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/sysrq.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/driver_init.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/kfio.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/errno.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/state.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/kcache.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/kfile.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/kmem.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/kmisc.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/kscatter.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/ktime.o
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/sched.o
/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c: In function ‘kfio_get_user_pages’:
/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:757:77: warning: passing argument 5 of ‘get_user_pages’ from incompatible pointer type
retval = get_user_pages(GET_USER_PAGES_TASK start, nr_pages, write, 0, (struct page **) pages, NULL);
^
In file included from /usr/src/linux-headers-4.9.0-ucs107-common/include/linux/pagemap.h:7:0,
from /usr/src/linux-headers-4.9.0-ucs107-common/include/linux/blkdev.h:14,
from /home/iomemory-vsl-3.2.15.1699/driver_source/port-internal.h:62,
from /home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:33:
/usr/src/linux-headers-4.9.0-ucs107-common/include/linux/mm.h:1303:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
long get_user_pages(unsigned long start, unsigned long nr_pages,
^
/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:757:15: error: too many arguments to function ‘get_user_pages’
retval = get_user_pages(GET_USER_PAGES_TASK start, nr_pages, write, 0, (struct page **) pages, NULL);
^
In file included from /usr/src/linux-headers-4.9.0-ucs107-common/include/linux/pagemap.h:7:0,
from /usr/src/linux-headers-4.9.0-ucs107-common/include/linux/blkdev.h:14,
from /home/iomemory-vsl-3.2.15.1699/driver_source/port-internal.h:62,
from /home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:33:
/usr/src/linux-headers-4.9.0-ucs107-common/include/linux/mm.h:1303:6: note: declared here
long get_user_pages(unsigned long start, unsigned long nr_pages,
^
/usr/src/linux-headers-4.9.0-ucs107-common/scripts/Makefile.build:298: recipe for target ‘/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.o’ failed
make[5]: *** [/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.o] Error 1
make[5]: *** Warte auf noch nicht beendete Prozesse…
/usr/src/linux-headers-4.9.0-ucs107-common/Makefile:1515: recipe for target ‘module/home/iomemory-vsl-3.2.15.1699/driver_source’ failed
make[4]: *** [module/home/iomemory-vsl-3.2.15.1699/driver_source] Error 2
Makefile:150: recipe for target ‘sub-make’ failed
make[3]: *** [sub-make] Error 2
Makefile:8: recipe for target ‘all’ failed
make[2]: *** [all] Error 2
make[2]: Leaving directory ‘/usr/src/linux-headers-4.9.0-ucs107-amd64’
Makefile:82: recipe for target ‘modules’ failed
make[1]: *** [modules] Error 2
make[1]: Leaving directory ‘/home/iomemory-vsl-3.2.15.1699/driver_source’
ERROR:
debian/rules:98: recipe for target ‘build-arch-stamp’ failed
make: *** [build-arch-stamp] Error 1
dpkg-buildpackage: Fehler: Fehler-Exitstatus von debian/rules build war 2

Ich weiß nichts mit dem Fehler:

Blockquote
/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:757:15: error: too many arguments to function ‘get_user_pages’
retval = get_user_pages(GET_USER_PAGES_TASK start, nr_pages, write, 0, (struct page **) pages, NULL);

anzufangen.

Es gibt auch die Möglichkeit via

make KERNELVER=4.9.0-ucs107-amd64 modules

den treiber zu bauen, jedoch erhalte ich hier den gleichen Fehler:

Blockquote
make
-j8
-C /lib/modules/4.9.0-ucs107-amd64/build
FIO_DRIVER_NAME=iomemory-vsl
FIO_SCSI_DEVICE=0
FUSION_DRIVER_DIR=/home/iomemory-vsl-3.2.15.1699/driver_source
SUBDIRS=/home/iomemory-vsl-3.2.15.1699/driver_source
EXTRA_CFLAGS+="-I/home/iomemory-vsl-3.2.15.1699/driver_source/include -DBUILDING_MODULE -DLINUX_IO_SCHED"
INSTALL_MOD_DIR=extra/fio
INSTALL_MOD_PATH=
KFIO_LIB=kfio/x86_64_cc49_libkfio.o_shipped
modules
make[1]: Entering directory ‘/usr/src/linux-headers-4.9.0-ucs107-amd64’
CC [M] /home/iomemory-vsl-3.2.15.1699/driver_source/kmem.o
/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c: In function ‘kfio_get_user_pages’:
/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:757:77: warning: passing argument 5 of ‘get_user_pages’ from incompatible pointer type
retval = get_user_pages(GET_USER_PAGES_TASK start, nr_pages, write, 0, (struct page **) pages, NULL);
^
In file included from /usr/src/linux-headers-4.9.0-ucs107-common/include/linux/pagemap.h:7:0,
from /usr/src/linux-headers-4.9.0-ucs107-common/include/linux/blkdev.h:14,
from /home/iomemory-vsl-3.2.15.1699/driver_source/port-internal.h:62,
from /home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:33:
/usr/src/linux-headers-4.9.0-ucs107-common/include/linux/mm.h:1303:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
long get_user_pages(unsigned long start, unsigned long nr_pages,
^
/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:757:15: error: too many arguments to function ‘get_user_pages’
retval = get_user_pages(GET_USER_PAGES_TASK start, nr_pages, write, 0, (struct page **) pages, NULL);
^
In file included from /usr/src/linux-headers-4.9.0-ucs107-common/include/linux/pagemap.h:7:0,
from /usr/src/linux-headers-4.9.0-ucs107-common/include/linux/blkdev.h:14,
from /home/iomemory-vsl-3.2.15.1699/driver_source/port-internal.h:62,
from /home/iomemory-vsl-3.2.15.1699/driver_source/kmem.c:33:
/usr/src/linux-headers-4.9.0-ucs107-common/include/linux/mm.h:1303:6: note: declared here
long get_user_pages(unsigned long start, unsigned long nr_pages,
^
/usr/src/linux-headers-4.9.0-ucs107-common/scripts/Makefile.build:298: recipe for target ‘/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.o’ failed
make[4]: *** [/home/iomemory-vsl-3.2.15.1699/driver_source/kmem.o] Error 1
/usr/src/linux-headers-4.9.0-ucs107-common/Makefile:1515: recipe for target ‘module/home/iomemory-vsl-3.2.15.1699/driver_source’ failed
make[3]: *** [module/home/iomemory-vsl-3.2.15.1699/driver_source] Error 2
Makefile:150: recipe for target ‘sub-make’ failed
make[2]: *** [sub-make] Error 2
Makefile:8: recipe for target ‘all’ failed
make[1]: *** [all] Error 2
make[1]: Leaving directory ‘/usr/src/linux-headers-4.9.0-ucs107-amd64’
Makefile:82: recipe for target ‘modules’ failed
make: *** [modules] Error 2

wie komme ich hier weiter?

Gruß

Josef


#4

Das bedeutet, dass der Treiber nicht mit der Kernelversion kompatibel ist.

Als allererstes: bist du 100% sicher, dass du die Hardware nicht mit den mitglieferten Treibern zum Laufen bekommst? Was sagt denn lspci?

Wenn du den Treiber wirklich benötigst und er wirklich nicht als Paket vorliegt, dann wirst du wohl nicht umher kommen herauszufinden, mit welchen Kernelversionen der Treiber kompatibel ist und dann entsprechend so einen Kernel manuell zu compilieren und zu installieren.


#5

vielen Dank für deine schnelle Antwort!
SanDisk, nunmehr Western Digital, hat fusionIO “intergriert”/ aufgekauft.
Die treiber, die mir WD zur Verfügnung stellt sind entweder Debian jessy, squeezy oder wheezy oder Ubuntu 16.04. Bei CentOS sieht es besser aus, da geht’s bis version 7.
Einen entsprechenden kernel selbst compilieren -> da bin ich noch zu unerfahren.
Ich kann erst wieder in ein paar Tagen an der Maschine arbeiten, dann frag ich mal lspci und poste, was dabei rauskommt.
Schönes Wochenende!
Gruß
Josef