解决一例Fedora 31安装NVIDIA官方驱动程序无法使用DKMS注册的问题

article/2025/10/3 15:43:43

  更新: If Not True Then False提供了一份Patch后的340.108版驱动,直接使用此版驱动安装包不会遇到DKMS报错,升级5.5内核时也没有问题,点击进入下载页面。


  手头一台Dell D630的本本,虽然已经10年以上寿命,拿来折腾升级续命一番后现在的配置为:Intel Core 2 Duo T9500/PM965/4G DDR2/NVIDIA Quadro NVS 135M/1280*800/Intel 545s 256GB SSD。
现在用来装个Linux玩玩,选择的发行版是Fedora Workstation。
  此为前提。

  试过RPM Fusion里的akmod-nvidia驱动两次总有问题,第一次是每次开机都有个报错,NVIDIA X Server Settings也无法启动;第二次直接连图形界面都无法启动了。所以试着安装NVIDIA官网提供的驱动。
  老黄那里,对NVS 135M这种上古时代G86核心的显卡提供的驱动是340.xx系列,此时最新版是340.108,比RPM Fusion里的107新一点。
在这里插入图片描述在这里插入图片描述按照If Not True Then False上面的教程一步步来,很简单,不过2.6.4移除Nouveau驱动那步我没有做,想着留作一个备份?
  然后重启切换到runlevel 3开始安装:

sudo ./NVIDIA-Linux-x86_64-340.108.run

  这里提醒一下要把驱动安装包放在一个没有中文路径的位置,不然重启后对着一堆方块目录名傻眼吧。
  其中有一步:

Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later?

  询问是否要使用DKMS注册内核模块,这样更新Linux内核后会自动生成新的模块,但是选Yes后会报错:

ERROR: Failed to run '/usr/sbin/dkms build -m nvidia -v 340.108 -k 5.4.7-200.fc31.x86_64:
Kernel preparation unnecessary for this kernel. Skipping…

Building module: cleaning build area… make -j2
KERNELRELEASE=5.4.8-200.fc31.x86_64 module
KERNEL_UNAME=5.4.8-200.fc31.x86_64; make -C uvm module
KERNEL_UNAME=5.4.8-200.fc31.x86_64
KBUILD_EXTMOD=/var/lib/dkms/nvidia/340.108/build/uvm…(bad
exit status: 2) Error! Bad return status for module build on kernel:
5.4.8-200.fc31.x86_64 (x86_64) Consult /var/lib/dkms/nvidia/340.108/build/make.log for more information.

  注册失败。当时图省事,重新运行安装程序时直接选了No,顺利安装成功,可以回到GUI正常使用了。
  但是Linux升级内核也是够勤的,半个月内升级了两次,每次升级完重启就进不了GUI了,又得折腾一通(我是干脆重装NVIDIA驱动,应该有直接的方法吧?),于是决心解决这个问题。

  首先手动运行dkms:

sudo dkms build -m nvidia -v 340.108 -k $(uname -r)

  报错后打开/var/lib/dkms/nvidia/340.108/build/make.log,文件结尾有这么几行错误信息:

/var/lib/dkms/nvidia/340.108/build/uvm/nvidia_uvm_lite.c: 在文件作用域:
/var/lib/dkms/nvidia/340.108/build/uvm/nvidia_uvm_lite.c:859:14: 错误:initialization of ‘vm_fault_t (*)(struct vm_fault )’ {或称 ‘unsigned int ()(struct vm_fault )’} from incompatible pointer type ‘int ()(struct vm_area_struct *, struct vm_fault )’ [-Werror=incompatible-pointer-types]
859 | .fault = _fault,
| ^~~~~~
/var/lib/dkms/nvidia/340.108/build/uvm/nvidia_uvm_lite.c:859:14: 附注:(在‘uvmlite_vma_ops.fault’的初始化附近)
/var/lib/dkms/nvidia/340.108/build/uvm/nvidia_uvm_lite.c:889:14: 错误:initialization of ‘vm_fault_t (
)(struct vm_fault )’ {或称 ‘unsigned int ()(struct vm_fault )’} from incompatible pointer type ‘int ()(struct vm_area_struct *, struct vm_fault *)’ [-Werror=incompatible-pointer-types]
889 | .fault = _sigbus_fault,
| ^~~~~~~~~~~~~
/var/lib/dkms/nvidia/340.108/build/uvm/nvidia_uvm_lite.c:889:14: 附注:(在‘counters_vma_ops.fault’的初始化附近)
cc1:有些警告被当作是错误
make[2]: *** [scripts/Makefile.build:266:/var/lib/dkms/nvidia/340.108/build/uvm/nvidia_uvm_lite.o] 错误 1
make[1]: *** [Makefile:1652:/var/lib/dkms/nvidia/340.108/build/uvm] 错误 2
make[1]: 离开目录“/usr/src/kernels/5.4.8-200.fc31.x86_64”
NVIDIA: left KBUILD.
nvidia-uvm.ko failed to build!
make: *** [Makefile:217:nvidia-uvm.ko] 错误 1
make: 离开目录“/var/lib/dkms/nvidia/340.108/build/uvm”

  不兼容指针类型。搜索了一下,这个问题可以通过关闭警告当作错误来解决,虽然没治本,但至少标能治好。

sudo gedit /lib/modules/$(uname -r)/build/Makefile

  查找“-Werror=incompatible-pointer-types”,改为“-Wno-error=incompatible-pointer-types”。
在这里插入图片描述  感谢fedora21/beta 安装bcm43142无线网卡驱动和-Werror=incompatible-pointer-types
  重新运行dkms,这次的报错信息是:

DKMS make.log for nvidia-340.108 for kernel 5.4.8-200.fc31.x86_64
(x86_64) 2020年 01月 10日 星期五 19:32:07 CST NVIDIA: calling KBUILD…
make[1]: 进入目录“/usr/src/kernels/5.4.8-200.fc31.x86_64” Makefile:882:
*** 对函数“call”的未终止的调用:遗漏“)”。 停止。 make[1]: 离开目录“/usr/src/kernels/5.4.8-200.fc31.x86_64” NVIDIA: left KBUILD.
nvidia.ko failed to build! make: *** [Makefile:197:nvidia.ko] 错误 1
make: 进入目录“/var/lib/dkms/nvidia/340.108/build/uvm” cd ./…; make
module SYSSRC=/lib/modules/5.4.8-200.fc31.x86_64/source
SYSOUT=/lib/modules/5.4.8-200.fc31.x86_64/build KBUILD_EXTMOD=./…
make[1]: 进入目录“/var/lib/dkms/nvidia/340.108/build” NVIDIA: calling
KBUILD… make[2]: 进入目录“/usr/src/kernels/5.4.8-200.fc31.x86_64”
Makefile:882: *** 对函数“call”的未终止的调用:遗漏“)”。 停止。 make[2]:
离开目录“/usr/src/kernels/5.4.8-200.fc31.x86_64” NVIDIA: left KBUILD.
nvidia.ko failed to build! make[1]: *** [Makefile:197:nvidia.ko] 错误 1
make[1]: 离开目录“/var/lib/dkms/nvidia/340.108/build” make: ***
[Makefile:221:…/Module.symvers] 错误 2 make:
离开目录“/var/lib/dkms/nvidia/340.108/build/uvm”

  这个就有点滑稽了。

sudo gedit /usr/src/kernels/$(uname -r)/Makefile

  定位到882行下面,补全缺失的反括号。
缺的就是那个“)”  不知怎么会出现这个BUG,不过解决了就行。
  接下来运行dkms就OK了,返回success。
  输入

dkms status

  也可以看到

nvidia, 340.108, 5.4.8-200.fc31.x86_64, x86_64: installed

  重新安装一遍NVIDIA驱动,这次在DKMS那里选Yes也能正常完成,大功告成,以后升级内核时应该不用再操心显卡驱动的问题了。


http://chatgpt.dhexx.cn/article/j8P7bmkq.shtml

相关文章

DKMS:Dynamic Kernel Module Support

DKMS简介 DKMS全称是Dynamic Kernel Module Support,它可以帮我们维护内核外的驱动程序,在内核版本变动之后可以自动重新生成新的模块。 1.背景 对于没有内核编程经验的使用者来说,使用者可能经常困惑:为什么更新操作系统之后,原来用的好好的…

DKMS(大开门是什么意思)

ZS,DZ,DKMS玩了很久了,RAIDJJC也玩了不少了,现 盗贼刚刚又被加强了.其实无论什么职业竞争,都是靠人脉和职业本身无关,刚开TBC的时候DZ下副本没人要.我们亲友团的DZ跟我们一路走来,一个副本也没拉下.所以固定亲友团才是王道.选择自己喜欢的职业,别光顾着好拿装备. 商…

DKMS是什么?

我们都知道,如果要使用没有集成到内核之中的Linux驱动程序需要手动编译。当然,这并不是一件什么难事,即使是对于没有编程经验的Linux使用者,只要稍微有点hacker的意识,努力看看代码包里的Readme或者INSTALL文件&#x…

深度linux安装dkms,安装Virtualbox 错误提示安装DKMS解决方法

玩蛇网推荐图文教程:python 列表 安装Virtualbox 错误提示安装DKMS解决方法。在open 12.3安装Virtualbox出错了,最开始提示什么安装DKMS,然后下载安装后出现如图的错误。Failed, trying without DKMS让人头疼。 下面把错误提示图和提示贴出来了 sincerefly@linux-eq1f:~/Dow…

DKMS简介

我们都知道,如果要使用没有集成到内核之中的Linux驱动程序需要手动编译。当然,这并不是一件什么难事,即使是对于没有编程经验的Linux使用者,只要稍微有点hacker的意识,努力看看代码包里的Readme或者INSTALL文件&#x…

如何解决接口幂等性问题?

什么是幂等性? 参考地址:解决幂等问题 概念: 一个接口,不管我调多少次,只要参数不变,结果也应该不变。 但是在实际工作中,幂等性一般分为两种: 请求幂等:每次请求&…

接口幂等性的理解

一. 什么是接口幂等性 幂等性原本是数学上的概念,用在接口上就可以理解为:同一个接口,多次发出同一个请求,必须保证操作只执行一次。它是系统服务对外的一种承诺(注意不是一种实现),接口服务提…

什么是接口幂等性?为什么会产生接口幂等性问题?如何保证接口幂等性?

博主负责的项目报了一个问题,用户操作回退失效。我们的设计里,操作回退是回到操作前的状态。经过查看日志发现,用户之前的操作做了两次,也就是说提交操作的接口被调用了两次,导致之用户上一次的状态和这一次的状态是一…

接口幂等性校验

接口幂等性校验 一、概念 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指…

接口幂等性这么重要,它是什么?怎么实现?

什么是幂等性? 对于同一笔业务操作,不管调用多少次,得到的结果都是一样的。 幂等性设计 我们以对接支付宝充值为例,来分析支付回调接口如何设计? 如果我们系统中对接过支付宝充值功能的,我们需要给支付宝…

接口的幂等性怎么设计?

自己最近负责的几个接口,都涉及到了幂等性的操作,抽空总结了一下,这也是面试官比较爱问的问题。 一、什么是幂等? 看一下维基百科怎么说的: 幂等性:多次调用方法或者接口不会改变业务状态,可以…

java中接口幂等性解决方案总结

一、概念 一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变…

高并发下接口幂等性解决方案

一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果;2. 我们发起一笔付款请求,应该只扣用户…

接口幂等性测试

前言 所谓幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。 我们在开发中主要操作也就是CURD,其中读取操作和删除操作是天然幂等的,我们所关心的就是创建操作、更新操作。 创建操作一定是非幂等的因为要涉及到…

接口幂等性是什么?如何设计?

接口幂等 什么是接口幂等?为什么接口需要幂等性设计前端重复提交表单黑客恶意攻击接口超时重复提交消息重复消费 哪些接口需要幂等?如何实现幂等前端拦截数据库唯一索引实现数据库乐观锁实现数据库悲观锁实现JVM锁实现分布式锁实现Token实现 总结 接口幂…

开发中是如何保证接口幂等性的?

文章目录 一、定义二、业务场景三、保证幂等性常用方法方案1: insert前先select(基于mysql的分布式锁)方案2:加悲观锁 select * from table where id 1 for update(基于mysql的分布式锁)方案3:加乐观锁 增…

如何保证接口的幂等性?常见的实现方案有哪些?

什么是幂等性 幂等用于表示任意多次请求均与一次请求执行的结果相同,也就是说对于一个接口而言,无论调用了多少次,最终得到的结果都是一样的。 如何保证接口的幂等性 1、前端拦截 2、使用数据库实现幂等性 3、使用 JVM 锁实现幂等性 4、…

接口幂等性常见的解决方案

一、什么是接口幂等性? 接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的…

接口幂等性解决方案

一、分布式锁解决方案 先说这种方案,在网上有一些文章说可以通过分布式锁来保证幂等性。但是我认为这种方案不能保证幂等性,不可取。看下面分析 ①、方案流程介绍 用户通过浏览器发起请求,服务端接收请求数据,并且从请求数据中…

什么是接口的幂等性,如何实现接口幂等性?一文搞定

微信搜索《Java鱼仔》,每天一个知识点不错过 每天一个知识点 什么是接口的幂等性,如何实现接口幂等性? (一)幂等性概念 幂等性原本是数学上的概念,用在接口上就可以理解为:同一个接口&#x…