最近我看到一些关于 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
- 构建模块的命令(在目录 src/ 中运行 make)。
- 清理源树的命令(在目录 src/ 中运行 make clean)。
- 不带 .o 或 .ko 扩展名的模块名称。如果构建了多个模块,这实际上可能是一个模块数组,请参阅 man dkms。
- DKMS 可以在其中找到构建的模块。
- DKMS 的名称和版本应该与模块关联。
- 安装模块后重新制作 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 的有用信息。它不是全面的文档,但可以回答很多问题。即使使用的模块不是您想要设置的模块,它也可以帮助您注意以下示例:
从:帮助中心
更多信息可以在这里找到:
- DKMS 如何使用最新的 Intel E1000E 驱动程序
- 驱动包. 本教程基于两个网络摄像头驱动程序:r5u870(Sony Vaio MotionEye)和 ov51x-jpeg(Playstation EyeToy 和 Hercules Deluxe)
- Ubuntuforums nVidia 驱动程序指南(包括 DKMS 模块)
- Ubuntu 手册页(记录一些官方未记录的部分。)
- Linux 日志“探索动态内核模块支持 (DKMS)”