Fedora43更新Linux6.18 kernel Nvidia显卡驱动编译失败

1. 系统信息

出问题的系统版本信息:

  • OS:Fedora43
  • Kernel: 6.18.0-cachyos2.fc43.x86_64
  • Nvidia Driver: 580.105.08

2. 问题发现及处理

2.1 问题定位

更新Fedora43系统后,重启发现无法加载显卡驱动。经过观看启动时的失败信息以及查询后得知,相关日志路径为:

1
/var/cache/akmods/nvidia/

到相应路径下查看:

1
2
3
cd /var/cache/akmods/nvidia/

ls -hl

发现有一个错误日志文件:

1
580.105.08-1-for-6.18.0-cachyos2.fc43.x86_64.failed.log

打开日志文件,并进行分析:

1
vim 580.105.08-1-for-6.18.0-cachyos2.fc43.x86_64.failed.log

最终定位到相应错误:

1
2
3
4
5
6
7
8
9
10
Build fails:


nvidia-uvm/uvm_va_range_device_p2p.c:363:13: error: too many arguments to function 'get_dev_pagemap'
363 | get_dev_pagemap(page_to_pfn(page), NULL);
| ^~~~~~~~~~~~~~~
In file included from /nix/store/.../linux-6.18-dev/lib/modules/6.18.0/source/include/linux/mm.h:33,
/nix/store/.../linux-6.18-dev/lib/modules/6.18.0/source/include/linux/memremap.h:214:21: note: declared here
214 | struct dev_pagemap *get_dev_pagemap(unsigned long pfn);
| ^~~~~~~~~~~~~~~

发现驱动get_dev_pagemap() API参数与内核的不匹配导致的。

2.2 问题的解决

经过Google发现网上也有不少人碰到类似的问题,并且发现CachyOS的Github仓库已经提供了对应的patch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
From b7b849218802b7586c4688cb1e6ededf1fa2f0b5 Mon Sep 17 00:00:00 2001
From: Eric Naim <dnaim@cachyos.org>
Date: Mon, 13 Oct 2025 15:54:41 +0800
Subject: [PATCH 3/3] nvidia-uvm: Remove unused get_devmap_page() parameter

Signed-off-by: Eric Naim <dnaim@cachyos.org>
---
kernel-open/nvidia-uvm/uvm_va_range_device_p2p.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/kernel-open/nvidia-uvm/uvm_va_range_device_p2p.c b/kernel-open/nvidia-uvm/uvm_va_range_device_p2p.c
index 8a5c87bd3c3a..767531bd2b3a 100644
--- a/kernel-open/nvidia-uvm/uvm_va_range_device_p2p.c
+++ b/kernel-open/nvidia-uvm/uvm_va_range_device_p2p.c
@@ -21,6 +21,8 @@

*******************************************************************************/

+#include <linux/version.h>
+
#include "uvm_common.h"
#include "uvm_linux.h"
#include "uvm_types.h"
@@ -360,7 +362,11 @@ static NV_STATUS alloc_device_p2p_mem(uvm_gpu_t *gpu,
// a reference to them, so take one now if using DEVICE_COHERENT pages.
if (gpu->parent->cdmm_enabled) {
get_page(page);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 18, 0)
get_dev_pagemap(page_to_pfn(page), NULL);
+#else
+ get_dev_pagemap(page_to_pfn(page));
+#endif /* < 6.18 */
}
#else
// CDMM P2PDMA will never be enabled for this case
--
2.51.0

将对应的patch文件下载下来,但是该往哪里打呢。经过分析日志文件和查询发现:

1
/usr/share/nvidia-kmod-580.105.08/

该目录下有对应的驱动程序压缩代码nvidia-kmod-580.105.08-x86_64.tar.xz,将其复制出来并解压

1
2
3
4
5
6
7
8
9
10

mkdir ~/kernel

cd ~/kernel

cp /usr/share/nvidia-kmod-580.105.08/nvidia-kmod-580.105.08-x86_64.tar.xz ./

tar -xvf nvidia-kmod-580.105.08-x86_64.tar.xz

rm -f nvidia-kmod-580.105.08-x86_64.tar.xz

并将之前下载的patch文件也放在 ~/kernel/目录下,执行命令

1
2
3
4
5
6
7
8
9
10
11
12
patch -p0 < 0003-nvidia-uvm-Remove-unused-get_devmap_page-parameter.patch

# 压缩
tar caf nvidia-kmod-580.105.08-x86_64.tar.xz ./*

# 将压缩后的文件覆盖掉老的压缩包
sudo mv nvidia-kmod-580.105.08-x86_64.tar.xz /usr/share/nvidia-kmod-580.105.08/

cd /usr/share/nvidia-kmod-580.105.08/

# 修改成root,不然编译时会报找不到文件的错误
sudo chown root:root nvidia-kmod-580.105.08-x86_64.tar.xz

经过以上操作后,重启电脑,会自动进行编译,启动没有报错就代表编译成功。

Reference

  1. CachyOS/kernel-patches
  2. linuxKernel.packages.linux_6_18.nvidia_x11: Fails to build due to get_dev_pagemap API change

Fedora43更新Linux6.18 kernel Nvidia显卡驱动编译失败
https://mztchaoqun.com.cn/posts/D100_Linux_NVIDIA/
作者
mztchaoqun
发布于
2025年12月17日
许可协议