dkms 与模块助手

Fah*_*tha 8 debian dkms

module-assistant一段时间以来,它一直是编译和构建包含内核模块的二进制 Debian 软件包的事实上的方法。最近出现了一个类似的实用程序 - dkms

如果有人有使用这两种方法的经验,请比较和对比使用一种与另一种的优缺点。

答案中要解决的一项是是否也dkms为内核模块构建二进制 Debian 软件包,如果是,如何,如果是,由m-a和构建的软件包之间有什么区别dkms(如果有)。

我个人从来没有用过dkms,但我已经module-assistant零星使用了很多年,这是一个很好的体验。我没有立即试验的计划dkms,所以我认为我不是写答案的合适人选。

随机谷歌搜索在这里找到了一个讨论,也是这个

不用说,任何答案都应该基于第一手经验,而不是从网络论坛复制。使用两者的工作示例会很好。可能nvidia-kernel,因为这是很常用的。是的,我知道它是一个专有的内核模块。:-(

更新:感谢 jordanm 的回答。我想要一些更详细的关于引擎盖下正在发生的事情的东西,对于m-adkms,尽管我最初没有提到这一点。此外,听起来大部分时间dkms都会透明和自动地工作。但是dkms. 他们如何处理手动编译/安装的内核?从二进制包安装或本地安装。

jor*_*anm 7

从用户的角度来看,主要区别在于module-assistant( m-a) 是手动编译内核模块的工具,而dkms无需用户干预即可自动编译。如果您正在使用m-a并且内核包已升级,则必须使用m-a. 由于m-a仅针对您当前运行的内核进行编译,这意味着如果您需要的模块m-a是图形驱动程序,则下次重新启动时您的 GUI 将损坏。

触发器dkms在每个内核包安装上执行,它确保为系统上的每个内核安装模块。我个人想不出让最终用户继续使用m-a.

下面是一些例子m-aVSdkmsnvidia内核模块:

使用模块助手构建模块:

apt-get install module-assistant nvidia-kernel-source
m-a prepare # install the header package for the current kernel and compilation tools 
m-a install nvidia-kernel-source # compile the source into a .deb and install it
Run Code Online (Sandbox Code Playgroud)

使用 dkms 构建模块:

apt-get install nvidia-kernel-dkms
Run Code Online (Sandbox Code Playgroud)

内核升级module-assistant

apt-get upgrade # assumed to upgrade kernel
# reboot
m-a prepare
m-a install nvidia-kernel-source
Run Code Online (Sandbox Code Playgroud)

内核升级dkms

apt-get upgrade # assumed to upgrade kernel
Run Code Online (Sandbox Code Playgroud)