DKMS做什么? 我该如何使用它?

我最近看到过一些关于DKMS的提及,但目前还不清楚它在我的系统上的实际作用。

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

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

概观

要使用带有DKMS的模块,可以将模块安装文件(可以是源代码或二进制文件)放在/ usr / src / – 中,以及配置文件dkms.conf,告诉DKMS如何构建/配置模块及其内容名字是。 在更高级的场景下,条件构建指令和修补可以由dkms系统完成,但考虑到你的情况,这可能没有必要。

演练

假设您想要为您喜欢的“Awesome Adapter”安装模块。 您将获得源代码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命令,patch命令等.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使用的有用信息。 它不是全面的文档,但它会回答很多问题。 即使所使用的模块不是您要设置的模块,也可以帮助您注意以下示例:

  • RocketRaid – 关于如何使用DKMS设置Highpoint RocketRaid驱动程序RR26xx和RR62x的两个示例。

来自: help.ubuntu.com

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

  • DKMS使用最新的Intel E1000E驱动程序的方法
  • DkmsDriverPackage 。 基于两个网络摄像头驱动程序的教程:r5u870(Sony Vaio MotionEye)和ov51x-jpeg(Playstation EyeToy和Hercules Deluxe)
  • Ubuntuforums nVidia驱动程序的方法,包括DKMS模块
  • Ubuntu手册页 (记录一些官方未记录的内容。)
  • Linux期刊 “探索动态内核模块支持(DKMS)”