Linux DKMS
Table of Contents
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 manpage
- 也可以在Linux下执行
man dkms
查看
- 也可以在Linux下执行
- DKMS packaging
- CentOS: Build Your Own Kernel Modules