Photo by BoliviaInteligente / Unsplash

记录解决Linux 内核更新时无法加载 Nvidia 驱动问题实践

实践 | Practices 2025年1月13日

1.First | 序

此文简单记录如何使用 DKMS 修复 Nvidia 驱动程序

解决更新 Linux 内核后掉驱动的问题

需要具备以下条件

  • 使用 Linux 发行版已安装好 DKMS 程序
  • Linux Kernel 更新前 Nvidia 驱动已安装
  • 简单的 Linux 命令行操作
  • 解决问题的能力

1.1.What is DKMS | 什么是 DKMS ?

💡
以下释义来自ChatGPT

DKMS(Dynamic Kernel Module Support)是一种用于动态管理和编译内核模块的框架。它允许在 Linux 系统上方便地构建、安装和卸载内核模块,而无需将模块绑定到特定的内核版本。这对于需要频繁更新内核或使用自定义模块的用户非常有用。

1.1.1.DKMS 的主要特点

  1. 动态编译:
    当系统升级到新的内核时,DKMS 会自动重新编译并安装模块,无需手动干预。

  2. 内核版本独立:
    DKMS 模块不是绑定到特定的内核版本,而是存储在一个源代码树中,能够根据需要为不同的内核版本编译。

  3. 模块管理:
    DKMS 提供了命令来安装、删除、构建和重新构建模块。例如:

    • dkms add: 添加一个模块到 DKMS 系统。
    • dkms build: 为当前内核或指定内核构建模块。
    • dkms install: 安装模块,使其加载到内核中。
    • dkms remove: 从 DKMS 系统中移除模块。
  4. 跨平台支持:
    DKMS 支持多种 Linux 发行版,如 Ubuntu、Debian、Fedora、openSUSE 等。

1.1.2.使用场景

  1. 第三方驱动支持:
    如显卡驱动(NVIDIA、AMD)或网络适配器驱动,在内核升级后需要重新编译时,DKMS 能自动完成。

  2. 自定义模块开发:
    开发者可以使用 DKMS 管理自己的模块,在开发和测试过程中简化模块的构建和加载过程。

  3. 内核更新后自动化:
    系统更新内核后,DKMS 会检测模块是否需要重新构建,并在启动时自动加载新模块。

1.1.3.DKMS 的安装

在大多数发行版中,DKMS 可以通过包管理器安装。例如:

# 在 openSUSE
sudo zypper install dkms

# 在 Ubuntu/Debian
sudo apt install dkms

# 在 Fedora
sudo dnf install dkms

1.1.4.配置文件示例

DKMS 模块的配置文件通常位于 /usr/src/<module-name>-<version> 中,主要包括 dkms.conf 文件。例如:

PACKAGE_NAME="example-module"
PACKAGE_VERSION="1.0"
BUILT_MODULE_NAME[0]="example"
DEST_MODULE_LOCATION[0]="/extra/example"
AUTOINSTALL="yes"

1.1.5.总结

DKMS 是 Linux 环境中管理动态内核模块的强大工具,特别适合于需要频繁更新内核的场景,能够显著简化模块的维护工作。

1.2.SW&OS Version | * 版本

1.2.1.OS | 系统

1.2.2.Nvidia Driver Version

1.2.3.GPU Model

2.Procedure | 步骤

2.1.查看已安装显卡驱动版本

ll /usr/src
💡
回显如下

2.2.编译安装显卡模块

dkms install -m nvidia -v 550.54.15

# -v 后版本参数请对应上方值

ex👇

Sign command: /lib/modules/6.4.0-150600.23.30-default/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Building module:
Cleaning build area...
'make' -j32 NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=6.4.0-150600.23.30-default modules............
Signing module /var/lib/dkms/nvidia/550.54.15/build/nvidia.ko
Signing module /var/lib/dkms/nvidia/550.54.15/build/nvidia-uvm.ko
Signing module /var/lib/dkms/nvidia/550.54.15/build/nvidia-modeset.ko
Signing module /var/lib/dkms/nvidia/550.54.15/build/nvidia-drm.ko
Signing module /var/lib/dkms/nvidia/550.54.15/build/nvidia-peermem.ko
Cleaning build area...

nvidia.ko.zst:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/6.4.0-150600.23.30-default/updates/

nvidia-uvm.ko.zst:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/6.4.0-150600.23.30-default/updates/

nvidia-modeset.ko.zst:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/6.4.0-150600.23.30-default/updates/

nvidia-drm.ko.zst:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/6.4.0-150600.23.30-default/updates/

nvidia-peermem.ko.zst:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/6.4.0-150600.23.30-default/updates/
depmod.....

3.Verify | 验证

使用 nvidia-smi 命令验证


nvidia-smi

标签

xzllll

三分钟热度三分钟收获