# 5.2.显卡驱动

**摘要**：识别你的显卡，找到提供驱动的 Port，安装它，然后通过 [sysrc(8)](https://man.freebsd.org/cgi/man.cgi?query=sysrc\&sektion=8\&format=html) 启用，以便在后续启动时运行。

在 FreeBSD 能够渲染显卡环境之前，需要内核模块来驱动显卡处理器。显卡驱动发展迅速且跨平台，因此它们是单独开发和发布的，而不随 FreeBSD 基本系统一起分发。

下表显示了 FreeBSD 支持的不同显卡处理器、对应的内核模块以及提供驱动的 Port：

| 类型           | 许可证 | 模块                                       | Port                                                                                                                                                                    |
| ------------ | --- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Intel®       | 开源  | `i915kms`                                | [graphics/drm-kmod](https://cgit.freebsd.org/ports/tree/graphics/drm-kmod/)                                                                                             |
| AMD®         | 开源  | `amdgpu` 或 `radeonkms`                   | [graphics/drm-kmod](https://cgit.freebsd.org/ports/tree/graphics/drm-kmod/)                                                                                             |
| NVIDIA®      | 专有  | `nvidia-drm`、`nvidia-modeset` 或 `nvidia` | [graphics/nvidia-drm-kmod](https://cgit.freebsd.org/ports/tree/graphics/nvidia-drm-kmod/) 或 [x11/nvidia-driver](https://cgit.freebsd.org/ports/tree/x11/nvidia-driver/) |
| 系统控制台帧缓冲     | 开源  | `scfb`                                   | [x11-drivers/xf86-video-scfb](https://cgit.freebsd.org/ports/tree/x11-drivers/xf86-video-scfb/)                                                                         |
| VESA BIOS 扩展 | 开源  | `vesa`                                   | [x11-drivers/xf86-video-vesa](https://cgit.freebsd.org/ports/tree/x11-drivers/xf86-video-vesa/)                                                                         |
| VirtualBox®  | 开源  | `vboxvideo`                              | [emulators/virtualbox-ose-additions](https://cgit.freebsd.org/ports/tree/emulators/virtualbox-ose-additions/)                                                           |
| VMware®      | 开源  | `vmwgfx`                                 | [x11-drivers/xf86-video-vmware](https://cgit.freebsd.org/ports/tree/x11-drivers/xf86-video-vmware/)                                                                     |

支持的驱动技术包括：

* **直接渲染驱动）**，支持 PRIME 卸载（offload）。PRIME 能让多个显卡处理器共存。有关 PRIME 的详细说明，请参见 [显卡配置](https://docs.freebsd.org/en/books/handbook/x11/#x-config-gpu)。
* **内核模式设置（KMS）**，能让驱动直接指定显示模式。使用 [vt(4)](https://man.freebsd.org/cgi/man.cgi?query=vt\&sektion=4\&format=html) 控制台驱动时，这对于支持挂起和恢复是必须的。
* **用户模式设置**，这是最古老的驱动类别，仍然受到支持，但只能用于 [sc(4)](https://man.freebsd.org/cgi/man.cgi?query=sc\&sektion=4\&format=html) 控制台和较旧版本的 [Xorg(1)](https://man.freebsd.org/cgi/man.cgi?query=Xorg\&sektion=1\&format=html) 显卡环境。

要识别系统中安装的显卡处理器，可以使用以下命令：

```sh
% pciconf -lv | grep -B3 display
```

输出示例：

```sh
vgapci1@pci0:0:2:0:     class=0x030000 rev=0x0c hdr=0x00 vendor=0x8086 device=0x46a6 subvendor=0x1028 subdevice=0x0b29
    vendor     = 'Intel Corporation'
    device     = 'Alder Lake-P GT2 [Iris Xe Graphics]'
    class      = display
```

详细的驱动安装和启用说明在后续小节中给出。

如果显卡处理器不受 Intel®、AMD® 或 NVIDIA® 驱动支持，则应使用 SCFB 或 VESA 模块。UEFI 模式下必须使用 SCFB 模块；BIOS 模式下必须使用 VESA 模块。可用以下命令检查启动模式：

```sh
% sysctl machdep.bootmethod
```

输出示例：

```sh
machdep.bootmethod: UEFI
```

## 5.2.1. Intel® 显卡

包 [graphics/drm-kmod](https://cgit.freebsd.org/ports/tree/graphics/drm-kmod/) 间接提供了一系列用于 Intel® 显卡的内核模块。最新版本的这些模块可以与其他显卡处理器在 PRIME 中协同使用，无需特殊配置。

安装 Intel® 显卡驱动：

```sh
# pkg install drm-kmod
```

然后通过以下命令将模块添加到 **/etc/rc.conf** 文件：

```sh
# sysrc kld_list+=i915kms
```

## 5.2.2. AMD® 显卡

[graphics/drm-kmod](https://cgit.freebsd.org/ports/tree/graphics/drm-kmod/) 包间接提供一系列 AMD® 显卡处理器的内核模块。根据硬件代数，可使用 `amdgpu` 或 `radeonkms` 模块。FreeBSD 项目维护了一份 [AMD 显卡支持列表](https://wiki.freebsd.org/Graphics/AMD-GPU-Matrix)，用于确定应使用的驱动。

安装 AMD® 显卡驱动：

```sh
# pkg install drm-kmod
```

启用当前模块，将其添加到 **/etc/rc.conf**：

```
# sysrc kld_list+=amdgpu
```

对于旧型号显卡（HD7000/Tahiti 之前），请启用兼容模块：

```sh
# sysrc kld_list+=radeonkms
```

## 5.2.3. NVIDIA® 显卡

NVIDIA® 提供了专有驱动以支持其独立或独显处理器。FreeBSD Ports 提供了对近十多年的 NVIDIA 显卡驱动支持。

管理员应安装其硬件支持的最新驱动。

支持的 NVIDIA® 驱动版本、内核模块及支持的硬件如下：

| Port                                                                                                                                                                                          | 模块                              | 支持的硬件                                                                                  |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | -------------------------------------------------------------------------------------- |
| [graphics/nvidia-drm-kmod](https://cgit.freebsd.org/ports/tree/graphics/nvidia-drm-kmod/)                                                                                                     | `nvidia-drm` 或 `nvidia-modeset` | [supported hardware](https://www.nvidia.com/Download/driverResults.aspx/210651/en-us/) |
| [x11/nvidia-driver-470](https://cgit.freebsd.org/ports/tree/x11/nvidia-driver-470/)                                                                                                           | `nvidia-modeset`                | [supported hardware](https://www.nvidia.com/Download/driverResults.aspx/194639/en-us/) |
| [x11/nvidia-driver-390](https://cgit.freebsd.org/ports/tree/x11/nvidia-driver-390/) 或 [x11/nvidia-secondary-driver-390](https://cgit.freebsd.org/ports/tree/x11/nvidia-secondary-driver-390/) | `nvidia-modeset`                | [supported hardware](https://www.nvidia.com/Download/driverResults.aspx/191122/en-us/) |
| [x11/nvidia-driver-340](https://cgit.freebsd.org/ports/tree/x11/nvidia-driver-340/)                                                                                                           | `nvidia`                        | [supported hardware](https://www.nvidia.com/Download/driverResults.aspx/156167/en-us/) |
| [x11/nvidia-driver-304](https://cgit.freebsd.org/ports/tree/x11/nvidia-driver-304/)                                                                                                           | `nvidia`                        | [supported hardware](https://www.nvidia.com/Download/driverResults.aspx/123712/en-us/) |

安装最新 NVIDIA® 驱动：

```sh
# pkg install nvidia-drm-kmod
```

启用驱动，将模块添加到 **/etc/rc.conf**：

```sh
# sysrc kld_list+=nvidia-drm
```

这是直接渲染的 [KMS](https://docs.freebsd.org/en/books/handbook/glossary/#glossary-kms) 驱动。

内核模式设置用于在内核中设置显卡模式。通过以下 [loader.conf(5)](https://man.freebsd.org/cgi/man.cgi?query=loader.conf\&sektion=5\&format=html) 可永久启用：

```sh
hw.nvidiadrm.modeset="1"
```

PRIME 和 [Wayland](https://docs.freebsd.org/en/books/handbook/wayland/#wayland-synopsis) 均需要内核模式设置。

旧版本驱动不支持直接渲染。使用模块 `modesetting`：

```sh
# sysrc kld_list+=nvidia-modeset
```

对于 390 之前版本的 NVIDIA 驱动，不支持内核模式设置，因此必须与兼容 [sc(4)](https://man.freebsd.org/cgi/man.cgi?query=sc\&sektion=4\&format=html) 控制台驱动和 1.20 之前版本的 [x11/xorg-server](https://cgit.freebsd.org/ports/tree/x11/xorg-server/) 一道使用。

在 **/etc/rc.conf** 中启用：

```sh
# sysrc kld_list+=nvidia
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://handbook.bsdcn.org/di-5-zhang-xwindow-xi-tong/5.2.-an-zhuang-xorg.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
