Linux DRM(一)Display Server

一、Display Server

X Windows 和 X Server

The X Window System (X11, or shortened to simply X) is a windowing system for bitmap displays, common on UNIX-like computer operating systems.
X provides the basic framework for a GUI environment: drawing and moving windows on the display device and interacting with a mouse and keyboard. X does not mandate the user interface – this is handled by individual programs. As such, the visual styling of X-based environments varies greatly; different programs may present radically different interfaces

X Windows 是用于位图显示的窗口系统,常用于 UNIX 系的操作系统上。它为 GUI 环境提供了基本框架:在显示设备上绘制和移动窗口,并与鼠标和键盘进行交互。
它在设计之初,便秉承“提供机制,而非策略”的理念。(是的,和 Unix 设计哲学相同)所以它对用户接口不作要求,比如它提供了生成窗口(window)的方法,却对窗口呈现方式不作任何要求。
另一个设计特点是它是基于 Client/Server 网络模型。不论本地还是远程应用程序,都统一通过 C/S 模型来运作。

我们看一下 X Windows 的架构图(图来自 imtx.me 作者 TualatriX):

拿一个简单的应用场景举例。点击按钮引发按钮更新动作。
1. 内核捕获鼠标点击事件并发送给 X server。
2. X Server 会计算该把这一事件发送给哪个窗口(事实上,窗口位置是由 Compositor 控制的,X Server 并不能够正确的计算 Compositor 做过特效变化之后的按钮的正确位置)。
3. 应用程序对此事件进行处理(将引发按钮更新动作)。但是,在此之前它得向X Server 发送绘制请求。
4. X Server 接收到这条绘制请求,然后把它发给视频驱动来渲染。X 还计算了更新区域,并且这条“垃圾信息”发送给了 Compositor。
5. 这时,Compositor 知道它必须要重新合成屏幕上的一块区域。当然,这还是要向X Server发送绘制请求的。
6. 开始绘制。但是 X Server 还会去做一些不必要的本职工作(窗口重叠计算、窗口剪裁计算等)。

我们通过一个实例理解了上面的架构图。
它呈现出了一个缺点:
X Client – X Server – Compositor
三者的交互比较耗时,不是很高效。除了交互方面的问题,其实 X Server 还会做一些重复无意义的工作,这里不再赘述。
有痛点就有解决方案,新一代的 Display Server 呼之欲出。
接下来 Wayland 诞生了。

Wayland

Wayland is A Simple Display Server。
它在诞生之初的使命是用于改善 X Server 的不足并取代它。
但是现在看来它所作的不仅仅是替代 X Window 下的 X Server,也不仅仅是要取代 X Widnow。而是要颠覆 Linux 桌面上的 X Server/X Client 的概念。
Compositor/Client 的结构取而代之。
同时它复用了所有 Linux 内核图形和 I/O 技术:KMS、GEM、DRM、evdev。

其架构图如下(图来自 imtx.me 作者 TualatriX):

同样是上面那个实例,其流程如下:
1. 内核捕获鼠标点击事件并发送给Wayland Compositor。
2. 由于是直接发给Wayland Compositor的,所以Wayland Compositor会正确地计算出按钮的位置。同时它会把这一事件发送给按钮所在的应用程序来处理。
3. 应用程序直接渲染,无需向Wayland Compositor请求。只需在绘制完成之后向Wayland Compositor发送一条信息表明这块区域被更新了。
4. Wayland Compositor收到这条信息后,立即重新合成整个桌面。

所以基于 Wayland 的整个任务流程非常简单:
1. 基于Wayland协议,处理evdev的信息;
2. 通知Client(即应用程序)对相关事件做出反应(至于应用程序想怎么反应,Compositor不需要过问);
3. 收到Client的状态更新,重新合成图形或管理新的图形布局。

简单的说,Waylannd 就是一个去除 X Window 中不必要的设计、充分利用现代 Linux 内核图形技术(DRM 子系统中的 KMS、GEM、DRM)的一个显示机制,它的出现是自然而然的,它的使命不是为了消灭X Window,而是将Linux的图形技术发挥至更高的一个境界。传统的X Window(即经典X应用、Gtk 1.x/2.x等旧应用),也会在相当长一段时间内得到继续支持,通过Wayland Client的形式跑在Wayland Compositor上,直到最终升级、取代或被淘汰。

有了以上背景,接下来我们便能更好的理解 DRM Subsystem 了。

二、DRM Subsystem

In computing, the Direct Rendering Manager (DRM), a subsystem of the Linux kernel, interfaces with the GPUs of modern video cards. DRM exposes an API that user-space programs can use to send commands and data to the GPU, and to perform operations such as configuring the mode setting of the display. DRM was first developed as the kernel space component of the X Server’s Direct Rendering Infrastructure,[1] but since then it has been used by other graphic stack alternatives such as Wayland.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding as well as GPGPU computing.
摘自 wipipedia

DRM,英文全称 Direct Rendering Manager, 即 直接渲染管理器。
它是为了解决多个程序对 Video Card 资源的协同使用问题而产生的。它向用户空间提供了一组 API,用以访问操纵 GPU。

fbdev

Linux 早在很久以前就已经有一个名为 fbdev 的 API ,用于管理显卡的 framebuffer,但是它不能用于处理 基于视频卡的 GPU 的 3D 加速的需求。
这些 Video Card 常常需要设置或者管理 卡内存(Video RAM)中的一些命令队列。将命令分配给 GPU,还需要管理 Video RAM 本身的 Buffer 和 Free Space。

在最初的用户空间的程序(比如 X Server)可以直接管理这些资源,但这些程序通常表现的就仿佛他们是唯一去获取这些资源的一样。当有多个程序试图去以自己的方式同时控制 Video Card 资源时,就会崩溃。

DRM

DRM 的诞生就是用来处理多个程序对 Video Card 资源的协同使用问题
DRM 获得对 Video Card 的独占访问权限,它负责初始化和维护命令队列、Video RAM 以及其他相关的硬件资源。

要使用 GPU 的程序将请求发送给 DRM,由 DRM 作为仲裁来避免冲突。
DRM 到现在已经涵盖了以前由用户空间程序处理的很多功能,比如 帧缓存区的管理和模式设置,内存共享对象和内存同步。其中一些拓展具有特定的名称,比如图形执行管理器 GEM 或者内核模式设置 KMS,这些都是属于 DRM 子系统。
DRM 同时也负责处理 GPUs 切换的问题。

在下一章,我们会开始介绍 Linux 源码中 DRM 的软件架构。

参考文章:
https://en.wikipedia.org/wiki/X_Window_System
http://zqdevres.qiniucdn.com/data/20101106130912/index.html
https://imtx.me/archives/1573.html
https://imtx.me/archives/1574.html
https://en.wikipedia.org/wiki/Direct_Rendering_Manager

欢迎关注微信公众号

黑羊爱学习
blacksheepgogogo

定期分享 嵌入式 Android/Linux 学习资料。
不定期分享 个人职场心得 / 鸡汤 / 游记 / 书籍读后感。

扫描以下的二维码:

<think>好的,用户想了解如何在Linux Mint中查看当前使用的显卡驱动。首先,我得回想下自己知道的命令和方法。可能的方法有几个,比如使用命令行工具或者图形界面工具。 先考虑命令行方式,最常用的应该是lspci,可以列出PCI设备的信息,然后结合grep来过滤出显卡相关的行。不过这样可能只能看到显卡型号,不定显示驱动信息。可能需要更详细的命令,比如lshw或者modinfo。 然后想到的可能是使用inxi工具,这个工具能提供详细的系统信息,可能包括显卡和驱动。如果用户没有安装的话,可能需要先安装,但Linux Mint般预装了。可以建议用户运行inxi -G来查看图形部分的信息,包括驱动。 另个命令是glxinfo,属于mesa-utils包,可以查询OpenGL的信息,里面会提到使用的驱动。不过用户可能需要先安装这个工具,然后运行glxinfo | grep "OpenGL renderer"来获取驱动信息。 另外,modinfo命令可以用来查看内核模块的信息,比如对于NVIDIA显卡,可能需要检查nvidia模块的信息。不过需要知道具体的模块名称,比如nouveau或nvidia。用户可能需要先确定显卡型号,再使用modinfo来查看。 还有,lshw -c video可以列出视频设备的详细信息,包括驱动字段,可能会显示使用的驱动名称。这个命令可能需要sudo权限。 除了命令行,图形界面方法可能更适合不熟悉终端的用户。Linux Mint的系统设置里应该有驱动管理工具,比如“驱动管理器”或“硬件驱动”,里面会显示推荐的驱动和当前使用的驱动。用户可能需要在菜单里搜索“驱动程序”或者类似的关键词来找到这个工具。 另外,使用系统信息工具,比如在菜单里找到“系统信息”或运行gnome-system-monitor之类的,可能会有硬件部分的详细信息,包括显卡驱动。 需要确认这些方法是否适用于所有版本的Linux Mint,比如Cinnamon、MATE或XFCE桌面环境,可能界面有所不同,但核心命令应该是样的。还要注意不同显卡品牌,比如NVIDIA、AMD或Intel,驱动名称可能不同,但查看方法应该类似。 可能用户会遇到权限问题,比如某些命令需要sudo,这时候需要提示用户谨慎使用,或者在图形界面中使用管理员权限打开驱动管理器。另外,如果用户使用的是专有驱动还是开源驱动,驱动管理器里会显示不同的选项,当前活动的驱动会有标记。 总结步骤应该是分命令行和图形界面两种方式,分别给出具体命令和操作路径。需要确保命令的正确性和易用性,避免用户执行复杂的步骤。同时,提醒用户如果遇到问题,可能需要安装某些工具,比如mesa-utils或inxi,但默认可能已经安装了。</think>在Linux Mint中查看当前使用的显卡驱动可以通过以下几种方法: --- ### 、命令行方式(推荐) #### 1. 使用 `inxi` 工具 ```bash inxi -G ``` 输出示例: ``` Graphics: Device-1: NVIDIA GP106 [GeForce GTX 1060 6GB] driver: nvidia v: 535.154.05 Display: x11 server: X.Org v: 21.1.11 driver: X: loaded: nvidia unloaded: modesetting resolution: 1920x1080~60Hz ``` **关键字段**:`driver: nvidia v: 535.154.05` 表示当前驱动为NVIDIA专有驱动,版本535.154.05。 --- #### 2. 通过 `lspci` 和驱动信息 ```bash lspci -k | grep -A 3 -i "VGA\|3D\|Display" ``` 输出示例: ``` 01:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1) Subsystem: Micro-Star International Co., Ltd. [MSI] Device 8c92 Kernel driver in use: nvidia Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia ``` **关键字段**:`Kernel driver in use: nvidia` 表示当前使用的驱动。 --- #### 3. 查看OpenGL驱动信息 ```bash glxinfo | grep "OpenGL renderer" ``` 输出示例: ``` OpenGL renderer string: NVIDIA GeForce GTX 1060 6GB/PCIe/SSE2 ``` 此命令需先安装 `mesa-utils`: ```bash sudo apt install mesa-utils ``` --- ### 二、图形界面方式 #### 1. 使用驱动管理器 1. 打开菜单 → 搜索并启动 **Driver Manager**(驱动管理器)。 2. 界面会显示当前使用的驱动(标记为 **Using**)和可选驱动列表。 ![驱动管理器示例](https://www.linuxmint.com/img/screenshots/driver-manager.png) --- #### 2. 系统信息工具 1. 打开菜单 → 搜索并启动 **System Info**(系统信息)。 2. 在 **Graphics** 或 **Rendering** 部分查看驱动信息。 --- ### 三、补充说明 - **NVIDIA用户**:可通过 `nvidia-smi` 查看驱动版本和GPU状态。 - **AMD/Intel用户**:驱动通常集成在Linux内核中,显示为 `amdgpu` 或 `i915`。 --- ### 总结步骤 1. 优先尝试 `inxi -G` 或 `lspci -k`。 2. 需要图形界面时使用 **Driver Manager**。 3. 验证OpenGL信息可确认驱动是否生效。 遇到问题可检查驱动是否冲突(如Nouveau开源驱动与NVIDIA专有驱动冲突)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值