文章目录
- 一、安装DKMS
- 二、DKMS使用示例
- 1. 源码准备
- 2. 增加dkms.conf
- 3. 添加模块
- 4. 编译模块
- 5. 安装模块
- 三、基于DKMS的deb安装包制作
Dynamic Kernel Module Support(DKMS)是一个用于动态管理内核模块的框架,由DELL创建的项目,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。
一、安装DKMS
sudo apt-get install dkms
安装成功后可以用dkms -V命令查询当前dkms版本
二、DKMS使用示例
1. 源码准备
首先要准备好可以在系统下编译通过的驱动代码,包含源文件和Makefile文件,可以用make命令生成ko文件,并通过modprobe命令正常加载。确保通过dmesg和测试无误后,可以进行下一步DKMS驱动的制做。
把驱动源码拷贝到/usr/src目录下命名格式:包名-版本号
示例:
deepin-anything-0.0 hello-1.0 realtek-wifi-1.0.7
2. 增加dkms.conf
示例:
PACKAGE_VERSION=“1.0”
PACKAGE_NAME=“hello”
MAKE[0]=“make -C k e r n e l s o u r c e d i r K B U I L D E X T M O D = {kernel_source_dir} KBUILD_EXTMOD= kernelsourcedirKBUILDEXTMOD={dkms_tree}/ P A C K A G E N A M E / {PACKAGE_NAME}/ PACKAGENAME/{PACKAGE_VERSION}/build modules”
CLEAN=“make -C k e r n e l s o u r c e d i r K B U I L D E X T M O D = {kernel_source_dir} KBUILD_EXTMOD= kernelsourcedirKBUILDEXTMOD={dkms_tree}/ P A C K A G E N A M E / {PACKAGE_NAME}/ PACKAGENAME/{PACKAGE_VERSION}/build clean”
DEST_MODULE_LOCATION[0]=“/updates/”
BUILT_MODULE_NAME[0]=“hello”
AUTOINSTALL=“yes”
3. 添加模块
sudo dkms add -m hello -v 1.0 或者
sudo dkms add hello/1.0
通过 dkms status 查询可以看到驱动模块已添加。
uos@uos-PC:/usr/src/hello-1.0$ dkms status
hello/1.0: added
4. 编译模块
sudo dkms build hello/1.0
编译成功后dkms status查询可以看到模块处于built状态。
uos@uos-PC:/usr/src/hello-1.0$ dkms status
hello/1.0, 6.1.32-amd64-desktop-hwe, x86_64: built
5. 安装模块
sudo dkms install hello/1.0
安装成功后dkms status查询可以看到模块处于installed状态。
uos@uos-PC:/usr/src/hello-1.0$ dkms status
hello/1.0, 6.1.32-amd64-desktop-hwe, x86_64: installed
三、基于DKMS的deb安装包制作
为了方便用户的使用,基于DKMS来制作deb安装包是一个很好的选择。
安装所需工具
sudo apt-get install dh-make libdigest-md5-file-perl
模块必须处于built状态!dkms命令中集成了对应发行版本的打包参数 mkdeb/mdrpm,所以只需要执行如下命令
sudo dkms mkdeb hello/1.0
可以从 /var/lib/dkms/{module}/{version}/deb 目录下获取deb包。
UOS在dkms源码的基础上增加debian目录的方式,最终通过dpkg-buildpackage -us -uc将源文件打包成deb包。
目录格式如下:
├── debian
│ ├── changelog
│ ├── compat
│ ├── control
│ ├── copyright
│ ├── install
│ ├── postinst
│ ├── prerm
│ ├── rules
│ └── source
│ └── format
└── usr
└── src└── hello-1.0├── 4.19.0-amd64-desktop├── ...
并且UOS对dkms的重新编译做了优化,可以在先判断驱动文档的KABI兼容性,决定内核升级的时候是否进行重新编译。