DKMS的使用详解

您所在的位置:网站首页 安卓用的linux内核什么意思呀 DKMS的使用详解

DKMS的使用详解

2024-07-12 17:14| 来源: 网络整理| 查看: 265

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

dkms add:将内核模块源代码添加到 DKMS 中,使其可以自动构建和安装。

sudo dkms add -m module_name -v module_version 其中,`module_name` 是内核模块的名称,`module_version` 是内核模块的版本号。

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

dkms install:使用 DKMS 安装内核模块。

sudo dkms install -m module_name -v module_version 此命令将会在 DKMS 管理的所有内核版本上安装指定的内核模块。

dkms remove:从 DKMS 中删除内核模块。

sudo dkms remove -m module_name -v module_version --all 此命令将会从 DKMS 中删除指定的内核模块,并删除相关的文件。使用 `--all` 选项可以删除 DKMS 中所有安装的版本。

dkms status:显示已安装的内核模块及其状态。

sudo dkms status 此命令将会列出所有已安装的内核模块及其状态,例如构建状态、安装状态、错误状态等等。

dkms mktarball:创建内核模块的源代码压缩包。

sudo dkms mktarball -m module_name -v module_version 此命令将会创建指定内核模块的源代码压缩包,可以用于备份或分发。

dkms mkdeb:创建 Debian 软件包。

sudo dkms mkdeb -m module_name -v module_version 此命令将会创建一个 Debian 软件包,包含指定的内核模块和相关文件。

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 中的步骤:

安装 deb 包:

sudo dpkg -i package_name.deb 其中,`package_name.deb` 是要安装的 deb 包的名称。

进入内核模块所在的目录,查看是否存在 dkms.conf 配置文件。如果不存在,需要手动创建。

在内核模块所在的目录中执行以下命令,将内核模块添加到 DKMS 中:

sudo dkms add -m module_name -v module_version 其中,`module_name` 是内核模块的名称,`module_version` 是内核模块的版本号。

构建和安装内核模块:

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/目录

/usr/src/megaraid_sas-07.721.02.00 dkms.conf

# # 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 status megaraid_sas, 07.721.02.00, 4.15.18-20220228, aarch64: built

编译: 

sudo dkms build -m megaraid_sas -v 07.721.02.00

最终生成在: 

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

如果要安装; 

 sudo dkms install -m megaraid_sas -v 07.721.02.00



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3