为CentOS 7编译MPTFC内核模块-insmod返回“无效参数”

时间:2019-03-08 03:30:03

标签: linux linux-kernel centos7 kernel-module

我正在尝试为CentOS 7盒编译 mptfc 驱动程序。由于依赖性原因,我们需要在CentOS 7上支持一些旧硬件。

mptfc 已包含在CentOS 6中,但在CentOS 7中,他们决定不再将其包含在内核中。 (来源:Redhat

我注意到 elrepo 为驱动程序创建了RPM(来自此article),但我不得不为此进行挖掘。最终在提供归档功能的某些镜像中找到了它,但是计算机无法完成启动内核。不幸的是,我没有要显示的输出,但这并不漂亮。很多错误消息。

因为我不能使用CentOS 6,所以我决定下一个选择是自己编译内核模块。我从来没有做过,所以遇到了一些问题。

首先,我使用以下命令下载了正在运行的内核的标头(3.10.0-957.el7.x86_64):

yum install linux-headers

然后,我从Github的另一台Linux 3.10计算机上下载了源代码。我将drivers/message/fusion目录从源代码复制到了要编译的计算机上,并将其放在主文件夹中。我将Makefile修改为:

...
obj-$(CONFIG_FUSION_SPI)        += mptbase.o mptscsih.o mptspi.o
obj-m           += mptbase.o mptscsih.o mptfc.o
obj-m   += mptbase.o mptscsih.o mptsas.o
obj-$(CONFIG_FUSION_CTL)        += mptctl.o
obj-$(CONFIG_FUSION_LAN)        += mptlan.o

KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

然后我运行了make。编译正常,但是当我尝试执行以下操作时:

insmod mptfc.ko

我得到以下信息:

[root@host fusion]# insmod mptfc.ko
insmod: ERROR: could not insert module mptfc.ko: Invalid parameters

dmesg返回:

[root@host fusion]# dmesg | tail
[184711.751960] mptfc: disagrees about version of symbol mptscsih_qcmd
[184711.751970] mptfc: Unknown symbol mptscsih_qcmd (err -22)

我以前从未编译过内核模块,所以我不确定从哪里开始调试它。

我的最终目标是获得使用mptfc的旧式PCI卡。如果有更好的方法可以将驱动程序导入内核并正常工作,那也可以。

0 个答案:

没有答案