Компиляция модуля ядра mptfc для CentOS 7 — insmod возвращает «недопустимые параметры»

#linux #linux-kernel #centos7 #kernel-module

#linux #linux-ядро #centos7 #kernel-module

Вопрос:

Я пытаюсь скомпилировать драйвер mptfc для модуля CentOS 7. У нас есть некоторое устаревшее оборудование, которое нам необходимо поддерживать в CentOS 7 по причинам зависимости.

mptfc был включен в CentOS 6, но в CentOS 7 они решили больше не включать его в ядро. (источник: Redhat)

Я заметил, что elrepo создала RPM для драйвера (из этой статьи), но мне пришлось копаться в этом. В конечном итоге нашел это в некоторых зеркалах, которые предоставляли возможности архивирования, но компьютер не завершил загрузку ядра. К сожалению, у меня нет этого вывода для отображения, но это было некрасиво. Множество сообщений об ошибках.

Поскольку я не могу использовать CentOS 6, я решил, что следующим вариантом будет скомпилировать модуль ядра самостоятельно. Я никогда этого не делал, поэтому сталкиваюсь с несколькими проблемами.

Сначала я загрузил заголовки для ядра, которое я запускаю (3.10.0-957.el7.x86_64), используя:

 yum install linux-headers
  

Затем я загрузил исходный код на другой компьютер для Linux 3.10 с Github. Я скопировал 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)
  

Я никогда раньше не компилировал модули ядра, поэтому я не уверен, с чего начать отладку этого.

Моя конечная цель — заставить работать устаревшую pci-карту, использующую mptfc. Если есть лучший способ установить драйвер в ядро и он работает, это тоже работает.