Aperture 与固件帧缓冲移交

Aperture 与固件帧缓冲移交

1. 问题

Boot firmware可能建立simplefb/efifb并占用一段显存。真实GPU driver加载后必须接管同一PCI BAR或physical aperture,否则两个driver会同时写硬件。

2. Aperture Range

Aperture helper记录graphics device占用的physical range和回调。冲突判断基于区间重叠。

3. 注册

Firmware framebuffer在注册时登记aperture。Native graphics driver probe时调用remove conflicting helpers。

4. 接管

1
2
3
4
5
6
7
native DRM/GPU probe
-> determine BAR/VRAM range
-> aperture_remove_conflicting_devices()
-> invoke firmware fb detach
-> unregister fbdev
-> unmap old aperture
-> initialize native hardware

PCI driver可按BAR移除冲突。

5. 为什么必须移除

不移除可能出现:

  • 双driver竞争寄存器;
  • fbcon继续向旧mapping写;
  • memory ownership冲突;
  • suspend/resume恢复错误driver;
  • UAF或黑屏。

6. nomodeset

nomodeset通常禁止native DRM modesetting,让firmware framebuffer继续工作。它适合救援,不代表完整显示能力,可能没有热插拔、加速和多显示器。

7. simplefb

simplefb只使用firmware给定的地址、尺寸、stride和format,不负责重新编程display controller。

因此:

  • firmware必须保持scanout配置;
  • mode固定;
  • clock/power handoff必须稳定;
  • native driver加载后应移除它。

8. DRM fbdev emulation

Native DRM接管后可以再创建新的fbdev兼容节点。用户看到fb0名称/设备可能变化,但底层ownership已切换。

9. RK3588

本树rk3588* DTS没有simple-framebufferefi-framebuffer节点,正常产品由Rockchip DRM/VOP2完成显示。Vendor boot logo主要通过route-*drm-logo reserved memory和rockchip_drm_logo.c接管,不是simplefb aperture handoff。

因此本篇aperture机制对RK3588主要是通用框架知识;只有产品另外引入system framebuffer节点时才成为实际启动路径。

10. 生命周期

Remove callback必须先让fbcon和userspace停止访问,再unmap/release aperture。不能只从列表删除而保留可访问fb_info

11. 调试

检查:

  • boot log中simple-framebuffer和DRM probe顺序;
  • /proc/iomem显存范围;
  • /proc/fb名称变化;
  • aperture conflict日志;
  • nomodeset
  • boot logo消失到KMS首帧之间的时延。

12. 安全

Firmware给出的address/size属于不可信平台描述边界。Driver需防止区间overflow并避免映射系统RAM或其它设备MMIO。

文章互动

阅读 --

留言

0 条留言

正在加载留言…