RDMA的Krping模块

时间:2016-07-09 19:43:58

标签: linux-kernel infiniband rdma mellanox

我一直在努力让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的内核3.3安装驱动程序。 已经从ofa-kernel / default复制了Module.symvers但它没有工作。

我在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

以上是我试图编译模块的两个makefile。建议我可以尝试的任何更改。

1 个答案:

答案 0 :(得分:2)

内核4.4中删除了ib_alloc_fast_reg_page_list函数。它已作为ib_alloc_mr补丁的一部分替换为新的new fast registration API

如果您正在使用MLNX OFED,它会替换提供这些API的模块,因此您使用的内核版本无关紧要,只有MLNX OFED的版本。

请务必检查您是否针对MLNX OFED头文件编译模块,而不是针对内核编译。我还没有尝试过,但user manual解释了如何针对MLNX OFED内核模块编译Lustre,所以你可能想尝试一下。它说要使用:

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脚本中隐藏了其他必要的更改。