DKMS 有什么用?如何使用它?

DKMS 有什么用?如何使用它?

最近我看到一些关于 DKMS 的提及,但不清楚它在我的系统上实际上做什么。

DKMS 实际上做什么以及如何使用它?

答案1

知识管理系统(动态内核模块支持)包(http://linux.dell.com/dkms/) 提供对安装内核模块补充版本的支持。该软件包将编译并安装到内核树中。卸载将恢复以前的模块。默认情况下,安装到当前内核树中,但可以使用命令行选项选择任何内核树。此外,在安装新的 Ubuntu 内核映像软件包时会自动调用 DKMS,因此添加到 DKMS 的模块将自动在更新过程中携带。

概述

要将模块与 DKMS 一起使用,需要将模块安装文件(可以是源代码或二进制文件)放在 /usr/src/- 中,同时还要放置一个配置文件 dkms.conf,该文件会告诉 DKMS 如何构建/配置模块及其名称。在更高级的情况下,dkms 系统可以完成条件构建指令和修补,但考虑到您的情况,这可能不是必需的。

演练

假设你想为你喜爱的“Awesome Adaptor”安装一个模块。系统会为你提供一个源tarball awesome-20091211-v1.1.tgz

使用 DKMS,我们通过创建包含适当条目的 dkms.conf 文件来告诉 DKMS 如何为您执行此操作。例如,在我们解压 tarball 后:

# cd awesome-20091211-v1.1/
# touch dkms.conf 
# create dkms.conf file
# vi dkms.conf

在里面dkms.conf,我们可以添加以下行:

MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=awesome
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=awesome
PACKAGE_VERSION=1.1
REMAKE_INITRD=yes

所有目录均与 dkms.conf 文件的位置相关。这告诉 DKMS

  1. 构建模块的命令(在目录 src/ 中运行 make)。
  2. 清理源树的命令(在目录 src/ 中运行 make clean)。
  3. 不带 .o 或 .ko 扩展名的模块名称。如果构建了多个模块,这实际上可能是一个模块数组,请参阅 man dkms。
  4. DKMS 可以在其中找到构建的模块。
  5. DKMS 的名称和版本应该与模块关联。
  6. 安装模块后重新制作 initrd 映像。

您还可以添加选项以在构建或安装之前或之后调用脚本,提供额外的(条件)make 命令、修补命令等。dkms.conf 实际上源自 shell 脚本,因此如果需要,可以进行相当多的欺骗。这些选项和更多内容在 man dkms 中的 dkms.conf 部分中有描述。

接下来,我们通过将模块安装文件复制到内核源代码树 /usr/src/- 中来将模块安装到 DKMS 中,并将新模块告知 DKMS:

# ls
    README dkms.conf lib src
# sudo cp -R . /usr/src/awesome-1.1
# sudo dkms add -m awesome -v 1.1
    dkms does its thing...

就是这样!DKMS 现已将我们的模块添加到其为将来的内核安装而构建的模块列表中。为了确保它正常工作并将模块安装到我们当前的内核中,我们可以指示 dkms 构建和安装模块:

# sudo dkms build -m awesome -v 1.1
    dkms does its thing.... watch for build errors... you may need to tweak dkms.conf
# sudo dkms install -m awesome -v 1.1
    dkms does its thing.... module is copied into current kernel module tree

如果幸运的话,您的模块将被安装并重新安装到未来的内核更新中。

例子

DKMS 手册页包含有关如何设置您喜欢的内核模块以用于 DKMS 的有用信息。它不是全面的文档,但可以回答很多问题。即使使用的模块不是您想要设置的模块,它也可以帮助您注意以下示例:

从:帮助中心

更多信息可以在这里找到:

相关内容