Проблемы с добавлением поддержки DKMS в модуль ядра - PullRequest
3 голосов
/ 19 января 2012

Я пытаюсь добавить поддержку DKMS в модуль ядра, над которым работаю.

Я поместил исходный код модуля ядра со статической библиотекой для компоновки в следующую директорию:

/usr/src/dpx/1.0

Со следующими файлами:

dkms.conf
Makefile
dpxmtt.c
lib.a
Файл

dkms.conf выглядит так:

MAKE="make"
CLEAN="make clean"
BUILT_MODULE_NAME=dpx
BUILT_MODULE_LOCATION=src/
DEST_MODULE_LOCATION=/kernel/drivers/input/touchscreen
PACKAGE_NAME=dpxm
PACKAGE_VERSION=1.0
REMAKE_INITRD=yes

И make-файл выглядит так:

EXTRA_CFLAGS+=-DLINUX_DRIVER -mhard-float

obj-m += dpx.o
dpx-objs:= dpxmtt.o ../source/lib.a

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

../source/lib.a является хаком, поскольку, когда make-файл вызывается системой сборки dkms, он говорил, что его нельзя найти в каталоге (каталоге сборки), но поскольку он копировался на исходный каталог, я ссылаюсь на него относительно.

Когда я звоню

sudo dkms build -m dpx -v 1.0

Результат почти идеальный:

santos@NS-PC:~$ sudo dkms build -m dpx -v 1.0

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area....
make KERNELRELEASE=3.0.0-14-generic....
ERROR (dkms apport): binary package for dpx: 1.0 not found
Error!  Build of dpx.ko failed for: 3.0.0-14-generic (i686)
Consult the make.log in the build directory
/var/lib/dkms/dpx/1.0/build/ for more information.
nsantos@NS-PC:~$ 

И содержимое файла журнала:

DKMS make.log for dpx-1.0 for kernel 3.0.0-14-generic (i686)
Thu Jan 19 11:07:54 WET 2012
make -C /lib/modules/3.0.0-14-generic/build M=/var/lib/dkms/dpx/1.0/build modules
make[1]: Entering directory `/usr/src/linux-headers-3.0.0-14-generic'
  CC [M]  /var/lib/dkms/dpx/1.0/build/dpxmtt.o
  LD [M]  /var/lib/dkms/dpx/1.0/build/dpx.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /var/lib/dkms/dpx/1.0/build/dpx.mod.o
  LD [M]  /var/lib/dkms/dpx/1.0/build/dpx.ko

make[1]: Leaving directory `/usr/src/linux-headers-3.0.0-14-generic'

Модуль был построен правильно, но он заканчивается с ошибкой:

ERROR (dkms apport): binary package for dpx: 1.0 not found
Error!  Build of dpx.ko failed for: 3.0.0-14-generic (i686)

И я не знаю, что это значит. Кто-нибудь знает?

Ответы [ 2 ]

1 голос
/ 14 марта 2016

Использование:

$(shell uname -r)

в Makefile, это также может быть неправильно! «Shell uname -r» относится к работающему в данный момент ядру, но основная причина использования dkms заключается в том, что он предлагает автоматический метод перекомпиляции модулей ядра, которые находятся вне дерева ядра для каждого вновь установленного ядра. Я имею в виду, что Makefile может относиться к другому ядру, для которого dkms собирает модуль.

Использование:

${kernelver} вместо.

0 голосов
/ 19 февраля 2014

У меня была похожая проблема. Я думаю, что ваш BUILT_MODULE_LOCATION неправильно установлен в каталог src. В вашем примере он должен быть установлен на текущий каталог, или вы можете просто пропустить эту переменную, и dkms по умолчанию будет использовать текущий каталог.

...