Модуль 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 скрипт.

Другие вопросы по тегам