2025年DKMS的使用详解

DKMS的使用详解1 linux dkms 是什么 DKMS Dynamic Kernel Module Support 是一种框架 用于在 Linux 操作系统中构建和维护内核模块 内核模块是 Linux 内核的一部分 它们提供了许多功能 例如硬件驱动程序 网络协议栈扩展 文件系统等等 DKMS 简化了内核模块的安装和升级过程

大家好,我是讯享网,很高兴认识大家。

1,linux dkms是什么

DKMS (Dynamic Kernel Module Support) 是一种框架,用于在 Linux 操作系统中构建和维护内核模块。内核模块是 Linux 内核的一部分,它们提供了许多功能,例如硬件驱动程序、网络协议栈扩展、文件系统等等。DKMS 简化了内核模块的安装和升级过程,可以自动地重新编译内核模块以适应新的内核版本。

在 DKMS 中,每个内核模块都被视为一个源代码包,并通过一个称为 dkms.conf 的配置文件进行管理。该配置文件指定了源代码的位置、编译和安装模块所需的命令,以及其他必要的信息。当内核更新时,DKMS 会自动重建和安装内核模块,以确保它们与新内核版本兼容。

DKMS 还允许用户创建和安装第三方内核模块,以扩展 Linux 内核的功能。这些模块可以从官方仓库或其他来源获得。一些常见的第三方内核模块包括虚拟机驱动程序、文件系统、网络协议栈扩展等等。

2, 如何安装和使用DKMS

在大多数 Linux 发行版中,DKMS 已经预装了,如果您的系统没有预装 DKMS,可以通过以下命令进行安装:

对于 Debian/Ubuntu 系统:

sudo apt-get install dkms

讯享网

对于 Fedora/CentOS/RHEL 系统:

讯享网sudo yum install epel-release sudo yum install dkms

3, 如何使用DKMS

  1. dkms add:将内核模块源代码添加到 DKMS 中,使其可以自动构建和安装。
    sudo dkms add -m module_name -v module_version 其中,`module_name` 是内核模块的名称,`module_version` 是内核模块的版本号。
  2. dkms build:使用 DKMS 构建内核模块。
    讯享网sudo dkms build -m module_name -v module_version 此命令将会在 DKMS 管理的所有内核版本上构建指定的内核模块。 sudo dkms build -m module_name -v module_version -k kernel_version -k:指定要使用的内核版本。其中,`kernel_version` 是要使用的内核版本号。如果不指定该选项,则默认使用当前正在运行的内核版本。 -m:指定要构建的内核模块名称,其中,module_name 是要构建的内核模块名称。 -v:指定要构建的内核模块版本号。 其中,module_version 是要构建的内核模块的版本号。 例如,如果要在内核版本为 5.10.0-7 的系统上构建版本号为 1.0 的内核模块,可以使用以下命令: sudo dkms build -m module_name -v 1.0 -k 5.10.0-7
  3. dkms install:使用 DKMS 安装内核模块。
    sudo dkms install -m module_name -v module_version 此命令将会在 DKMS 管理的所有内核版本上安装指定的内核模块。
  4. dkms remove:从 DKMS 中删除内核模块。
    讯享网sudo dkms remove -m module_name -v module_version --all 此命令将会从 DKMS 中删除指定的内核模块,并删除相关的文件。使用 `--all` 选项可以删除 DKMS 中所有安装的版本。
  5. dkms status:显示已安装的内核模块及其状态。
    sudo dkms status 此命令将会列出所有已安装的内核模块及其状态,例如构建状态、安装状态、错误状态等等。
  6. dkms mktarball:创建内核模块的源代码压缩包。
    讯享网sudo dkms mktarball -m module_name -v module_version 此命令将会创建指定内核模块的源代码压缩包,可以用于备份或分发。
  7. dkms mkdeb:创建 Debian 软件包。
    sudo dkms mkdeb -m module_name -v module_version 此命令将会创建一个 Debian 软件包,包含指定的内核模块和相关文件。
  8. dkms mkrpm:创建 RPM 软件包。
    讯享网sudo dkms mkrpm -m module_name -v module_version ``` 此命令将会创建一个 RPM 软件包,包含指定的内核模块和相关文件。 

以上命令只是 DKMS 提供的一部分功能,还有许多其他命令和选项可以用来管理内核模块。您可以使用 man dkms 命令查看 DKMS 的完整帮助文档。

4,dkms不依赖内核源码吗

DKMS 不依赖于内核源代码,因为它是使用内核源代码的头文件和符号文件进行编译的。DKMS 需要安装一个与当前正在运行的内核版本匹配的内核头文件包,以便在编译和安装内核模块时使用正确的头文件。

在大多数 Linux 发行版中,内核头文件包已经预装。如果没有预装,可以通过包管理器安装。例如,在 Ubuntu 系统上,需要安装一个名为 linux-headers 的包,可以使用以下命令进行安装:

sudo apt-get install linux-headers-$(uname -r)

其中,$(uname -r) 会自动获取当前正在运行的内核版本号,并将其作为参数传递给包管理器。这样就可以安装与当前内核版本匹配的内核头文件包了。

在 DKMS 中,可以在 dkms.conf 配置文件中指定要使用的内核头文件的位置。如果您需要在不同的内核版本之间切换,可以使用 dkms 命令的 -k 选项指定要使用的内核版本,例如:

讯享网sudo dkms build -m module_name -v module_version -k 5.10.0-7-amd64

这将使用内核版本为 5.10.0-7-amd64 的头文件进行编译内核模块。

5,内核模块是通过 deb 包提供

如果内核模块是通过 deb 包提供的,可以使用 DKMS 将其编译为可在多个内核版本上运行的模块。以下是将 deb 包中的内核模块添加到 DKMS 中的步骤:


讯享网

  1. 安装 deb 包:
    sudo dpkg -i package_name.deb 其中,`package_name.deb` 是要安装的 deb 包的名称。
  2. 进入内核模块所在的目录,查看是否存在 dkms.conf 配置文件。如果不存在,需要手动创建。
  3. 在内核模块所在的目录中执行以下命令,将内核模块添加到 DKMS 中:
    讯享网sudo dkms add -m module_name -v module_version 其中,`module_name` 是内核模块的名称,`module_version` 是内核模块的版本号。 
  4. 构建和安装内核模块:
    sudo dkms build -m module_name -v module_version sudo dkms install -m module_name -v module_version ```build` 命令用于构建内核模块,`install` 命令用于安装内核模块。 

现在,内核模块已经成功添加到 DKMS 中,并且已经构建和安装到当前正在运行的内核版本中。如果需要在其他内核版本中使用该内核模块,可以使用 -k 选项指定要使用的内核版本,例如:

讯享网sudo dkms build -m module_name -v module_version -k 5.10.0-7-amd64 

这将使用内核版本为 5.10.0-7-amd64 的头文件进行编译内核模块。

例子: 

源码必须放在/usr/src/目录

# # Master copy of dkms.conf for megaraid_sas. # Dont edit this file manually. Auto build script makes necessary changes. # PACKAGE_NAME="megaraid_sas" PACKAGE_VERSION=07.721.02.00 MOD_PATH=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION} MAKE[0]="make -C ${kernel_source_dir} SUBDIRS=${MOD_PATH}/build modules" CLEAN="make -C ${kernel_source_dir} SUBDIRS=${MOD_PATH}/build clean" BUILT_MODULE_NAME[0]="megaraid_sas" DEST_MODULE_LOCATION[0]="/kernel/drivers/scsi/megaraid/" MODULES_CONF_ALIAS_TYPE[0]="scsi_hostadapter" REMAKE_INITRD="yes"

 Makefile

讯享网obj-m                   += megaraid_sas.o megaraid_sas-objs       := megaraid_sas_base.o megaraid_sas_fusion.o megaraid_sas_fp.o megaraid_sas_debugfs.o

dmks增加模块: 

sudo dkms add -m megaraid_sas -v 07.721.02.00

自动创建:  /var/lib/dkms/megaraid_sas/

编译: 

sudo dkms build -m megaraid_sas -v 07.721.02.00

最终生成在: 

/var/lib/dkms/megaraid_sas/07.721.02.00/4.15.18-/aarch64/module/
megaraid_sas.ko
 

如果要安装; 

 sudo dkms install -m megaraid_sas -v 07.721.02.00

小讯
上一篇 2025-02-16 20:19
下一篇 2025-01-11 21:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35949.html