DKMS:主要作用就是当内核发生变化(版本号),内核之外的驱动可以动态重新生成新的模块。因为内核之外的模块是找/lib/modules/内核版本号的当内核升级后,内核版本号发生变化,目录也发生变化,而内核之外的驱动版本号没有发生变化,此时就用不了了。而DKMS就是为了解决这个问题而出现的
如:
以hello-0.1为例,我们首先需要把代码copy到"/usr/src"下面,这样完整路径将是"/usr/src/hello-0.1"。
DKMS要求我们的代码目录必须以"<module>-<module-version>"的格式命名。本例中,代码的版本是0.1。
DKMS主要的命令可以参考上图所示,分别是add、build、install、uninstall和remove,另外,还可以执行"dkms status"查看目前DKMS系统维护的模块的状态。
dkms.conf
PACKAGE_NAME=
"hello"
PACKAGE_VERSION=
"0.1"
CLEAN=
"make clean"
MAKE[0]=
"make all KVERSION=$kernelver"
BUILT_MODULE_NAME[0]=
"hello"
DEST_MODULE_LOCATION[0]=
"/updates"
AUTOINSTALL=
"yes"
sudo dkms add -m hello -v 0.1
dkms status
sudo dkms build -m hello -v 0.1
sudo dkms install -m hello -v 0.1
/usr/src/hello-0.1/
├── dkms.conf
├── hello.c
└── Makefile
dkms与deb打包结合在一起
1、在debian同一级目录下面创建
dkms.conf
1 PACKAGE_NAME="mt7601u-ap"
2 PACKAGE_VERSION="#MODULE_VERSION#"
3 CLEAN="make clean"
4 MAKE="make all KVERSION=$kernelver"
5 BUILT_MODULE_NAME="mt7601Uap"
6 DEST_MODULE_LOCATION="/kernel/drivers/net/wireless"
7 AUTOINSTALL="yes"
2、在debian目录中的rule
2.1、rules:
1 #!/usr/bin/make -f
2 VERSION=$(shell dpkg-parsechangelog | sed -rne 's,^Version: (.+).*,\1,p' | cut -d . -f 1,2)
3 %:
4 dh $@ --with dkms
5
6 override_dh_auto_configure:
7 override_dh_auto_build:
8 override_dh_auto_test:
9 override_dh_auto_install:
10 override_dh_auto_clean:
11
12 override_dh_dkms:
13 dh_install ap \
14 ate \
15 chips \
16 common \
17 include \
18 LICENSE \
19 mac \
20 Makefile \
21 mcu \
22 mgmt \
23 os \
24 phy \
25 rate_ctrl \
26 README.md \
27 RT2870APCard.txt \
28 RT2870AP.txt \
29 tools \
30 usr/src/mt7601u-ap-$(VERSION)
31
32 dh_dkms -V $(VERSION)
1 PACKAGE_NAME="mt7601u-ap"
2 PACKAGE_VERSION="#MODULE_VERSION#"
3 CLEAN="make clean"
4 MAKE="make all KVERSION=${kernelver}"
5 BUILT_MODULE_NAME="mt7601Uap"
6 DEST_MODULE_LOCATION="/kernel/drivers/net/wireless"
7 AUTOINSTALL="yes"