
出品|开源中国
译|罗奇奇
RedHat 桌面、图形、信息 娱乐 和 i18n 总监 Christian FK Schaller 在博客中分享了他对 NVIDIA 开源 Linux GPU 内核模块的一些看法,并分析了 NVidia 的开源驱动对 Linux 社区的重要性。
首先需要明确的是:NVIDIA 开源了 out of tree 源代码内核驱动程序。这些驱动程序已经过测试,它在作为数据中心的 GPU 上支持 CUDA 用例,但尚未支持图形显示。尽管也有支持图形显示的代码,但这些代码还没有写完或完全测试。
此外,开源的只是内核部分,然而现代图形驱动的很大一部分是在固件和用户空间组件中,而这些仍然是闭源的。因此,对于普通的 Linux 桌面用户来说,目前 NVIDIA 的开源驱动程序并不能带来一些显而易见的好处。
但无论如何,现在有了一个 NVidia 内核驱动,它能够使用 linux 内核中仅支持 gpl 的 API ,这就为后面的以切打下了基础。
开源驱动能取代二进制驱动程序吗?
目前还不能,该开源驱动程序只支持 NVidia 图灵芯片及更新版本的图形处理器,这意味着它对 2018 年之前的图形处理器都不起作用。另外,在 开源内核模块经过全面测试和扩展,以用于图形显示用例之前,即使你使用的是图灵或更新版本的 GPU,仍需要在系统中使用二进制驱动。
此外,正如上面所说的,现代图形驱动的很大一部分是在固件和用户空间组件中,因此,即使开源内核驱动程序有图形显示能力,二进制驱动程序仍将继续存在。
Nouveau 是一个旨在为 NVIDIA GPU 建立高质量的、自由的开源驱动项目,它最初是作为逆向工程驱动程序开发的,但近年来实得到了 NVIDIA 的积极支持。Nouveau 功能齐全,但由于无法重新计算 NVidia 显卡的时钟等功能而受到严重阻碍,这意味着它不能像二进制驱动那样提供完整的性能,此次 NVIDIA 开源的 GPU 内核模块对 Nouveau 社区和项目都大有帮助。
需要注意的是: Linux 内核不允许同一个硬件有多个驱动程序,所以要想让新的 NVidia 内核驱动程序在当前的 Linux 版本中运行,就必须退出现在的 Nouveau,或者至少被限制在一套不同的硬件上。就像二进制驱动一样,Nouveau 的很大一部分不在内核中,而是在 Mesa 和 NVidia 目前提供的 Nouveau 特定固件中发现的用户空间部分。
目前 NVIDIA 和 RadHat 等发行版讨论的计划是让 NVidia 的二进制驱动和 Mesa 共享一个内核驱动,这可能是一个全新的驱动程序,旨在同时满足 NVidia 用户空间和 Mesa 用户空间的需求。但这可能需要几年的时间来实现。这对开源社区和 NVidia 都有明显的优势。对于开源社区来说,这意味着现在将拥有一个内核驱动程序和固件,它允许更改 GPU 的时钟,以提供人们期望从 NVidia 显卡获得的显示性能,这意味着 Linux 将拥有一个可以在第一时间访问新一代 NVidia 硬件的固件和内核更新的驱动程序。
就近期而言,它不会产生重大影响。但随着时间的推移,它提供了一种从根本上简化对 NVidia 硬件支持的途径。从长远来看,用户有机会能在 NVidia 硬件上获得与 Linux 为 Intel 和 AMD 的硬件提供的的体验,即一些开箱即用的功能
开源还意味着 Linux 发行版可以第一时间支持新的 NVIDIA 芯片,一个高性能的 NVidia 开源 Mesa 驱动程序将允许 Linux 发行版签署 NVidia 驱动程序和内核的其他部分,以实现安全重启等功能。
由于第一个开源驱动版本 R515 是针对计算 GPU 的,所以可以预期这些选项也将首先为计算用户提供,然后再为显卡用户提供。
NVidia 需要继续努力完成这个新的驱动程序功能,无论是计算还是图形显示用例。而 Linux 社区和 NVIDIA 需要共同为未来的统一内核驱动程序制定一个计划,并围绕它制定一个适用于它的模型。无论是 Linux 社区还是 NVidia,都需要添加 Mesa Vulkan 驱动程序之类的东西,类似于为 AMD 提供 RADV 的方式。
我对驱动程序的了解水平有限,如有一些理解错误,欢迎大家指正批评。
原文:>
如何驱动业务流程学习
了解linux驱动程序技巧学习的要领很主要,学习linux *** 作系统时,你可能会遇到关于驱动方面的疑问,这里将介绍学习linux驱动程序的要领,在这里拿出来和大家分享一下。
1学会写基本的makefile
2编一使用程序,可以用makefile跑起来
3学会写linux驱动程序的makefile
4写一基本char驱动,makefile编译通过,可以insmod,lsmod,rmmod在驱动程序的init函数里打印helloworld,insmod后应该能够通过dmesg看到输出。
5写一完整驱a动,加上read,write,ioctl,polling等各种函数的驱动实现。在ioctl里完成从用户空间向内核空间传递结构体的实现。
6写一block驱动程序加上read,write,ioctl,poll等各种函数实现。
7基本学习下内存管理,这个是最难的,明白各种memoryalloc的函数实现细节。这是linux开发的基本功。
8学习锁机制的使用,这个不是最难的但是最容易犯错的,涉及到很多同步和并发的疑问。
9看内核中实际使用的linux驱动程序代码。你会发觉最基本的你已经知道了,大的框架都是一样的,无非是read,write,ioctl等函数的实现,但里面包含了很多很多细小的实现细节是之前不知道的。这时候就要考虑到很多别的疑问而不仅仅是基本功能的实现。
推选您看2620中integrated的一个驱动kvm,记得是在driver/lguest下,很好玩的,就是linux下的虚拟机驱动程序,代码不长,但功能强大。有能力的可以自己写一 *** 作系统按照要求做成硬盘镜像加载到虚拟机中,然后客户机可以有自己的4G虚拟地址空间。
10看完linux驱动程序代码欢迎您进入Linuxkernel学习中来。
最基本的要领,跟着ldd(linuxdevivedriver)做一遍。
以上就是关于为何 NVidia 的开源驱动程序对 Linux 如此重要全部的内容,包括:为何 NVidia 的开源驱动程序对 Linux 如此重要、linux设备驱动程序开发应该怎么入手、如何驱动业务流程学习等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)