Answers:
DKMS(动态内核模块支持)软件包(http://linux.dell.com/dkms/)提供了对安装内核模块补充版本的支持。该软件包将编译并安装到内核树中。卸载将还原以前的模块。默认情况下,安装是安装到当前的内核树中,但是可以使用命令行选项选择任何内核树。此外,在安装新的Ubuntu内核映像软件包后会自动调用DKMS,因此添加到DKMS的模块将在更新过程中自动进行。
总览
要将模块与DKMS一起使用,可以将模块安装文件(可以是源代码或二进制文件)与配置文件dkms.conf一起放在/ usr / src /-中,该配置文件告诉DKMS如何构建/配置模块及其功能。名字是。在更高级的情况下,dkms系统可以完成条件构建说明和修补程序,但是考虑您的情况,可能没有必要。
演练
假设您想为自己的“ Awesome Adaptor”安装模块。您将获得消息来源
tarball awesome-20091211-v1.1.tgz
。使用DKMS,我们通过创建带有适当条目的dkms.conf文件来告诉DKMS如何为您完成此操作。例如,在打开压缩包后,请执行以下操作:
# 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命令,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的两个示例。
更多信息可以在这里找到: