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 | native DRM/GPU probe |
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-framebuffer或efi-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。
正在加载留言…