技术突破:社区补丁让树莓派5正式支持NVIDIA显卡运行

几个月前,GitHub用户@yanghaku发布了一组简洁的补丁,成功修复了树莓派(Raspberry Pi)平台对AMD显卡的GPU支持问题,甚至还展示了未公开的补丁使树莓派能够驱动NVIDIA RTX 3080显卡。

(参考链接:https://www.jeffgeerling.com/blog/2025/full-egpu-acceleration-on-pi-500-15-line-patch)
近期,GitHub用户@mariobalanica发布了一个更为全面的补丁,将同样的功能扩展到了英伟达(Nvidia)显卡上,实现了对NVIDIA显卡的原生支持。

(补丁链接:https://github.com/NVIDIA/open-gpu-kernel-modules/pull/972)
出于对这项技术的浓厚兴趣,我手头恰好有树莓派和NVIDIA显卡,便决定暂时搁置对GB10系统的测试计划,转而编译并验证mariobalanica提供的这个分支。
在树莓派5上构建NVIDIA显卡支持
由于相关代码仍处于积极开发阶段,以下操作步骤未来可能发生变动。
- 安装操作系统:使用树莓派官方的“Raspberry Pi Imager”工具,将Pi OS 13 “Trixie”写入一个新的启动盘。
- 系统更新:启动树莓派,在终端中执行以下命令以确保系统软件包为最新版本。
sudo apt update && sudo apt upgrade -y - 切换内核:当前补丁仅针对4K页大小的内核有效,而树莓派默认使用的是16K内核,因此需要切换。
在文件末尾添加一行:sudo nano /boot/firmware/config.txtkernel=kernel8.img,保存后重启。 - 重启系统:执行重启命令使内核更改生效。
sudo reboot - 下载驱动:从NVIDIA官方网站下载适用于ARM64架构的最新Linux驱动程序(本文测试版本为580.95.05)。 (驱动下载:https://www.nvidia.com/en-us/drivers/unix/)
- 安装驱动(不构建内核模块):运行下载的驱动安装程序,但跳过内核模块的构建步骤。
sudo sh ./NVIDIA-Linux-aarch64-580.95.05.run --no-kernel-modules - 克隆修改版内核模块:获取@mariobalanica修改后的开源NVIDIA内核模块代码。
cd ~/Downloads && git clone --branch non-coherent-arm-fixes https://github.com/mariobalanica/open-gpu-kernel-modules.git - 编译与安装内核模块:进入克隆的目录,编译并安装内核模块。
cd open-gpu-kernel-modules make modules -j$(nproc) sudo make modules_install -j$(nproc) - 更新模块依赖:运行以下命令以更新模块依赖关系数据库。
sudo depmod -a - 最终重启:完成所有步骤后,再次重启系统以加载新的NVIDIA内核模块。
sudo reboot
显卡显示输出问题
在我所使用的NVIDIA RTX A4000显卡上,暂时无法通过DisplayPort接口向显示器输出图像。系统日志dmesg中没有报告明显的错误,也没有出现黑屏仅带闪烁光标的情况(这与目前树莓派上运行某些Intel显卡驱动的表现不同,后者在未编译新版Mesa驱动时通常会出现该问题,但至少能通过Alt + F2切换到控制台)。

我尝试了禁用板载集成显卡的方法(在启动配置文件config.txt中注释掉dtoverlay=vc4-kms-v3d并重启),但并未能解决显示输出问题。尽管如此,树莓派在无显示器(headless)模式下仍能执行大量计算任务,因此我继续测试了其GPU加速计算能力。
GPU加速计算性能测试
为了获得最佳的外接显卡性能,建议将树莓派5的PCIe通道强制设置为PCIe Gen 3模式。 (性能优化参考:https://www.jeffgeerling.com/blog/2023/forcing-pci-express-gen-30-speeds-on-pi-5)
运行nvidia-smi命令可以正确识别并显示GPU的详细信息,这表明驱动已成功加载。
jgeerling@cm5:~ $ nvidia-smi
Wed Nov 26 16:52:14 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05 Driver Version: 580.95.05 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA RTX A4000 Off | 00000001:01:00.0 Off | Off |
| 41% 31C P8 8W / 140W| 1MiB / 16376MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
为了测试AI推理的GPU加速,我选择使用llama.cpp。由于未能快速配置好CUDA环境,我转而使用Vulkan后端从源码编译了llama.cpp。虽然对于NVIDIA显卡,CUDA通常性能略优,但Vulkan方案在此次测试中已可工作。
jgeerling@cm5:~/Downloads/llama.cpp $ ./build/bin/llama-bench -m models/Llama-3.2-3B-Instruct-Q4_K_M.gguf -n 128 -p 512,4096 -pg 4096,128 -ngl 99 -r 2
ggml_vulkan: Found 2 Vulkan devices:
ggml_vulkan: 0 = NVIDIA RTX A4000 (NVIDIA) | uma: 0 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 49152 | int dot: 1 | matrix cores: NV_coopmat2
ggml_vulkan: 1 = V3D 7.1.10.2 (V3DV Mesa) | uma: 1 | fp16: 0 | bf16: 0 | warp size: 16 | shared memory: 16384 | int dot: 0 | matrix cores: none
build: 7cba58bbe (7169)

从测试反馈来看,A4000显卡在树莓派上的Vulkan性能数据表现正常,但要进行精确的性能对比,仍需在其它系统中使用CUDA和Vulkan进行交叉验证,以判断其是否达到了该显卡的预期水平。
总结与展望
这项驱动补丁的意义不仅限于树莓派,它实际上为众多官方尚未支持NVIDIA显卡的ARM架构系统开启了可能性。因此,其应用范围可以覆盖除大型企业级云原生服务器之外的许多设备。
开发者mariobalanica主要在RK3588开发板上构建和测试此补丁。理论上,RK3588平台的表现可能略优于树莓派5,因为其SoC性能更强、能效更高,并且支持PCIe Gen 3 x4通道(而树莓派5仅支持Gen 3 x1)。
目前,我正在使用更多型号的显卡进行深入测试。接下来的首要任务是解决显示输出问题,希望解决方法足够简单,无需重新编译整个内核。