当前位置: 首页 > backend >正文

Linux 5.15.189-rt87 实时内核安装 NVIDIA 显卡驱动

目录

  • 一、准备依赖与清理冲突
  • 二、为外部模块准备“内核构建树”(headers)
  • 三、禁用 nouveau
  • 四、Secure Boot 选择
  • 五、安装 NVIDIA 驱动(DKMS)
  • 六、解除 NVIDIA 黑名单
  • 七、强制开启 KMS,固定加载顺序并自动加载
  • 八、验证
  • 九、图形策略:让 NVIDIA 成为主 GPU


  • 目标:在 5.15.189-rt87 实时内核上安装 NVIDIA 535.261.03 驱动(DKMS),并在笔记本混合显卡上可选择 独显主渲染

一、准备依赖与清理冲突

sudo apt-get update
sudo apt-get install -y \build-essential bc flex bison libelf-dev dwarves \libssl-dev libncurses-dev xz-utils zstd pkg-config dkms gcc make# 如系统曾安装 APT 版 NVIDIA,先清理(避免与 .run 混装)
sudo apt-get purge -y 'linux-modules-nvidia-*' 'nvidia-*' 'libnvidia-*'
sudo apt-get autoremove --purge -y

二、为外部模块准备“内核构建树”(headers)

让 .run 能找到、并针对 当前 RT 内核 编译模块。

KVER=$(uname -r)                   # 期望: 5.15.189-rt87
KDIR=/home/li/rtkernel/linux-5.15.189   # ← 改成你的实际内核源码目录cd "$KDIR"# 确保 .config 匹配当前内核(不要多一个 -rt87)
cp /boot/config-$KVER .config
yes "" | make olddefconfig# 生成外部模块编译所需头文件
make prepare modules_prepare# UTS 版本核对(必须等于 5.15.189-rt87)
grep UTS_RELEASE include/generated/utsrelease.h# 若启用了 MODVERSIONS(Ubuntu 常见),需要 Module.symvers:
# - 若保留了当初编译该内核的构建目录,直接拷贝 Module.symvers 过来;
# - 否则在当前树快速编一次模块以生成:
make -j"$(nproc)" modules
test -f Module.symvers && echo "OK: Module.symvers 就绪"# 建立 /lib/modules/$KVER/{build,source} 链接
sudo mkdir -p /lib/modules/$KVER
sudo ln -sfn "$KDIR" /lib/modules/$KVER/build
sudo ln -sfn "$KDIR" /lib/modules/$KVER/source

三、禁用 nouveau

# 黑名单 nouveau
cat <<'EOF' | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF
sudo update-initramfs -u
sudo reboot

四、Secure Boot 选择

  • BIOS 设为 Deployed Mode(不是 Audit)
  • 禁用 Secure Boot

五、安装 NVIDIA 驱动(DKMS)

  • 编译器最好与内核同主版本(例如 gcc-9)
cd ~/Downloads
chmod +x NVIDIA-Linux-x86_64-535.261.03.runsudo env IGNORE_PREEMPT_RT_PRESENCE=1 \./NVIDIA-Linux-x86_64-535.261.03.run \--dkms \--kernel-source-path="$KDIR"

六、解除 NVIDIA 黑名单

  • APT 包常留下 /lib/modprobe.d/blacklist-nvidia.conf 禁用 NVIDIA 模块,必须禁用此黑名单
# 检查并移除/注释黑名单
sudo grep -RniE 'blacklist\s+nvidia|alias nvidia-drm off' /lib/modprobe.d /etc/modprobe.d || true
sudo mv /lib/modprobe.d/blacklist-nvidia.conf /lib/modprobe.d/blacklist-nvidia.conf.disabled 2>/dev/null || true
sudo update-initramfs -u

七、强制开启 KMS,固定加载顺序并自动加载

# 开启 KMS
echo 'options nvidia-drm modeset=1' | sudo tee /etc/modprobe.d/nvidia-kms.conf# 固定加载顺序(避免 nvidia-drm 自卸载)
cat <<'EOF' | sudo tee /etc/modprobe.d/nvidia-softdep.conf
softdep nvidia-modeset pre: nvidia
softdep nvidia-drm     pre: nvidia-modeset
EOF# 启动时自动加载相关模块(特别是 drm/drm_kms_helper)
cat <<'EOF' | sudo tee /etc/modules-load.d/nvidia-rt.conf
drm
drm_kms_helper
nvidia
nvidia_modeset
nvidia_uvm
nvidia_drm
EOF# PREEMPT_RT 建议:线程化中断 + MSI
echo 'options nvidia NVreg_UseThreadedInterrupts=1 NVreg_EnableMSI=1' | \sudo tee /etc/modprobe.d/nvidia-rt.conf# GRUB 参数(避免 simpledrm/efifb 抢占)
sudo sed -i 's/^\(GRUB_CMDLINE_LINUX_DEFAULT="[^"]*\)"/\1 nvidia-drm.modeset=1 simpledrm.modeset=0"/' /etc/default/grub
# 如仍被早期帧缓冲占用,可再追加: video=efifb:off,vesafb:off
sudo update-initramfs -u
sudo update-grub
sudo reboot

八、验证

# 模块已加载
lsmod | egrep 'nvidia(_drm|_modeset|_uvm)?'# KMS 已开启
cat /sys/module/nvidia_drm/parameters/modeset   # 应输出 Y(root 读)# 版本匹配
modinfo -F vermagic nvidia   # 包含 5.15.189-rt87
uname -r                     # 5.15.189-rt87# DKMS 状态
dkms status | grep -i nvidia# 运行状况
nvidia-smi

九、图形策略:让 NVIDIA 成为主 GPU

sudo mkdir -p /etc/X11/xorg.conf.d
sudo tee /etc/X11/xorg.conf.d/10-nvidia-primary.conf >/dev/null <<'EOF'
Section "OutputClass"Identifier "nvidia"MatchDriver "nvidia-drm"Driver "nvidia"Option "PrimaryGPU" "yes"Option "AllowEmptyInitialConfiguration"ModulePath "/usr/lib/nvidia/xorg"ModulePath "/usr/lib/xorg/modules"
EndSectionSection "OutputClass"Identifier "intel"MatchDriver "i915"Driver "modesetting"
EndSection
EOF
sudo reboot
  • 开启 PRIME 同步
xrandr --prop | grep -E ' connected|PRIME Synchronization' -A1
# 假设内屏是 eDP-1:
xrandr --output eDP-1 --set "PRIME Synchronization" 1
http://www.xdnf.cn/news/17659.html

相关文章:

  • 【WonderTrader源码详解 1】【环境搭建 2】【编译安装WonderTrader】
  • 从 VLA 到 VLM:低延迟RTSP|RTMP视频链路在多模态AI中的核心角色与工程实现
  • Java 大视界 -- 基于 Java 的大数据可视化在能源互联网全景展示与能源调度决策支持中的应用
  • 《工程封装》(Python)
  • 解决 HTTP 请求 RequestBody 只能被读取一次的问题
  • 【PyTorch学习笔记 - 03】 Transforms
  • 串口超时参数深度解析:ReadTotalTimeoutMultiplier、ReadIntervalTimeout等
  • Day24|学习前端CSS
  • scikit-learn/sklearn学习|岭回归python代码解读
  • 数据分析小白训练营:基于python编程语言的Numpy库介绍(第三方库)(上篇)
  • vue-cli搭建项目脚手架
  • -bash: ll: 未找到命令
  • RabbitMQ-知识技能图谱(总结篇)
  • leetcode3258:统计满足K约束的子字符串数量Ⅰ(变长滑动窗口详解)
  • Windows server服务器上部署python项目域名访问(超详细教程)
  • Web攻防-业务逻辑篇Fuzz技术数据并发条件竞争JS挖掘参数盲猜Turbo插件SRC
  • pyside控件_左右范围滑动控件
  • Kubernetes 资源管理全解析:从基础到企业级实践
  • 初识神经网络04——构建神经网络2
  • 【基于DesignStart的M3 SoC】
  • 当“超级高速“遇见“智能大脑“:5G-A×AI如何重塑万物智联时代
  • 告别数据孤岛!React 路由 3 种传参方法全解析
  • Qt之QMetaEnum的简单使用(含源码和注释)
  • 标准IO操作
  • Python 常用的正则表达式
  • Redis序列化配置类
  • vue2+elementUI实现园型动态步骤条小组件,带缩放功能
  • 【4】Transformers快速入门:自然语言模型 vs 统计语言模型
  • 【无标题】centos 配置阿里云的yum源
  • vue文件或文件夹拖拽上传