DKMS简介

DKMS on Ubuntu

DKMS全称是Dynamic Kernel Module Support,它可以帮我们维护内核外的驱动程序,在内核版本变动之后可以自动重新生成新的模块。在使用dkms之前首先需要确保系统中已经安装了DKMS,在Ubuntu下可以执行下面这个命令安装。

sudo apt-get install dkms

DKMS要求我们的代码目录必须以<module>-<version>的格式命名,主要命令如下所示。

status
查看管理状态
add
添加模块
build
编译模块
install
安装模块
uninstall
卸载模块
remove
删除模块

编写dkms.conf

要使用DKMS管理模块,需要在源代码下面包含dkms.conf文件,在源代码根目录下面创建并配置dkms.conf,以hello-0.1为例。

PACKAGE_NAME="hello"
PACKAGE_VERSION="0.1"
AUTOINSTALL="yes"

CLEAN="make clean"

BUILT_MODULE_NAME[0]="hello"
DEST_MODULE_LOCATION[0]="/updates"
MAKE[0]="make all KVERSION=$kernelver"
PACKGE_NAME
用于指示整个包的模块,必须要设定。必须要有编译的模块和这个参数同名,否则将提示找不到二进制包,所以可以指定为编译的任何一个模块名。
AUTOINSTALL
当更改kernel的时候会自动更新模块
BUILT_MODULE_NAME[0]
当有多个模块时,可以按序号设定每个模块的参数,注意模块名后面不需要加后缀。

添加模块

首先将代码命名为module-version格式并复制到/usr/src/下面,执行如下命令添加源代码到dkms。

sudo dkms add hello/0.1

接下来可以执行如下命令编译和安装。

sudo dkms build hello/0.1
sudo dkms install hello/0.1

删除模块

如果不需要使用模块,可以用如下命令删除。

sudo dkms remove hello/0.1 --all

制作deb包

使用DKMS更为常见的用法是制作deb包,用户可以直接从deb包安装,制作deb包需要安装如下工具。

sudo apt-get install dh-make libdigest-md5-file-perl

制作deb包的命令如下。

sudo dkms mkdeb hello/0.1

路径

假定我们的源码目录为sample-1.4.1。

源代码目录
sample-1.4.1
备份源代码目录
/usr/src/sample-1.4.1
源码包路径
/var/lib/dkms/sample/1.4.1/tarball/sample-1.4.1.dkms.tar.gz
安装包路径
/var/lib/dkms/sample/1.4.1/deb…

DKMS on RHEL

安装dkms环境

  1. 下载并安装dkms:RPM resource dkms
  2. 如果要用rpmbuild需要安装rpm-build

    yum install rpm-build
    

参考资料