上电后KVM界面显示NO SIGNAL,但是通过BMC-ssh切入带内后发现OS已经启动

这个是什么原因呢

  • 可能的根因
  • BMC芯片 内部处理延迟 drm驱动加载问题或者网络(猜测)。
  • 也有可能是BIOS的framebuffer驱动异常,既然是启动了,首先是BIOS的framebuffer驱动要能和BMC芯片进行交互,不然BIOS界面都不会显示,如果这一步都没有,那更别说到OS下的DRM驱动了。
  • 建议更新下cpld,BIOS,更换BMC卡,这些底层对于openubmc来说基本不会涉及,bmc的sdk都是以二进制形式,开发也不会涉及到这部分,openubmc和sdk相对来说是解耦的。
  • KVM 原理
  1. 2-D 显卡角色
  • 把 BMC芯片作为 2-D 显卡芯片。
  • 通过 BMC芯片的 DC(Display Control)寄存器完成数据传输。
  1. BIOS 侧操作流程
  • BIOS 加载 Framebuffer 驱动写入 BMC芯片bar里面的显存。
  • 提供启动 LOGO、文本控制台等低分辨率画面。
  1. OS 侧操作流程
  • 移除多于的efifb, 加载 DRM 驱动。
  • OS下 BMC芯片 是作为EP设备,将 BAR 空间映射进内核。
  • 通过 bar上的DC 的控制寄存器做各项初始化。(kms部分)
  • linux应用层底层会调用libdrm向DRM 驱动向 bar空间的可预取的显存bar 写入像素数据。
  1. BMC芯片 (EP 设备侧)视频抓取
  • 行业通用做法:
    • 通过V4L2把framebuffer的封装,抓取 V4L2 视频流 → MJPEG 编码 → 发送到浏览器(也可直连)。
  • openubmc的sdk核心 可能采用自研实现,但逻辑大同小异:
    • 读取 提供给OS端BAR 空间中的 Framebuffer → 捕获视频帧。
2 个赞

显示no signal说明bmc从驱动没拿到图像数据,可以先在os下确认有没有和bmc发生建链,pcie没建链的话kvm就不会有图像;然后可以近端VGA口接个显示屏,看有没有图像数据,也没有的话就让硬件排查下吧