2016-07-09 3 views
0

Я пытался сделать krpring работы модуля, который можно найти здесь: http://git.openfabrics.org/?p=~sgrimberg/krping.git;a=summaryKrping модуль для 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...** 

установить драйвер через Mellanox OFED ядра 3.3. Уже скопирован Module.symvers из ofa-kernel/default, но он не работает.

Я пробовал его на разных ядрах на ubuntu 12.04 и 14.04. Ядро, которое я использовал, это 3.18, 3.5 и 4.0. Однако каждый раз я получаю ту же проблему. Если кто-то собрал krping и мог бы с этим справиться? Специально версия ядра, ОС и процедура установки драйвера, который они использовали.

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 

Выше два Makefiles я пытался скомпилировать модуль. Предложите любые изменения, которые я могу попробовать.

+1

George, для форматирования кода, выберите код (или текст из файла) и нажмите «{}» - образную верхнюю часть окон редактирования. – osgx

ответ

2

Функция ib_alloc_fast_reg_page_list была удалена в ядре 4.4. Он был заменен новым ib_alloc_mr как часть патчей new fast registration API.

Если вы используете MLNX OFED, то он заменяет модули, предоставляющие эти API, поэтому не имеет значения, какую версию ядра вы используете, а только версию MLNX OFED.

Обязательно проверьте, что вы компилируете свой модуль против файлов заголовков MLNX OFED, а не для ядра. Я не пробовал, но у user manual есть объяснение о том, как скомпилировать Luster против модулей ядра MLNX OFED, поэтому вы можете попробовать это. Он говорит, что использует:

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/ 

Я считаю, что это означает, что вам нужно добавить аналогичные флаги в свою командную строку с предварительным процессором. Возможно, есть и другие необходимые изменения, скрытые в их сценарии configure.

+0

Я внесла изменения в вопрос и включил два файла, которые я пробовал. Пожалуйста, предложите изменения, если вы обнаружите проблему с ними. –

Смежные вопросы