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

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.lryc.cn/news/620247.html

相关文章:

  • LeetCode215~ 234题解
  • ACWing 算法基础课-数据结构笔记
  • Leetcode题解:215,数组中的第k个最大元素,如何使用快速算法解决!
  • 把 Linux 装进“小盒子”——边缘计算场景下的 Linux 裁剪、启动与远程运维全景指南
  • C#+Redis,如何有效防止缓存雪崩、穿透和击穿问题
  • 联网车辆功能安全和网络安全的挑战与当前解决方案
  • OpenBMC中的BMCWeb:架构、原理与应用全解析
  • 直播美颜SDK开发实战:高性能人脸美型的架构与实现
  • C++调试革命:时间旅行调试实战指南
  • 图像优化:使用 Next.js 的 Image 组件
  • h5bench(4)
  • linux 内核 - 内存管理概念
  • Linux 服务部署:自签 CA 证书构建 HTTPS 及动态 Web 集成
  • GO学习记录四——读取excel完成数据库建表
  • [AXI5]AXI协议中awsize和awlen在Vector Atomic地址膨胀中的作用
  • Vue3从入门到精通: 3.5 Vue3与TypeScript集成深度解析
  • FPGA的PS基础1
  • 力扣(O(1) 时间插入、删除和获取随机元素)
  • 热门手机机型重启速度对比
  • 以鼠标位置为中心进行滚动缩放
  • 力扣top100(day02-03)--链表03
  • 修复运动模糊的视频用什么软件?快速解决方案分享
  • ECCV-2018《Variational Wasserstein Clustering》
  • AI工程化闭环法(AIEC – AI Engineering Cycle) 适合TRAE CURSOR CLAUDE等工具
  • Transformer 之自注意力机制(一)
  • TF-IDF------词向量转化:从“文字”到“向量”
  • 可视化调试LangChain SQLChatMessageHistory:SQLite数据库查看全攻略
  • Java多线程进阶-从乐观锁到读写锁
  • 西门子TIA-SCL转STL指令项目案例及技巧
  • 【Python】Python 函数基本介绍(详细版)​