[Community News] deepin 20.7.1——谈谈我们的N卡驱动开发心得!
Tofloor
poster avatar
white777
deepin
OM
2022-10-14 21:37
Author

deepin 20.7.1 即将到来之际,各位小伙伴在参与内测的过程中,有没有发现安装N卡驱动时不同寻常的变化呢?

n卡驱动开发心得.jpg

20.7.1版本可以根据当前你机器的上NVIDIA显卡,自动匹配合适的闭源驱动版本进行安装。在其他Linux发行版安装N卡驱动时,可能会出现这样的问题:由于N卡闭源驱动版本无法完全向下兼容,一旦装错版本,容易出现黑屏死机的问题。而这一次,我们则通过直接从终端安装的方式,将这些可能出现的问题“一网打尽”。

下面,就来和大家一起唠一唠我们开发过程中的“脑回路”吧!

众所周知,Linux系统上有两套NVIDIA显卡驱动, 一是开源社区开发的nouveau ,它的特点是代码全部开源,但稳定性较差,总容易冒出各种问题。比如,部分机型在待机机后唤醒不了、开机过程中出现花屏现象等等。

另外一个则是NVIDIA厂商提供的驱动。相比较而言,这位的稳定性就要好上很多,但因为它的代码是闭源的,没有合入到内核,需要手动安装、配置。这个安装、配置过程(尤其是双卡笔记本的配置)对很多开发人员来说都难以忍受,众多还处在小白阶段的朋友们想要上手,岂不是还没开始,就已结束?

此外还有一个问题—— NVIDIA厂商提供的闭源驱动不能向下兼容 。怎么理解?简单来说,就是高版本的驱动不能完全支持覆盖旧的显卡,比如470.86这个版本可以支持GT 730显卡,当驱动版本升级到510.xx后,再去带GT 730显卡机器上安装,闭源驱动就会安装失败,系统重启后直接黑屏。

所以,在分析了以上NVIDIA闭源驱动的问题后,我们着力去做了以下几个操作。

多版本共存

首先,为了让系统仓库中所带的驱动版本能支持足够多的NVIDIA显卡型号,我们重构了上游驱动包,重构后的包名=旧包名+大版本号,让系统仓库能够同时存在多个驱动版本。举个例子,比如之前驱动包名叫【nvidia-driver】,重构后它的新名字是【nvidia-driver-470】。

目前,我们仓库总共存在340、390、470、510四个版本的驱动包,大概可以覆盖近15年内发布的显卡。

驱动包预装

再者,为了让各位安装完系统后,即可使用上闭源驱动,无需再手动安装、徒增烦恼,我们增加了NVIDIA驱动预装功能。

其实按照常规思路,要解决这个问题,只需把驱动包预装到镜像就可以了。但可惜的是,这一思路对NVIDIA显卡驱动来说并不适用。原因是NVIDIA驱动不能向前兼容,没有哪一个驱动版本可以全部覆盖支持所有的NVIDIA显卡。

为了解决这一问题,就有了我们在安装器阶段增加的功能——根据当前机器上的NVIDIA显卡,自动选择匹配一款驱动进行安装。

双卡(I+N)笔记本配置

不知道deepiner们是否还有印象?之前,我们的应用商店中有一款名叫 “显卡驱动管理器” 的应用,负责安装显卡驱动以及双卡笔记本配置。

640.png

对于I+N卡这一类的双卡笔记本,这款app上提供了 “使用intel集成显卡”、“使用大黄蜂方案”、“使用NV-Prime方案” 。第1种方案是关闭NVIDIA独显,只使用集显;第2、3种方案则是I卡和N卡混合使用。

话说回来,它的上架在当时可堪称“出道即巅峰”,短时间内就获得了颇为可观的点击和下载量,也侧面说明了大家对双卡(I+N)笔记本配置需求还是相当迫切的!不过收获高关注度的同时,各式各样的吐槽也像雪花般砸来:安装切换驱动方案时间过长、大黄蜂方案配置不成功、安装切换驱动显示失败······

这使得我们认为首先要针对这几个问题,做一个简单的解释:

  • 安装切换驱动方案时间过长!怎么破?

大家提到的“安装切换驱动方案时间过长”,主要是因为显卡驱动管理器为了保证正确安装(即安装成功后重启不会黑屏), 利用overlayroot技术设计了回退机制 ,因此总共需要三轮重启。

第一轮,overlayroot会在根文件系统上增加一次保护层,每次切换驱动时,首先在这个保护层上进行一遍,然后重启。第二轮,当系统起来后会跑一个3D测试程序(小茶壶),当3D测试程序运行成功,需要用户确认显示画质没有问题,点击确定,系统会再次重启。第三轮,退出overlayroot,在没有保护层的系统上进行安装。

当然,我们在后续的方案中会去掉这一回退机制。 过去之所以加上它,其实是担心用户安装完驱动后出现最坏的情况——系统起不来,黑屏!但实际上,出现这一问题的根本原因是仓库只有一个驱动版本,一旦安装在不支持的显卡机器上时,大概率会发生可怕的黑屏事件。

但今时可不同往日, 仓库已经有了多个版本的匹配安装,我们只需保证匹配准确率就可以了 ,自然无需再留下这样繁琐的机制,也不会再出现“爷爷,您的切换驱动终于安装好了!”这样悲伤的情况了~

  • 大黄蜂方案配置不成功?

大黄蜂配置失败的原因,其实是因为上游从2012年后就没有继续更新这个软件包。在之前使用418版本的NVIDIA闭源驱动版时,这个方案仍能配置成功。但后来我们系统仓库的N卡闭源驱动升级到460版本后,它的诸多问题就开始涌现出来。

在这一块,我们没有做修复原因主要有两个。第一,当前已经有更好的替代方案,即NV-Prime。第二,大黄蜂方案实际上并不太好。怎么定义这个“不太好”?这就体现在每次用户程序需要NVIDIA独显进行渲染显示时,都会在此用户程序前面加一个前缀(optirun)。

这是因为大黄蜂的前端程序会通过socket后台进程(bumblebeed)发送一个请求,这个时候,后台程序会另起一个Xorg用户程序,导致每次运行用户程序时,前面都会出现这个别扭的家伙,让人多少感觉到有些奇怪。

  • 关于双卡(I+N)笔记本配置一些改进计划

说了这么多关于显卡驱动管理器的情况,再说说我们接下来对双卡(I+N)笔记本配置的一些改进计划吧!

后续,我们打算只考虑三种配置方案—— 只使用I卡、只使用N卡、I卡和N卡混合使用(Prime offload) ,原本还有不少方案可供选择,但这些方案本身已经可以覆盖大部分的用户场景,所以我们将以这三种方案为主。另外,内核会提供配置接口,比如一个命令行工具,通过这个接口,用户就可以灵活自由地切换三种方案。

内核部分,目前我们将首先提供一个命名行工具,以完成上述安装、配置、切换任务,将最大程度地保证驱动安装和配置的准确性。而在交互界面上,前端部门可能会开发一个与之配套的交互界面,以保证大家在操作时的便捷性、易用性。前端和后端相互解耦,这样就能做到带给大家带来更好的使用体验,也方便我们去进行后续的维护。

到这里,我们的N卡驱动开发心得也就和大家唠的差不多了!

实际上,双显卡笔记本除了上述说的I+N卡这种组合机型,市面上还有很多A+N的机型,只不过关于这一块的配置目前我们还在摸索研究中。欢迎大家在20.7.1版本正式发布后积极试用,于文章下方留言,或在论坛分享你的见解,给我们更多宝贵的意见吧!

Reply Favorite View the author
All Replies
3 / 4
To page
135******99
deepin
2022-10-16 16:39
#41

也没有说现在应该怎么安装吧,论坛中的都试过,一般小白搞不好只能重新安装系统

Reply View the author
deepin
2022-10-16 20:51
#42

感觉系统更新到最新20.7,后面的小版本不知,还是调用的I卡,N卡不起作用啊。安装时选带闭源驱动。

电脑:dell precition 3571

显卡:12代i7 集显+Nvidia RTX A1000

Reply View the author
tangp
deepin
2022-10-16 20:58
#43

N卡不是都开源了吗?intel显卡现在支持吗?

Reply View the author
晚秋(lateautumn)
Moderator
2022-10-17 03:01
#44

kissing_heart

用心做事,一定会有所收获!

Reply View the author
mcfans2019
deepin
2022-10-17 07:01
#45
WangZhongyun

dpkg: 处理软件包 nvidia-tesla-470-kernel-dkms (--configure)时出错:
已安装 nvidia-tesla-470-kernel-dkms 软件包 post-installation 脚本 子进程返回错误状态 10
正在设置 plymouth-label (0.9.4.1-1+eagle) ...
dpkg: 依赖关系问题使得 nvidia-tesla-470-driver 的配置工作不能继续:
nvidia-tesla-470-driver 依赖于 nvidia-tesla-470-kernel-dkms (= 470.103.01-1) | nvidia-tesla-470-kernel-470.103.01;然而:
软件包 nvidia-tesla-470-kernel-dkms 尚未配置。
未安装软件包 nvidia-tesla-470-kernel-470.103.01。
软件包 nvidia-tesla-470-kernel-dkms 提供了 nvidia-tesla-470-kernel-470.103.01,但它尚未被配置。

dpkg: 处理软件包 nvidia-tesla-470-driver (--configure)时出错:
依赖关系问题 - 仍未被配置
正在设置 plymouth-themes (0.9.4.1-1+eagle) ...
update-initramfs: deferring update (trigger activated)
正在处理用于 initramfs-tools (0.137.35-1+dde) 的触发器 ...
update-initramfs: Generating /boot/initrd.img-5.18.17-amd64-desktop-hwe
live-boot: core filesystems devices utils udev blockdev dns.
在处理时有错误发生:
nvidia-tesla-470-kernel-dkms
nvidia-tesla-470-driver
E: Sub-process /usr/bin/dpkg returned an error code (1)

这样装其实也挺多问题的,建议先检查bois上的secure boot关了没有,可以用n卡驱动的官方安装方法折腾折腾(b站一堆教程),如果还不行,就在官方安装方法中使用dkms安装这一步选no试试,如果报错kernel unnessecery(内核版本太高,需要换低版本内核)我的340驱动就这样折腾好的

Reply View the author
王子建
deepin
2022-10-17 17:59
#46

每次安装完重启输入密码就黑屏,各种办法都试了,都不行,看这个.7.1能解决这个问题不

Reply View the author
3***6@qq.com
deepin
2022-10-17 18:45
#47

好吧,我决定用3A方案。

Reply View the author
deepin_xiaoqian
deepin testing team
2022-10-18 17:33
#48

like

Reply View the author
yorun
deepin
2022-10-19 16:31
#49

A+A美滋滋tail

Reply View the author
red13
deepin
2022-10-19 18:54
#50

昨天,,,在做过 timeshift 后,,,试着升级了一下,,,,嗯,,,变化发现了!!!

第一:20.7的时候,已经驱动上的 1650 ,,升级后掉驱动了

第二:使用系统自动安装驱动,,安装不上,安装不上,安装不上.....

啥也不说了,,直接回滚,,,,,,,,

Reply View the author
deepin_pc
deepin
2022-10-19 19:21
#51

心累装个显卡都那么费劲,对小白妥妥的劝退,希望以后能找到解决的办法。

Reply View the author
wowo
deepin
2022-10-20 00:04
#52
fslong

刚才试了,没问题的,电脑是 i5-8400 + GTX 1050Ti,安装非常简单,之后一切正常,步骤如下:

  1. 镜像里面的可能因为后续更新依赖问题不正常,镜像安装的时候不要集成闭源驱动,如果已经集成请卸载英伟达相关所有东西。
  2. sudo apt install nvidia-driver nvidia-settings安装显卡驱动和管理工具。
  3. 星火商店安装显卡切换工具,使用切换工具打开n卡即可。

不敢弄了,电脑直接凉了。花了好大力气才搞定。deepin要是能做一个软件就好了,可以直接检测到显卡并匹配到驱动。 现在好像只有重新安装的系统才有这个功能。

image.png

Reply View the author
tongge
deepin
2022-10-20 07:38
#53

我的I+N gt645m就是这样,更新20.7.1,自带的显卡管理器还是切换出错。后来命令行安装nvidia-driver,报了这个错误,按提示装了nvidia-tesla-470,但是没有nvidia-settings,手动安装,能运行,但命令nvidia-smi提示不兼容。感觉这还是有很长的路要走,加油。

我之前在论坛写的帖子,感觉是最适合我的方法了,但是bug就是nvidia-distanced.service无法运行,nvidia-smi不显示运行程序,还是不太兼容。有没有知道解决方法的老哥?

Reply View the author
Fredoong
deepin
2022-10-20 23:52
#54

去年我还在Deepin社区看到一款显卡需要安装304版本的N卡驱动,把304版本也加上吧!

Reply View the author
176******20
deepin
2022-10-21 03:42
#55
wowo

不敢弄了,电脑直接凉了。花了好大力气才搞定。deepin要是能做一个软件就好了,可以直接检测到显卡并匹配到驱动。 现在好像只有重新安装的系统才有这个功能。

image.png

这东西都是老黄的错,把驱动搞的那么难。

Reply View the author
176******20
deepin
2022-10-21 03:44
#56
tongge

我的I+N gt645m就是这样,更新20.7.1,自带的显卡管理器还是切换出错。后来命令行安装nvidia-driver,报了这个错误,按提示装了nvidia-tesla-470,但是没有nvidia-settings,手动安装,能运行,但命令nvidia-smi提示不兼容。感觉这还是有很长的路要走,加油。

我之前在论坛写的帖子,感觉是最适合我的方法了,但是bug就是nvidia-distanced.service无法运行,nvidia-smi不显示运行程序,还是不太兼容。有没有知道解决方法的老哥?

这个驱动不管用的吧,应该就是文种说的,老驱动OK,新驱动拉胯。

也没什么大用了,就用I卡驱动吧

Reply View the author
tongge
deepin
2022-10-21 05:04
#57
176******20

这个驱动不管用的吧,应该就是文种说的,老驱动OK,新驱动拉胯。

也没什么大用了,就用I卡驱动吧

唉,还是用我自己的方法安装390版本驱动吧

Reply View the author
收割者
deepin
2022-10-22 17:11
#58
WangZhongyun

我的早升上了内测的20.7.1,并且今天又更新了。但应用商店没有显卡驱动管理器。完全卸载原来的闭源驱动后后。不管用命令sudo apt install nvidia-tesla-470-driver还是sudo apt install nvidia-driver-470都不能驱动好我的显卡。
截图_20221015105828.png

截图_20221015105150.png

截图_20221015100604.png

我也在商店找了好久驱动管理器,显卡驱动管理器都没有。看了你的图,原来启动里面设备管理器里有驱动管理的功能。看来我的GT755M显卡驱动已经装好了。可是steam里面游戏还是玩不成。

Reply View the author
收割者
deepin
2022-10-22 17:15
#59

我以为自动装好了,不用费神找一些看不懂的命令来安装驱动呢。结果发现自动安装的驱动不可用。

image.png

Reply View the author
钱绍-阿里国际站
deepin
2022-10-24 00:51
#60

顶一个。

Reply View the author
3 / 4
To page