为特定 grub 菜单项将图形驱动程序设置为 nouveau

为特定 grub 菜单项将图形驱动程序设置为 nouveau

我安装了一个修补实时内核在我常用的 ubuntu 20.04 内核旁边(我用来修补内核的步骤可以在这里找到这里)。由于 Nvidia 无法为实时内核提供良好的支持(请参阅此论坛帖子),每次我想使用实时内核时,我都必须切换回 Nouveau 图形驱动程序。由于这个过程需要一些时间,我想知道是否可以直接在该内核的 grub 菜单项中指定的内核加载选项中指定内核使用哪个图形驱动程序。我发现这个帖子这说明我可以添加以下内核参数来将 NVidia 驱动程序列入黑名单:

modprobe.blacklist=nvidia systemd.setenv=GPUMOD=nouveau

然而,这似乎在我的系统上不起作用,实时内核仍然无法启动(启动时出现黑屏),除非我在默认内核中改回使用 nouveau 驱动程序(我使用软件和更新 > 附加驱动程序菜单执行此操作)。我在网上搜索了这个问题的解决方案,但每个解决方案都指向本文给出的解决方案邮政。因此,我怀疑可能出了其他问题。如果有人已经解决了他们系统上的这个问题,并能分享他们的解决方案或为我指明正确的方向,那就太好了。

我已经尝试过

我还尝试将以下内核参数添加到我的实时内核 grub 菜单项中:

rd.driver.blacklist=nvidia nouveau.modeset=1 nvidia.modeset=0

系统信息

  • 操作系统:Ubuntu 20.04
  • 个人电脑:HP Zbook G5 Studio x360
  • 内存:2x32 GB 三星 M471A4G43MB1-CTD 内存模块 32 GB DDR4 2666 MHz
  • 图形处理器:Nvidia Quadro P1000
  • 中央处理器:英特尔(R) 酷睿(TM) i7-8750H CPU @ 2.20GHz
  • 默认内核:5.8.0-53-通用
  • 实时内核:5.6.19-rt

Grub 菜单项

默认内核

    recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  a17c2e53-dd84-48ff-af5e-bd3042e7d38f
else
  search --no-floppy --fs-uuid --set=root a17c2e53-dd84-48ff-af5e-bd3042e7d38f
fi
echo    'Loading Linux 5.8.0-53-generic ...'
linux   /boot/vmlinuz-5.8.0-53-generic root=UUID=a17c2e53-dd84-48ff-af5e-bd3042e7d38f ro  quiet splash $vt_handoff
echo    'Loading initial ramdisk ...'
initrd  /boot/initrd.img-5.8.0-53-generic

实时内核

    recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  a17c2e53-dd84-48ff-af5e-bd3042e7d38f
else
  search --no-floppy --fs-uuid --set=root a17c2e53-dd84-48ff-af5e-bd3042e7d38f
fi
echo    'Loading Linux 5.6.19-rt12 ...'
linux   /boot/vmlinuz-5.6.19-rt12 root=UUID=a17c2e53-dd84-48ff-af5e-bd3042e7d38f ro  quiet splash $vt_handoff modprobe.blacklist=nvidia systemd.setenv=GPUMOD=nouveau
echo    'Loading initial ramdisk ...'
initrd  /boot/initrd.img-5.6.19-rt12

答案1

在内核命令行上将 nvidia 驱动程序列入黑名单是不够的,您还必须从文件中删除 nouveau 黑名单/lib/modprobe.d/

删除那里的黑名单后,您可以调整 grub 条目,使它们加载所需的驱动程序,并将 modprobe 和 initrd 的其他驱动程序列入黑名单。

要加载 nouveau 驱动程序:

modprobe.blacklist=nvidia systemd.setenv=GPUMOD=nouveau rd.driver.blacklist=nvidia nouveau.modeset=1 nvidia.modeset=0 

要加载 nvidia 驱动程序:

modprobe.blacklist=nouveau systemd.setenv=GPUMOD=nvidia rd.driver.blacklist=nouveau nouveau.modeset=0 nvidia.modeset=1

相关内容