在ESXi中启用显卡直通

image-20240906164247469

image-20240906164323638

配置中增加如下内容:

1
2
pciPassthru.use64bitMMIO=TRUE
pciPassthru.64bitMMIOSizeGB=64

image-20240906164441939

由于Debian安装完默认为BIOS启动而不是UEFI,所以不需要设置为允许不安全的UEFI,如果是Ubuntu需要设置,否则显卡驱动不能加载成功。

检查显卡是否连接

1
lspci | grep -i nvidia

进入系统禁用nouveau通用驱动

编辑/etc/modprobe.d/blacklist-nouveau.conf

1
nano /etc/modprobe.d/blacklist-nouveau.conf

输入以下内容

1
2
blacklist nouveau
options nouveau modeset=0

保存并关闭文件,然后执行:

1
update-initramfs -u

重新启动系统。

1
systemctl reboot

安装依赖包和内核头文件

1
apt install gcc make build-essential linux-headers-$(uname -r)

非常好,下面都在扯淡

下载驱动文件

Nvidia中国官网查找驱动。选择完显卡型号,选择Linux 64-bit版本的系统,语言选择English(US)

选择一个需要的版本,复制下载的链接。下载链接中的文件应该为.run格式。下面的链接和文件名请更改为你从官网获得的。

1
curl https://us.download.nvidia.com/tesla/535.183.01/NVIDIA-Linux-x86_64-535.183.01.run -o NVIDIA-Linux-x86_64-535.183.01.run

赋权

1
chmod u+x NVIDIA-Linux-x86_64-535.183.01.run

运行

1
./NVIDIA-Linux-x86_64-535.183.01.run --kernel-source-path=/usr/src/linux-headers-$(uname -r) -m=kernel-open

非常好,上面都在扯淡

安装 nvidia-detect 以检测需要什么样的驱动

1
2
apt install nvidia-detect
nvidia-detect

如果输出

1
2
3
It is recommended to install the
nvidia-driver
package.

则只需要运行

1
apt install nvidia-driver nvidia-smi

即可自动编译安装

Ubuntu 20.04

image-20240906212245376

image-20240906212308251

image-20240906212421349

完整流程

1
2
3
4
5
6
7
8
9
10
11
12
sudo apt update
sudo apt install gcc g++ make htop nvtop nano build-essential
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u
sudo reboot
lsmod | grep nouveau
dmesg | grep NVRM
curl https://us.download.nvidia.com/tesla/535.183.06/NVIDIA-Linux-x86_64-535.183.06.run -o NVIDIA-Linux-x86_64-535.183.06.run -x http://10.0.0.110:1081
chmod u+x ./NVIDIA-Linux-x86_64-535.183.06.run
sudo ./NVIDIA-Linux-x86_64-535.183.06.run -k $(uname -r)
sudo reboot
nvidia-smi

已废弃的方法(被我废弃)

1
2
sudo apt install linux-source-$(uname -r)
sudo ./NVIDIA-Linux-x86_64-535.183.06.run --kernel-source-path=/usr/src/linux-source-5.4.0-193 -k $(uname -r)

Q and A

240929遇到问题

重装了Ubuntu20.04系统,使用BIOS启动。安装完成后无法启动驱动内核。

错误详情:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nanyancc@gpu:~$ nvidia-smi
No devices were found
nanyancc@gpu:~$ lspci | grep -i nvidia
13:00.0 3D controller: NVIDIA Corporation GP102GL [Tesla P40] (rev a1)
nanyancc@gpu:~$ dmesg | grep -i nvidia
[ 10.275111] nvidia: loading out-of-tree module taints kernel.
[ 10.275207] nvidia: module license 'NVIDIA' taints kernel.
[ 10.345183] nvidia: module verification failed: signature and/or required key missing - tainting kernel
[ 10.387312] nvidia-nvlink: Nvlink Core is being initialized, major device number 240
[ 10.396226] NVRM: This PCI I/O region assigned to your NVIDIA device is invalid:
[ 10.396233] NVRM: This PCI I/O region assigned to your NVIDIA device is invalid:
[ 10.396252] NVRM: This PCI I/O region assigned to your NVIDIA device is invalid:
[ 10.513932] NVRM: loading NVIDIA UNIX x86_64 Kernel Module 535.183.06 Wed Jun 26 06:46:07 UTC 2024
[ 10.564603] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms 535.183.06 Wed Jun 26 06:40:18 UTC 2024
[ 10.570285] [drm] [nvidia-drm] [GPU ID 0x00001300] Loading driver
[ 10.570290] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:13:00.0 on minor 1
[ 10.895183] audit: type=1400 audit(1727584428.519:6): apparmor="STATUS" operation="profile_load" profile="unconfined" name="nvidia_modprobe" pid=850 comm="apparmor_parser"
[ 10.895196] audit: type=1400 audit(1727584428.519:7): apparmor="STATUS" operation="profile_load" profile="unconfined" name="nvidia_modprobe//kmod" pid=850 comm="apparmor_parser"
[ 24.474914] caller os_map_kernel_space.part.0+0xa2/0xb0 [nvidia] mapping multiple BARs
[ 24.971826] caller os_map_kernel_space.part.0+0xa2/0xb0 [nvidia] mapping multiple BARs
[ 25.258102] nvidia-uvm: Loaded the UVM driver, major device number 238.

240929 Debian安装驱动

安装必要工具

1
sudo apt install dkms build-essential gcc make linux-headers-$(uname -r)

禁用nouveau显卡驱动

修改/etc/default/grub文件

1
sudo vim /etc/default/grub

在文件中的GRUB_CMDLINE_LINUX参数中加入下面内容:

1
rd.driver.blacklist=nouveau

更新grub

1
sudo update-grub
1
2
3
echo "blacklist nouveau" | sudo tee -a /etc/modprobe.d/blacklist-nvidia-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nvidia-nouveau.conf
sudo update-initramfs -u

官方源安装:

1
2
sudo apt install linux-headers-amd64 dkms
sudo apt install nvidia-driver firmware-misc-nonfree

查询Nvidia日志

要查看与 NVIDIA 相关的系统日志,可以通过以下几种方法来获取和分析 Ubuntu 系统中的相关日志:

1. 使用 dmesg 查看内核日志

dmesg 命令显示内核日志,其中可能包含与 NVIDIA 驱动相关的信息,例如驱动加载失败或者成功的信息。可以通过 grep 过滤出与 NVIDIA 相关的内容:

1
dmesg | grep -i nvidia

这个命令将显示当前系统启动后,内核中所有与 NVIDIA 相关的消息。

2. 使用 journalctl 查看系统日志

journalctl 是 Ubuntu 中查看系统日志的一个强大的工具,可以使用它查看所有与 NVIDIA 驱动相关的消息:

1
journalctl -k | grep -i nvidia

此命令会显示与 NVIDIA 驱动有关的内核消息。你也可以查看更广泛的系统日志而不仅仅是内核消息:

1
journalctl | grep -i nvidia

如果想查看最近的一些日志(例如过去的 100 行),可以通过如下命令查看:

1
journalctl -b | grep -i nvidia | tail -n 100

3. 查看 Xorg 日志(适用于桌面环境)

如果你使用的是 NVIDIA 的图形驱动,可以查看 /var/log/ 目录下的 Xorg 日志。常见的文件路径有:

1
cat /var/log/Xorg.0.log | grep -i nvidia

这将会显示 Xorg 日志中与 NVIDIA 相关的内容,通常包括显卡驱动加载的信息。

4. 检查 NVIDIA 设置工具的日志

如果你安装了 nvidia-settings 工具,可能会有它自己的日志信息,可以通过以下命令查看:

1
cat ~/.nvidia-settings-rc

这个文件包含了 NVIDIA 设置工具的配置信息和日志。

5. NVIDIA 驱动日志(可能适用)

某些情况下,NVIDIA 驱动自身也会生成日志文件,通常可以在 /var/log//var/log/nvidia 目录下找到。如果存在这些日志文件,可以查看它们:

1
ls /var/log | grep nvidia

总结

你可以使用 dmesgjournalctlXorg 日志,甚至 NVIDIA 的设置日志来分析与 NVIDIA 驱动相关的系统信息。如果你想要更具体的错误分析或调试,也可以尝试从这些日志中寻找与错误相关的关键字,比如 “failed”、”error” 等。