从安装Linux to Go到NVIDIA驱动和CUDA

从安装Linux to Go到NVIDIA驱动和CUDA
MitchellLinux to Go 安装到移动硬盘
因为电脑系统盘容量不足,同时不想让 Linux 搞乱系统盘,因此选择了类似 Win to Go 的安装方式,将 Linux 系统安装到移动固态硬盘,即插即用的同时还能给 Windows 和 Linux 系统同时保留较大的空间。
发行版的选择
作为一个从高中就开始接触 Linux 的人,我首先想到的就是 Ubuntu 或是它的社区版 Debain。然而我在几周前看到朋友的 Deepin,深感过去使用的 Ubuntu 实在是远离现代化,且诸多使用习惯与 Windows 和 macOS 不同,因此我决定尝试一下不同的发行版。接着发现实际上 Deepin 并不好用,于是将目光转向了其他的发行版,最终在一个视频中找到了答案:Bilibili - 【年度盘点】2024 Linux发行版终极评测:谁是真香?谁又惨遭打入冷宫?
视频中,Ubuntu / Debain 仅为 T2 级别,因此我最终选择了 T1 级别的 Fedora KDE Plasma Desktop,版本号 41。
安装 Fedora 41
- 准备一块移动固态硬盘,一个至少8GB的U盘,一台BIOS开启安全启动的PC
- 下载 Fedora KDE Plasma Desktop 镜像: Fedora官网
- 继续在上一步的网址中,往下拉,下载 Fedora Media Writer
- 使用 Fedora Media Writer 将镜像烧录进 U盘
- 将U盘和移动固态硬盘插入电脑,重启时进入BIOS,选择启动项为U盘
- 开机时选择“无需验证”的选项
- 在进入 Fedora 试用系统后,点击左上角的 Install Fedora,将系统安装至移动硬盘
- 注意:在设置用户时,应当同时设置个人用户和 root 用户!(不要选错安装位置,否则可能抹掉 Windows 的硬盘!)
- 拔掉U盘,重启时进入BIOS,选择启动项为移动硬盘
安装 NVIDIA 驱动
Tips:
- Fedora 的包管理器是 DNF (Dandified YUM),支持的安装包格式为 .rpm;因此需要将常见教程中的 apt-get、yum 指令换为 dnf,下载安装包时忽略 .deb 格式。
- Fedora 中,进入纯命令行模式的方式是按 [Alt + Ctrl + F3] 。
- 安装 Fedora 41 时,若选择中文语言,则 /home/[yourUserName]/ 目录下的下载等文件夹为中文,在进入纯命令行模式前,需要将下载文件夹中的文件移出,否则无法操作。
- Fedora KDE中,关闭 GUI 界面的指令为
sudo systemctl stop sddm
,退出纯命令行模式的指令为sudo systemctl start sddm
。- 本节的主要参考为 CSDN - 在Fedora上安装NVIDIA驱动详细教程及解析;次要参考为 GitHub - oddmario/NVIDIA-Fedora-Driver-Guide
一、准备环境
由于构建编译NVIDIA官方提供的run包以及需要给NVIDIA driver签名需要一些工具,所以先进行rpm包的安装。安装NVIDIA驱动属于系统级别的改动,所以以下所有的操作都需要在root下进行!按 [Alt + Ctrl + F3] 进入纯命令行模式,登录 root 用户。
1 | dnf update |
如果出现找不到任何一个rpm包的情况,请添加清华源、ustc源、阿里源等,这些并不是冷门的包。
二、下载官方驱动.run包
1. 确定所使用的显卡型号,有多种方法可选:
- 使用
neofetch
,安装方法见 neofetch Wiki - 使用
lshw -c video
查看
- 使用
lspci|grep -i vga
查看
2. 进入NVIDIA官方页面下载linux版的驱动
NVIDIA驱动下载根据自己的情况选择正确的NVIDIA驱动。注意如果你是笔记本显卡,可能要选notebook版本,操作系统应选择Linux。如果显卡填错了,会给出错误的显卡驱动,会影响显示效果。
选择推荐驱动/认证驱动分支即可,注意不同的驱动版本可能对应了不同的CUDA版本上限。我选择了2025-1-16发布的 550.144.03
版本,最高支持 CUDA 12.4
把下载下来的run包移动到 /home/[yourUserName]/
目录下。由于NVIDIA对LInux的适配力度并没有像WIndows那么大,所以基本只要下载这一次就好了,它一般不会更新,所以一次性下载好以后就不需要再访问NVDIA官网了。
3. 接下来我们要来查看自己的电脑BIOS是否开启了安全启动模式,这也是linux安装nvidia驱动里最坑人的地方。有2种方法可选:
- 使用
mokutil --sb-state
查看
- 使用
dmesg |grep -E 'secureboot'
查看
BIOS 中的安全启动要保持enable然后进Fedora,如果已经是enable那就不用调节;如果是disable,也要调成enable
三、禁用nouveau开源显卡驱动
在NVIDIA显卡上如果没有安装闭源驱动,那么默认使用的就是nouvea开源驱动。
nouveau官网nouveau(英语:/nuːˈvoʊ/ 是一个自由开放源代码GPU驱动程序,是为Nvidia的GPU所编写,也可用于属于系统芯片的高通系列,此驱动程序是由一群独立的软件工程师所编写,Nvidia的员工也提供了些微的帮助,微软也提供了很大的帮助,谷歌也不甘示弱地提供了尽可能多的帮助。
nouveau只是入门级别的显卡驱动,也就是仅仅在勉强够用的水平,在这种情况下是不能完全发挥nvidia显卡的优势的。
所以我们在安装nvidia驱动之前必须禁用它,不要慌,完全没有nvidia驱动的情况下也是能进图形化界面的,只是拿CPU硬算会比较卡。
1. 在禁用模块和启动引导里同时禁用nouveau驱动
1 | dnf install vim |
1 | vim /etc/default/grub |
参考效果:
2. 重新制作启动引导配置文件,然后重启
1 | grub2-mkconfig -o /boot/grub2/grub.cfg |
3. 查看nouveau显卡驱动模块是否被加载
1 | lsmod|grep nouveau |
重启之后使用以上指令查看nouveau显卡驱动模块是否被加载,运行指令后没有出现任何返回结果就对了!
这里必须保证没有任何模块显示出来,如果还有那就是失败了。
四、安装NVIDIA显卡驱动
1. 从GUI模式切换到纯命令行模式
按 [Alt + Ctrl + F3] 进入纯命令行模式,如果不行,尝试将 F3 换为 F1 或 F2。
以 root 身份登录。
2. 停止显示管理器(SDDM)服务
在 Fedora KDE 系统中,停止 SDDM 服务:
1 | sudo systemctl stop sddm |
对于其他系统,这一步可能为:
1 | sudo service lightdm stop |
3. 运行 .run 包
1 | cd /home/[yourUserName]/ |
4. 运行后在命令行界面会出现…..的进度条
Uncompress NVIDIA driver 这是在解包
5. 进度条读完之后会进入NVIDIA驱动的以蓝色调为主的安装界面
Building kernel modules 此时在构建编译NVIDIA驱动linux内核模块。编译完成后 “Continue“。
6. 提示是否要给编译好的NVIDIA 模块签名
1 | The target kernel has CONFIG_MODULE_SIG set which means that it supports cryptographic signatures on kernel modules.On some systems,the kernel may refuse to load modules without a valid signature from a trusted key.This system also has UEFI Boot enabled; many distributions enforce module signature verification on UEFI systems when Secure Boot is enabled. Would you like to sign the NVIDIA kernel module? |
目标内核设置了CONFIG_MODULE_SIG,这意味着它支持内核模块上的加密签名。在某些系统上,内核可能拒绝加载没有来自可信密钥的有效签名的模块。此系统还启用了UEFI引导;当启用安全引导时,许多发行版在UEFI系统上强制执行模块签名验证。是否要签署NVIDIA内核模块?
我们知道,linux是典型的模块化的宏内核操作系统,在加载安装nvidia内核模块的时候由于Uefi Secure Boot的阻拦,我们必须给该模块签名,如果不签名则无法加载。
所以我们这里选择 “Sign the kernel module”,给我们的NVIDIA内核模块签名以免被安全启动阻拦。
7. 生成签名密钥
1 | Would tou like to sign the NVIDIA kernel module with an existing key pair,or would you like to generate a new one? |
首次安装时务必选择 “Genrate a new key pair”,它会自动生成NVIDIA模块的签名密钥,我们将来要把它交给UEFI Secure Boot审核。非首次安装的时候,也就是密钥文件以及存在的情况下,可以选择“Use an existing key pair ”,选择这个选项,它会提示你输入密钥文件存储的位置。
8. 删除私有的签名密钥
1 | The NVIDIA kernel module was successfully signed with a newly generated key pair .Would you like to delete the private signing key? |
如果你频繁更新内核,那么可以选择保留私有密钥,在你下一次安装NVIDIA驱动的时候可以选择“Use an existing key pair”,也就是第四步的时候,如果你选择了这个选项,实际上它会让你输入密钥的位置。这么做其实是比较麻烦的,在这个蓝色界面还不能使用Tab查看目录里的文件,如果没有把位置背下来,那就只能用Ctrl+Alt+Fn切换到另一个tty去查看,因此我不建议选择保留。直接选择 Yes 就好,下一次我们重新生成一个密钥,然后再签名会方便很多。
9. 做出选择之后
1 | An X.509 certificate containing the public signing key will be installed to /usr/share/nvidia/nvidia*.der ..............此处省略一万字.............. |
必须将此证书添加到内核信任的密钥数据库中,以便内核能够验证模块签名
10. 下一步
1 | The signed kernel nodule failed to load. Secure boot is enabled on this system, so this is likely because the kernel does not trust any key which is capable of verifying the module signature. Would you like to install the signed kernel |
根据以上提示,虽然我们一厢情愿地想安装NVIDIA驱动.但是Linux kernel和UEFI Secure Boot并不领情,不相信我们的NVIDIA kernel modules sign.没有关系,这个我们选择第一项 “Install signed kernel module” 就好了。
11. 选择是否安装NVIDIA 32位兼容库
1 | Install NVIDIA's 32-bit compatibility libraries? |
这里问我们是否要安装NVIDIA 32位兼容库,我们选择 “Yes“ 就好。
12. 注册DKMS
1 | Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if your kernel changes later. |
dkms我们最前面已经安装过了。
DKMs以文件的形式存储并能在系统运行过程中动态地加载和卸载。DKMs由一个用户层的DKM服务器来管理,并非由内核来管理。当核心需要某模块时,由DKM服务器负责把相应的DKM加载;当核心的内存资源紧缺时,由DKM服务器负责卸载一个没有被使用的DKM。
dkms这个工具的作用就是动态加载内核模块,在NVIDIA的提示下,它的大致作用是在你安装新的linux kernel的时候dkms会自动帮你编译安装nvidia驱动模块到你的新内核。这里可以选择Yes或者No,本人测试更新内核的时候,在新内核里并没有自动加上nvidia驱动。这里讲一下选择Yes的情况,选择No的话就直接进入下一步了。
选择Yes后会提示错误,不要慌,虽然它是ERROR,但它并不会影响你安装NVIDIA驱动。我这里建议你把这个提示错误的界面给拍下来,等到后面我们还有用的。
1 | WARNING: Failed to register the NVIDIA kernel modules with DKMS. The NVIDIA kernel modules were installed, but will not be automatically rebuilt if you change your kernel. |
直接OK就好了,没有大碍。
13. 修改X的配置文件
1 | Your X configuration file has been successfully updated. Installation of the NUIDIA Accelerated Graphics Driver for Linux-X86_64 (version: 550.144.03) is now complete. |
选择Yes即可,让NVIDIA驱动帮你自动修改X和grub2的配置文件,就不要自己去改了。
接下来就已经退出NVIDIA驱动的安装界面了,会重新回到命令行界面,如果以上步骤和我讲述的不一样直接提示错误导致退出,可以重新运行NVIDIA驱动安装包,多次尝试。
14. 安装NVIDIA驱动之后操作
这里千万不要直接重启,我们还有一些善后事宜要做的。
1 | akmods --force #确保内核模块已编译 |
特别是第三步,非常重要,因为前面提示签名错误,我们这里可以手动签名,所以前面提示错误也无妨。注意:如果你没有打开安全启动,那么就不需要签名这个步骤,NVIDIA驱动也大概不会给你这个.der文件,所以直接跳过mokutil就好了。
输入的那串密码一定要记住,很快就要用到了。
五、重启并验证NVIDIA驱动
1. 重启之后进入界面
重启之后会出现如下界面,不要慌,根据它的提示按下任意键即可。不要一直停留,不然界面消失的话,我们得在linux中重复 mokutil --import /usr/share/nvidia/nvidia*.der
这个步骤然后重启。
2. 选择“Enroll MOK”
3. [Enroll MOK] 选择 Continue
4. Enroll the key(s)? 选择Yes
5. 这里要输入刚才记录的密码
6. 选择Reboot重启
六、重启之后的额外操作
在 CSDN 的主要参考教程中,到这里直接使用 nvidia-smi
指令就能看到显卡在正常工作了,可是我的情况有所不同:
1. `nvidia-smi` 可以显示,但显存为 Off 状态,且显存占用为 1MB 或 0MB;下面显示 No running processes found
1. 系统设置 - 关于本机 中,显卡型号为“llvmpipe”
1. `lsmod|grep nouveau` 没有结果,`lsmod|grep nvidia` 有正常返回(看起来是正常现象)
1. 播放视频时 CPU 占用很高,且外接显示器没有画面
所有的现象都表明,NVIDIA显卡驱动了,但没完全驱动!
我找得到的解决方式如下:
1. 关闭BIOS中的安全启动
2. 修改 /etc/default/grub
1 | # 进入纯命令行模式,登录root用户 |
重启之后,nvidia-smi
正常显示,系统设置 - 关于本机的显卡型号正常显示,外接显示器正常显示。
(可选项)启用视频加速支持
1 | sudo dnf install nvidia-vaapi-driver libva-utils vdpauinfo |
安装 CUDA
1. 查看CUDA最高支持的版本
1 | nvidia-smi |
2. 前往 CUDA 官网
CUDA Toolkit Archive | NVIDIA Developer这里选择小版本号最高的版本,例如我的驱动最高支持CUDA 12.4,那么我可以选择 CUDA 12.4.1
3. 选择正确的系统版本
这里注意最后一项 Installer Type 选择 ”runfile (local)”
4. 输入下面给到的Linux命令
1 | wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run |
如果产生错误提示:Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.
那么将运行命令后面加上 --override
1 | sudo sh cuda_12.4.1_550.54.15_linux.run --override |
5. 安装选项
弹出来第一个选择框,因为已经安装过 Nvidia 的显卡驱动了,因此选择 “continute” ,会出现下面这个对话框,选择 “accept” 。
摁一下空格取消叉选 Driver 安装,直接选择 Install 安装(这一步中,可以只勾选 CUDA Toolkit 12.4):
6. 安装成功
7. 配置环境变量
1 | sudo vim ~/.bashrc |
8. 更新系统环境变量
1 | source ~/.bashrc |
9. 验证 CUDA 是否安装成功
1 | nvcc -V |
输出下图即为成功安装:
后记
之前做项目,在 Ubuntu 18.4 LTS 上给 3060 Super 安装驱动就忙了一整天,这次算上 Fedora 安装和折腾,前前后后也差不多用了一整天,累麻了,希望记录下来折腾的过程,以后少踩坑吧。
最后还是想说一句: