Модуль Krping для RDMA
Я пытался заставить работать модуль krpring, который можно найти здесь: http://git.openfabrics.org/?p=~sgrimberg/krping.git;a=summary
[ 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 's@/var/tmp/OFED_topdir/BUILD@/usr/src@')
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
Выше приведены два make-файла, которые я попытался скомпилировать. Предложите любые изменения, которые я могу попробовать.
1 ответ
ib_alloc_fast_reg_page_list
функция была удалена в ядре 4.4. Было заменено на новое ib_alloc_mr
как часть нового патча API быстрой регистрации.
Однако, если вы используете MLNX OFED, он заменяет модули, предоставляющие эти API, поэтому не имеет значения, какую версию ядра вы используете, только версию MLNX OFED.
Обязательно проверьте, что вы компилируете свой модуль с файлами заголовков MLNX OFED, а не с файлами ядра. Я не пробовал, но в руководстве пользователя есть объяснение того, как скомпилировать 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/
Я считаю, что это означает, что вам придется добавить аналогичные флаги в командную строку препроцессора C. Возможно, есть другие необходимые изменения, скрытые в их configure
скрипт.