> For the complete documentation index, see [llms.txt](https://handbook.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://handbook.bsdcn.org/di-5-zhang-xwindow-xi-tong/5.2.-xian-ka-qu-dong.md).

# 5.2.显卡驱动

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

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

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

**表 1. 支持的图形设备**

| 类型           | 许可证 | 模块                                       | 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://handbook.bsdcn.org/di-5-zhang-xwindow-xi-tong/pages/AR5AMn9RAcMe16pyw6df#id-5.5.2.-pei-zhi-xian-ka)。
* **内核模式设置（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® 显卡

Port [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® 显卡

Port [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**：

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

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

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

## 5.2.3. NVIDIA® 显卡

NVIDIA® 生产独立显卡处理器，并为 FreeBSD 提供专有驱动。FreeBSD Ports 提供了十余年的 NVIDIA 显卡驱动支持。

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

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

**表 2. 支持的 NVIDIA® 显卡驱动版本**

| Port                                                                                                                                                                                          | 模块                              | 支持的硬件                                                                     |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------- |
| [graphics/nvidia-drm-kmod](https://cgit.freebsd.org/ports/tree/graphics/nvidia-drm-kmod/)                                                                                                     | `nvidia-drm` 或 `nvidia-modeset` | [支持的硬件](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`                | [支持的硬件](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`                | [支持的硬件](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`                        | [支持的硬件](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`                        | [支持的硬件](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](/shu-yu-biao.md) 驱动。

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

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

PRIME 和 [Wayland](/di-6-zhang-freebsd-zhong-de-wayland/6.1.-wayland-jian-jie.md) 均需要内核模式设置。

旧版本驱动不支持直接渲染。请改用 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
```

某些显卡需要下载特殊固件才能正常工作。[fwget(8)](https://man.freebsd.org/cgi/man.cgi?query=fwget\&sektion=8\&format=html) 工具可以下载并安装所需文件到 **/boot/firmware** 目录下。[fwget(8)](https://man.freebsd.org/cgi/man.cgi?query=fwget\&sektion=8\&format=html) 会扫描 'PCI' 设备并为需要固件的设备下载相应的固件。
