2012-01-19 52 views
3

我正在嘗試在我正在處理的內核模塊中添加DKMS支持。將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 

而且makefile是這樣的:

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是一個破解,因爲當生成文件被dkms構建系統調用時,它說它不能在目錄(構建目錄)中找到,但是因爲它被複制到源目錄,我相對引用它。

當我打電話

sudo dkms build -m dpx -v 1.0 

結果幾乎是完美的:

[email protected]:~$ 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. 
[email protected]:~$ 

和日誌文件的內容是:

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) 

我不知道這意味着什麼。有人知道嗎?

回答

0

我有一個類似的問題。我認爲你的BUILT_MODULE_LOCATIONsrc目錄設置不正確。它應該在您的示例中設置爲當前目錄,或者您可以忽略此變量,並且dkms將默認爲當前目錄。

1

使用:

$(shell uname -r)

在Makefile這可能是也是錯誤的! 「shell uname -r」指的是當前運行的內核,但是使用dkms的主要原因是它提供了一種自動方法來重新編譯駐留在每個新安裝的內核的內核樹之外的內核模塊。我的意思是說,Makefile可能指的是dkms構建模塊的另一個內核。

用途:

${kernelver}代替。