2016-07-09 11 views
0

ich versucht haben, krpring Modul Arbeit zu machen, die hier gefunden werden kann: http://git.openfabrics.org/?p=~sgrimberg/krping.git;a=summaryKrping Modul für RDMA

[ 446.242534] rdma_krping: Unknown symbol ib_alloc_fast_reg_page_list (err -22) 
[ 446.242542] rdma_krping: disagrees about version of symbol rdma_resolve_addr 
[ 446.242542] rdma_krping: Unknown symbol rdma_resolve_addr (err -22) 
[ 446.242549] rdma_krping: disagrees about version of symbol ib_reg_phys_mr 
    **and so on...** 

ich installieren Sie den Treiber durch Mellanox ofed Kernel 3.3. Bereits kopierte Module.symvers von ofa-kernel/default aber es hat nicht funktioniert.

Ich habe es auf verschiedenen Kernen auf Ubuntu 12.04 und 14.04 versucht. Der Kernel, den ich benutzt habe, ist 3.18, 3.5 und 4.0. Allerdings bekomme ich jedes Mal das gleiche Problem. Wenn jemand krping kompiliert hat und könnte dabei helfen? Speziell die Kernel-Version, das Betriebssystem und die Vorgehensweise, um den von ihnen verwendeten Treiber zu installieren.

MAKEFILE1

KSRC=/lib/modules/`uname -r`/build 
KOBJ=/lib/modules/`uname -r`/build 


obj-m += rdma_krping.o 
rdma_krping-y   := getopt.o krping.o 

default: 
    make -C $(KSRC) M=`pwd` modules 

install: 
    make -C $(KSRC) M=`pwd` modules_install 
    depmod -a 

clean: 
    rm -f *.o 
    rm -f *.ko 
    rm -f rdma_krping.mod.c 
    rm -f Module.symvers 
    rm -f Module.markers 

MAKEFILE2

KSRC=/lib/modules/$(shell uname -r)/build 
KOBJ=/lib/modules/$(shell uname -r)/build 


EXTRA_CFLAGS += -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall 
EXTRA_CFLAGS += $(shell echo $(BACKPORT_INCLUDES) | sed -e '[email protected]/var/tmp/OFED_topdir/[email protected]/usr/[email protected]') 
EXTRA_CFLAGS += $(shell [ -f $(KOBJ)/include/linux/modversions.h ] && \ 
      echo "-DMODVERSIONS -DEXPORT_SYMTAB \ 
        -include $(KSRC)/include/linux/modversions.h") 
EXTRA_CFLAGS += $(shell [ -f $(KOBJ)/include/config/modversions.h ] && \ 
      echo "-DMODVERSIONS -DEXPORT_SYMTAB \ 
        -include $(KSRC)/include/config/modversions.h") 

autoconf_h=$(shell /bin/ls -1 $(KSRC)/include/*/autoconf.h 2> /dev/null | head -1) 
kconfig_h=$(shell /bin/ls -1 $(KSRC)/include/*/kconfig.h 2> /dev/null | head -1) 

ifneq ($(kconfig_h),) 
KCONFIG_H = -include $(kconfig_h) 
endif 

ofa_autoconf_h=$(shell /bin/ls -1 $(OFA)/include/*/autoconf.h 2> /dev/null | head -1) 
ifneq ($(ofa_autoconf_h),) 
OFA_AUTOCONF_H = -include $(ofa_autoconf_h) 
endif 

obj-m += rdma_krping.o 
rdma_krping-y   := getopt.o krping.o 

default: 
    -cp -f $(OFA)/Module*.symvers $(TEST_SRC)/Module.symvers 
    make -C $(KSRC) O=$(KOBJ) SUBDIRS=$(shell pwd) \ 
     LINUXINCLUDE=' \ 
     -D__OFED_BUILD__ \ 
     $(EXTRA_CFLAGS) \ 
     -include $(autoconf_h) \ 
     $(OFA_AUTOCONF_H) \ 
     $(KCONFIG_H) \ 
     -I$(OFA)/include \ 
     $(INCLUDE_COMPAT) \ 
     $$(if $$(CONFIG_XEN),-D__XEN_INTERFACE_VERSION__=$$(CONFIG_XEN_INTERFACE_VERSION)) \ 
     $$(if $$(CONFIG_XEN),-I$$(srctree)/arch/x86/include/mach-xen) \ 
     -I$$(srctree)/arch/$$(SRCARCH)/include \ 
     -Iarch/$$(SRCARCH)/include/generated \ 
     -Iinclude \ 
     -I$$(srctree)/arch/$$(SRCARCH)/include/uapi \ 
     -Iarch/$$(SRCARCH)/include/generated/uapi \ 
     -I$$(srctree)/include \ 
     -I$$(srctree)/include/uapi \ 
     -Iinclude/generated/uapi \ 
     $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) \ 
     -I$$(srctree)/arch/$$(SRCARCH)/include \ 
     -Iarch/$$(SRCARCH)/include/generated \ 
     ' \ 
     modulesymfile=$(TEST_SRC)/Module.symvers \ 
     modules 

install: 
    make -C $(KSRC) O=$(KOBJ) SUBDIRS=$(shell pwd) modules_install 
    depmod -a 

clean: 
    rm -f *.o 
    rm -f *.ko 
    rm -f rdma_krping.mod.c 
    rm -f Module*.symvers 

Oben sind die beiden Makefiles habe ich versucht, das Modul zu kompilieren. Schlagen Sie Änderungen vor, die ich ausprobieren kann.

+1

George, für die Code-Formatierung, wählen Sie den Code (oder den Text aus der Datei), und drücken Sie "{}" - förmige Schaltfläche oben in Ihrem Bearbeitungsfenster. – osgx

Antwort

2

Die Funktion ib_alloc_fast_reg_page_list wurde im Kernel 4.4 entfernt. Es wurde mit dem neuen ib_alloc_mr als Teil der new fast registration API Patches ersetzt.

Wenn Sie jedoch MLNX OFED verwenden, ersetzt es die Module, die diese APIs bereitstellen, es ist also egal, welche Kernel-Version Sie verwenden, nur die Version von MLNX OFED.

Achten Sie darauf, dass Sie Ihr Modul gegen die MLNX OFED-Header-Dateien kompilieren und nicht gegen den Kernel. Ich habe es nicht versucht, aber die user manual hat eine Erklärung darüber, wie Lustre gegen die MLNX OFED Kernel-Module zu kompilieren, also möchten Sie vielleicht versuchen, dass. Es sagt zu verwenden:

EXTRA_LNET_INCLUDE="-I/usr/src/ofa_kernel/default/include/ -include /usr/src/ofa_kernel/default/include/linux/compat-2.6.h" ./configure --with-o2ib=/usr/src/ofa_kernel/default/ 

Ich glaube, das bedeutet, dass Sie ähnliche Flags zu Ihrem C Pre-Prozessor-Befehlszeile hinzufügen müssten. Vielleicht sind andere notwendige Änderungen in ihrem configure Skript versteckt.

+0

Ich habe Änderungen an der Frage vorgenommen und zwei make-Dateien eingeschlossen, die ich ausprobiert habe. Bitte schlagen Sie Änderungen vor, wenn Sie ein Problem mit diesen finden. –