Я пытаюсь включить модуль ядра, который у меня есть у устройства, для работы с DKMS. Я могу успешно создать модуль и вручную установить его и включить. Но при использовании DKMS получите ошибку, которая мне никак не помогает:
$ sudo dkms build -m biokernbase -v 3.1.2.1
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area....
make KERNELRELEASE=3.13.0-123-generic all KVERSION=3.13.0-123-generic DKMS=y
....
.ko failed for: 3.13.0-123-generic (x86_64)
Consult the make.log in the build directory
/var/lib/dkms/biokernbase/3.1.2.1/build/ for more information.
make.log
DKMS make.log for biokernbase-3.1.2.1 for kernel 3.13.0-123-generic (x86_64)
Wed Dec 13 17:22:51 CET 2017
make -C /lib/modules/3.13.0-123-generic/build M=/var/lib/dkms/biokernbase/3.1.2.1/build modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-123-generic'
CC [M] /var/lib/dkms/biokernbase/3.1.2.1/build/main.o
CC [M] /var/lib/dkms/biokernbase/3.1.2.1/build/event.o
CC [M] /var/lib/dkms/biokernbase/3.1.2.1/build/usbreader.o
CC [M] /var/lib/dkms/biokernbase/3.1.2.1/build/memory.o
CC [M] /var/lib/dkms/biokernbase/3.1.2.1/build/misc.o
CC [M] /var/lib/dkms/biokernbase/3.1.2.1/build/isa.o
LD [M] /var/lib/dkms/biokernbase/3.1.2.1/build/biokernbase.o
Building modules, stage 2.
MODPOST 1 modules
CC /var/lib/dkms/biokernbase/3.1.2.1/build/biokernbase.mod.o
LD [M] /var/lib/dkms/biokernbase/3.1.2.1/build/biokernbase.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-123-generic'
make.log
PACKAGE_NAME="biokernbase"
PACKAGE_VERSION="3.1.2.1"
CLEAN="make clean DKMS=y"
MAKE[0]="make all KVERSION=$kernelver DKMS=y"
BUILT_MODULE_NAME[0]="biokernbase"
DEST_MODULE_LOCATION[0]="/kernel/drivers/misc"
AUTOINSTALL="yes"
Makefile
DRV_NAME := biokernbase
DRV_PATH := daqnavi
KVERSION := $(shell uname -r)
KDIR := /lib/modules/$(KVERSION)/build
BASE_DIR := /usr/lib/daqnavi
obj-m := $(DRV_NAME).o
$(DRV_NAME)-objs := main.o event.o usbreader.o memory.o misc.o isa.o
EXTRA_CFLAGS += -I$(BASE_DIR)/include -I$(BASE_DIR)/include/hw -I$(BASE_DIR)/include/linux
SYMBOL_PATH = $(BASE_DIR)/modules
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
rm -f *.o *~ .depend .*.cmd *.ko *.mod.c .tmp_versions modules.order Module.symvers
Makefile
Я сейчас на Ubuntu 14.04.5 LTS с ядром 3.13 .0-123-generic.
Документация поставщика утверждает совместимость с Ubuntu 12.04 / 14.04 / 15.10, версия ядра 3.2 / 3.13 / 4.2.
Когда я вручную копирую biokernbase.ko построенный dkms до /lib/modules/3.13.0-123-generic/kernel/drivers/misc/, модуль ядра, кажется, успешно загружен:
$ sudo modprobe biokernbase; echo $?
0
Любые идеи или подсказки очень ценятся.
Удалите скопированную вручную biokernbase.ko из /lib/modules/3.13.0-123-generic/kernel/drivers/misc/.
Измените dkms.conf как это ... (сохраните исходный файл как .bak) ...
PACKAGE_NAME="biokernbase"
PACKAGE_VERSION="3.1.2.1"
CLEAN="make clean"
MAKE[0]="'make' all KVER=${kernelver}"
BUILT_MODULE_NAME[0]="biokernbase"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="yes"
Еще раз выполните sudo dkms build и проверьте, устраняет ли это проблему.
Я работал с этим точно таким же модулем (от Advantech). Я обнаружил, что в их включенном dkms.conf есть некоторые обратные каретки, которые привели к ошибке в сценарии dkms. Попробуйте запустить dos2unix на dkms.conf или иначе убедитесь, что нет нежелательных пробельных символов.
Удалите скопированную вручную biokernbase.ko из /lib/modules/3.13.0-123-generic/kernel/drivers/misc/.
Измените dkms.conf как это ... (сохраните исходный файл как .bak) ...
PACKAGE_NAME="biokernbase"
PACKAGE_VERSION="3.1.2.1"
CLEAN="make clean"
MAKE[0]="'make' all KVER=${kernelver}"
BUILT_MODULE_NAME[0]="biokernbase"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="yes"
Еще раз выполните sudo dkms build и проверьте, устраняет ли это проблему.
Я работал с этим точно таким же модулем (от Advantech). Я обнаружил, что в их включенном dkms.conf есть некоторые обратные каретки, которые привели к ошибке в сценарии dkms. Попробуйте запустить dos2unix на dkms.conf или иначе убедитесь, что нет нежелательных пробельных символов.