如果驱动程序是 Linux 内核自带的,为什么还要安装呢?

如果驱动程序是 Linux 内核自带的,为什么还要安装呢?

今天早上,我想向我的一个朋友展示,多亏了 lutris,在 Linux 上玩视频游戏变得多么容易。但是在安装 lutris 时,它要求我下载显卡驱动程序。现在我被告知,大多数 GPU 驱动程序已经嵌入 Linux 内核(我有一块 AMD GPU)... 那么,如果显卡驱动程序已经嵌入 Linux 内核,为什么它还要求我安装显卡驱动程序呢?

我的第二个问题是,为什么这些驱动程序的安装就像pacman -S在终端中运行命令一样简单?我的意思是,由于驱动程序级别很低,并且在操作系统启动时加载,我至少应该从制造商网站下载它们并手动安装。或者至少必须重新启动我的电脑。

答案1

现在我被告知大多数 GPU 驱动程序已经嵌入到 Linux 内核中(我有一个 AMD GPU)...那么如果它们已经嵌入到 Linux 内核中,为什么它要求我安装显卡驱动程序呢?

并非所有被称为“驱动程序”的东西实际上都是内核驱动程序。

其中一些只是基于内核提供的功能运行的用户空间库。例如,OpenGL 和 Vulkan 的全部内容都是作为库(libGL 等)实现的,在 Linux 上,这些库通常来自 Mesa 项目。内核驱动程序知道如何与您的 AMDGPU 对话,但 Mesa 知道什么也就是说,Mesa 提供的“驱动程序”会将 OpenGL 着色器编译为 GPU 特定的指令,然后通过内核驱动程序将其上传到 GPU。

因此,如果您安装的是 之类的东西vulkan-radeon,那么它就是驱动程序,只不过不是内核驱动程序。您可以说它是驱动程序的“上层”,而内核中的部分则是“下层”。

此外,虽然每个系统只有一种类型的内核驱动程序,但库(例如 Mesa 的库)会加载到每个单独的程序中,因此有 64 位和 32 位版本。您已经拥有 64 位 Mesa 软件包,但如果您想通过 Wine 运行 32 位游戏,那么您还需要安装相同库的“lib32”软件包。

在 Windows 上,所有这些部件都由 AMD 直接提供,因此它们都包含在同一个安装包中 - 如果您安装“AMD 驱动程序”,您将获得两个内核驱动程序OpenGL/DirectX 库(64 位和 32 位版本)。


此外,正如你所观察到的,大多数,但是并非全部,GPU 驱动程序随内核提供。NVIDIA 是最大的例外;他们不为内核提供任何 GPU 支持,而且他们的 GPU 也更难编写非官方驱动程序。(不同于旧 ATI 的“radeon”,它是非官方的,但仍然相当不错。)结果是内核具有相对基本的非官方 NVIDIA 卡驱动程序,但您无法从中获得太多性能 - 您必须安装他们的闭源驱动程序。

我的意思是,由于驱动程序的级别很低且在操作系统启动时加载,我至少需要从制造商网站下载它们并手动安装它们。

这些事情实际上彼此无关。低级组件可以像高级组件一样分发;最终,它们只是文件。事实上,在 Windows 上,您实际上可以通过 Windows 更新获得大多数驱动程序。只有那些不是您需要从制造商的网站下载 Windows Update。

(内核驱动程序动态加载;事实上大多数都是。USB 的内核驱动程序是在第一次连接 USB 时加载的,而不是在启动时加载。通常需要重新启动 Linux 才能用另一个内核 GPU 驱动程序替换一个内核 GPU 驱动程序,但在 Windows 上甚至不再需要这样做。

答案2

“嵌入 Linux 内核”的驱动程序通常是开源驱动程序。这些驱动程序通常不能提供最佳性能,因为它们不是直接来自制造商。因此,对于任何图形密集型活动(例如在您的情况下玩视频游戏),最好安装未预装的专有驱动程序。这可能是 Lutris 提示您安装这些驱动程序的原因。

对于第二个问题,您说驱动程序在启动时加载的说法部分正确。它们本质上是内核模块,在启动时动态加载到内核中。因此,虽然从官方存储库下载和安装它们很简单,但您需要重新启动计算机才能使用它们,因为开源驱动程序是当前实例中加载的驱动程序

相关内容