跳转至内容

动态内核模块支持

来自 ArchWiki
(重定向自 Dkms)

来自 Wikipedia

动态内核模块支持 (DKMS) 是一个程序/框架,它能够生成通常位于内核源代码树之外的 Linux 内核模块。其理念是让 DKMS 模块在安装新内核时自动重新构建。

这意味着用户不必等待公司、项目或软件包维护者发布模块的新版本。自 pacman hook 引入以来,在升级内核时,模块的重新构建已自动处理。

安装

安装 dkms 包 **以及** 目标内核/内核的头文件。例如,对于默认的 linux 内核,这将是 linux-headers。其他内核有其各自的头文件包。

许多位于内核源代码树之外的模块都有 DKMS 变体;一些托管在 官方仓库 中,大多数在 AUR 中找到。

注意 如果内核 强制只加载已签名模块(例如在使用 内核锁定模式 时),DKMS 构建的模块将无法加载。

升级

尽管 DKMS 模块在内核升级过程中的重新构建通常是无缝的,但有时仍可能发生重新构建失败的情况。您应该特别注意 pacman 的输出。如果系统依赖 DKMS 模块才能成功启动,以及/或者您将 DKMS 用于非官方仓库中的自定义内核,这一点尤其适用。

为了应对内核的更改、修复 bug 或添加必要的功能,请考虑在重启前升级 DKMS 包。

用法

用于手动调用 DKMS 的用法。

通过以下方式可以启用 Tab 键补全:

# source /usr/share/bash-completion/completions/dkms

列出模块

列出树中模块、版本和内核的当前状态

# dkms status

重新构建模块

为当前运行的内核重新构建所有模块

# dkms autoinstall

或为特定内核

# dkms autoinstall -k 3.16.4-1-ARCH

为当前运行的内核构建一个*特定*模块

# dkms install -m nvidia -v 334.21

或者简单地:

# dkms install nvidia/334.21

为*所有*内核构建一个模块

# dkms install nvidia/334.21 --all

移除模块

移除一个模块(旧模块不会自动移除)

# dkms remove -m nvidia -v 331.49 --all

或者简单地:

# dkms remove nvidia/331.49 --all

如果 dkms 包被移除,则关于先前模块构建文件的信息将丢失。在这种情况下,请检查 /usr/lib/modules/kernel_release/var/lib/dkms/package_name 并删除所有不再使用的文件和目录。

DKMS 包创建

请参阅 DKMS 包指南

参见