再谈ubuntu20.04安装nvidia显卡驱动2022年3月版
之前曾经发过一个关于dkms添加显卡模块到内核的文章,之间的一段时间倒是比较注意提前安装dkms,直接在安装驱动时候自动编译了.
一晃一年了,ubuntu系统内核,软件包,以及nvidia驱动包都有了更新.随之而来的问题也出现了.
主要的相关差别是内核版本从5.8.0-XX升级到了20.04.3的5.11.0-XX,然后到20.04.4的5.13.0-XX,gcc从9.3.0 升级到了 9.4.0,nvidia的驱动也从460多的版本升级到了510.54(我用的是产品分支驱动,如果是功能分支驱动的话,目前是490几的版本)
开始依然按老方式进行安装,安装系统,apt update&upgrade,安装一些工具,编译环境,vim,dkms,sshserver等等,屏蔽nouveau,切换multiuser模式,run文件安装nvidia驱动,
sudo ./NVIDIA-Linux-x86_64-510.54.run -z --no-opengl-files
一直到刚才好像还是挺正常的,然后,问题出现了.
之前在安装了dkms后,安装驱动过程中会提示发现dkms是否在以后升级内核时候自动编译驱动模块,习惯地选择是,结果,出现了dkms编译失败的提示,尝试了其他的组合比如不做upgrade等等,(其实后来发现和这些根本没关系,提示里面写得最燃不是很清楚,但是明明人家让去看make.log嘛,傻傻地重做了好多次,都在整理忽略了).
咋办?没法用dkms自动编译,那就暂时不编译了吧.
好,暂时忽略dkms,暂时忽略后面的cc版本不符的提示,总算是磕磕绊绊装好了,nvidia-smi测试也是正常的.
不过这样的方式是有隐患的:一旦内核升级,那么显卡驱动就跟不上了.之前在1804上出现的gui界面循环登录的情况历历在目.不过经过搭建实验环境测试,2004暂时没有发现循环登录问题,即使新的内核中没有包含nvidia驱动,也是可以登录进入gui界面的,尽管nouveau也是屏蔽的状态,nvidia驱动也没加载成功(运行nvidia-smi会提示和驱动无法通讯).(其实这中间又发现一个问题,还需要再多试试看.)为了防止循环登录(虽然2004没事了,但是驱动跟不上内核总是不行的,)只好锁定内核,apt-mark hold linux-image-xxx-generic 还有module,module-extra,headers等等都锁了.然后还要在图形界面中software&update中关掉更新,否则新内核依然会滚滚而来.(!!这里要额外备注一下,为啥在2004版本里面apt-mark锁不住内核了呢,dpkg 查询的也确实是锁住了啊?这个需要再试试!!)
这又咋办?
老办法试试,手工dkms添加模块(这正好是前一篇文章的内容).
add是成功的,但是build依旧报错,显示是make错误cc版本不符,好吧,能不能加个环境变量跳过这个?好,export IGNORE_CC_MISMATCH=1,echo $IGNORE_CC_MISMATCH显示为1,行了不?再试,报错一毛一样.依然是make.........IGNORE_CC_MISMATCH=,为啥IGNORE_CC_MISMATCH还是,不是改了么?
加在bashrc里?加在profile里?呃,好像都不行.好吧,让我暂时放弃一会儿.
(总觉得这个应该可以,或者研究一下dkms build 时候 调用的 mak 命令行,再修改一下,兴许可以)
投机不成,就只能用最笨的方式了,我重装.不是重装系统,是重装nvidia驱动
在新内核里面再次安装驱动
sudo bash ./NVidia-xxxxxx-510.54.run -z --no-opengl-files
嗯,还是提示dkms错误,忽略,提示cc版本不符,忽略,嗯,又一次成功了.nvidia-smi测试good.
重启切换老内核,好吧,老的内核又没法和驱动通讯了.
这样来回装驱动也不是个事儿啊,必须有稳妥的办法!
在操作以上无用功的同时,求助互联网是必须的.(baixx网基本上找不到什么新玩意,goo上不去,此时用bing最棒了)
经过网络上的一番翻找,试了很多很多次(我在此承认我是笨鸟).问题逐渐露出了端倪.
在安装过程中的cc版本不符的提示才是关键所在.
使用cat/proc/version可以查看内核的版本以及编译内核的cc版本
例如这个:
Linux version 5.13.0-35-generic (buildd@ubuntu) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) 40~20.04.1-Ubuntu SMP Mon Mar 7 09:18:32 UTC 2022
再看cc版本
gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0
非就差这点儿,就不行吗?
好吧,确实不行.
解决方式可以选择gcc-9.4.0降级为9.3.0(我尝试了,但是失败了,以后可以再试试)
还有就是在安装nvidia驱动的时候,多写个参数避开cc版本提示
所以,正确的地安装nvidia.run驱动的方式是:
sudo ./NVIDIA-Linux-x86_64-510.54.run -z --no-opengl-files --no-cc-version-check
多加上那个参数管大用了.
安装过程一如平常,选择dkms编译,只是没有cc版本警告.嗯,smi测试正常.
再换新内核,呃呃,nvidia-smi说显卡驱动暂时无法接通.
我,,,,,,,后面的要忍住,不能说.
再整理一下思路,我赶脚的dkms的原理是,在更新内核的时候会自动把驱动模块编译到内核中,对啊,这个新内核是在dkms之前安装了,没有触发dkms的更新机制.好吧,不用重装系统,只是需要简单的一下下:
sudo apt reinstall linux-image-5.13.0-35-generic
嗯,过程中看到dkms终于触发了
/etc/kernel/postinst.d/dkms:
* dkms: running auto installation service for kernel 5.13.0-35-generic
后面提示就不贴了.
这难道...真的....真的欧科了么?(此时此刻激动难掩)
切老内核,smi说ok,切新内核,smi说ok,
好啦,总算是圆满了,不用提着心吊着胆了.
==================================
经验都是从教训中得来的,没有摔过跤是不可能学会走路的.但总摔在同一个坑里是不行的.
计算机是一门严谨的科学,对或是错都是有其最根本的缘由.
根本问题是我对错误提示和日志等不够重视,
修复一个系统的能力提升要远远大于重装一个系统.
总之,能力不足是根本.
继续努力学习吧,老儿童.
=========
最后的最后,贴一个国外的关于安装nvidia显卡驱动的帖子,我觉得写的不错.
https://www.linuxcapable.com/install-nvidia-510-47-xx-drivers-on-ubuntu-20-04-lts/
我告诉你msdn版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!