华为 RH2288 V3 安装 Ubuntu 24.04 后黑屏:Tesla V100 与 simpledrm 冲突的绕开方案

环境与故障现象

硬件

  • 服务器:华为 RH2288 V3
  • 板载显卡:Hi171x BMC 芯片(负责物理显示输出)
  • 计算卡:NVIDIA Tesla V100 SXM2 16 GB(无显示输出)

软件

  • 操作系统:全新安装 Ubuntu 24.04.4 desktop amd64
  • 安装时未勾选“Install third-party software for graphics and Wi-Fi”
  • 内核:6.17.0-22-generic(Ubuntu 24.04 的 HWE 内核,注意该版本号为 Ubuntu 打包版本,非主线 Linux 版本)
  • NVIDIA 驱动:nvidia-driver-535-server(安装后自动拉入 nvidia_drm 等显示模块)

现象
安装 NVIDIA 驱动并重启后,系统黑屏,仅左上角闪烁下划线光标。可切换至命令行(Ctrl+Alt+F2),网络和 SSH 正常。


排查要点

ls -la /dev/dri/                 # 只有 card1(来自 nvidia_drm),没有 card0
lsmod | grep nvidia              # nvidia_drm 和 nvidia_modeset 已加载
grep -i hibmc /boot/config-$(uname -r)
# 输出:# CONFIG_DRM_HISI_HIBMC is not set
  • 板载 BMC 显卡驱动 hibmc_drm 被 Ubuntu 内核禁用(编译选项未开启),因此无法使用。
  • 内核自带的 simpledrm 已接管 BMP 帧缓冲,生成 /dev/fb0,并应提供 card0
  • 但由于 nvidia_drm 加载后,DRM 主设备 minor 号被抢占,导致 card0 节点消失。
  • GDM 不断报错:maximum number of X display failures reached

根本原因:nvidia_drm 显示模块与 simpledrm 冲突,而 Tesla V100 无物理输出,导致图形子系统彻底瘫痪。


解决方案(两步走)

第一步:现场恢复图形(无需重启)

# 注意卸载顺序:先卸载依赖模块 nvidia_modeset,再卸载 nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_drm

# 让 udev 为 simpledrm 创建设备节点
sudo udevadm trigger --subsystem-match=drm
sudo udevadm settle

# 验证 card0 出现
ls -la /dev/dri/          # 此时应出现 card0

# 启动图形界面
sudo systemctl restart gdm3

第二步:永久防止冲突

使用 install 指令彻底阻止 nvidia_drmnvidia_modeset 加载(blacklist 无效,因为它阻止不了依赖加载)。

sudo tee /etc/modprobe.d/disable-nvidia-drm.conf > /dev/null << 'EOF'
install nvidia_drm /bin/false
install nvidia_modeset /bin/false
EOF

必须更新 initramfs,使配置在启动早期生效(针对所有已安装内核):

sudo update-initramfs -u -k all

重启系统:

sudo reboot

为什么不用 GRUB 内核参数?
你最初可能尝试了 modprobe.blacklist=nvidia_drm,nvidia_modeset,但在 install /bin/false 存在时这是多余的,而且内核参数黑名单与 install 拦截机制可能冲突,建议删除 /etc/default/grub 中的该参数,仅保留 install 拦截即可。


验证结果

重启后直接进入图形桌面:

$ ls -la /dev/dri/
total 0
drwxr-xr-x   3 root root      80 Apr 30 19:18 .
drwxr-xr-x  20 root root    4400 Apr 30 19:18 ..
drwxr-xr-x   2 root root      60 Apr 30 19:18 by-path
crw-rw----+  1 root video 226, 0 Apr 30 19:18 card0

$ lsmod | grep nvidia
nvidia_uvm           1769472  0
nvidia              56930304  10 nvidia_uvm

$ nvidia-smi
# 正常显示 Tesla V100,驱动 535.288.01,CUDA 12.2
  • card0 存在,card1 消失
  • NVIDIA 核心模块加载,显示模块被彻底禁止
  • 图形与计算各司其职,再无冲突

经验与副作用说明

  1. blacklist 不够用,install /bin/false 才是悬崖
    blacklist 无法阻止模块被依赖拉入,只有 install 能彻底拦截。

  2. RMmod 顺序很重要
    必须按 nvidia_modeset → nvidia_drm 的顺序卸载,否则会报错。

  3. update-initramfs -u -k all 是关键
    配置文件修改后必须重建所有内核的 initramfs,否则重启依旧加载旧模块。

  4. 副作用提示

    • 禁用 nvidia_drm 后,NVIDIA GPU 将无法用于图形渲染(如 OpenGL 直接显示),但 CUDA 计算任务完全不受影响
    • 如果你需要运行依赖 GPU 图形加速的应用程序(如某些可视化工具),需评估影响。
    • 对于纯粹的服务器计算环境,这是理想的隔离方案。
  5. 为何选择绕开而非启用 hibmc?
    由于 Ubuntu 内核未启用 CONFIG_DRM_HISI_HIBMC,无法使用华为 BMC 专用驱动。但 simpledrm 已能提供稳定的基础显示,因此绕开 NVIDIA 显示模块是最简可行方案。

posted @ 2026-04-30 21:33  凼茗  阅读(235)  评论(0)    收藏  举报