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