FBDev 用户接口、IOCTL、MMap 与 Sysfs

FBDev 用户接口、IOCTL、MMap 与 Sysfs

1. /dev/fbN

字符设备由fbmem Core统一提供,minor对应registered_fb[N]。File operations转发到具体fb_ops

2. Read/Write

默认fb_sys_read/writefb_read/write按file offset访问framebuffer:

  • 检查screen size和offset;
  • 在I/O memory与system memory间选择copy方法;
  • 处理partial copy和signal;
  • 更新offset。

高性能绘制通常使用mmap,不使用write逐帧复制。

3. MMap

默认或driver fb_mmap把framebuffer/aperture映射给用户。

必须检查:

  • offset和length;
  • smem_len;
  • page alignment;
  • overflow;
  • MMIO register区域是否允许;
  • cache/write-combine属性;
  • device移除与VMA生命周期。

把控制寄存器和显存一起映射给非特权进程风险很高。

4. 常用IOCTL

命令 作用
FBIOGET_VSCREENINFO 获取可变mode
FBIOPUT_VSCREENINFO 设置mode
FBIOGET_FSCREENINFO 获取显存、stride、类型
FBIOGETCMAP/PUTCMAP colormap
FBIOPAN_DISPLAY 改x/y offset
FBIOBLANK blank/power
FBIO_CURSOR cursor(依实现)
vendor ioctl 驱动私有扩展

Compat ioctl必须转换含pointer的结构。

5. Pan/Double Buffer

若virtual resolution大于visible resolution,应用可在同一显存中准备多个buffer,再用PAN切换offset。

Pan不保证vblank同步;驱动需实现等待或提供扩展。

6. Pixel Format

fb_var_screeninfo用bits_per_pixel及RGBA bitfield描述格式。它不同于DRM fourcc,应用不能仅凭bpp推断通道顺序。

7. Sysfs

fbsysfs.c暴露:

  • bits_per_pixel;
  • blank;
  • console rotation;
  • cursor;
  • mode/modes;
  • pan;
  • virtual size;
  • stride;
  • name/state等。

写属性最终仍调用fb_ops并经过合法性检查。

8. Deferred I/O

fb_defio通过page fault/page dirty和delayed work收集修改,定时调用driver callback刷新。

适用于SPI/e-paper/USB等慢速设备,不适合高帧率scanout。

9. Colormap

Truecolor常使用pseudo palette;pseudocolor使用硬件cmap。fb_set_cmap逐entry调用setcolreg,需校验start/len。

10. 权限

能mmap /dev/fbN通常可读当前屏幕并覆盖显示内容。产品应:

  • 限制node group;
  • 不向普通容器透传;
  • 避免映射寄存器;
  • 清除重新分配的display buffer;
  • 防止模式设置影响安全UI。

11. 错误排查

1
2
3
4
ls -l /dev/fb*
cat /sys/class/graphics/fb0/name
fbset -fb /dev/fb0 -i
cat /proc/fb

若由DRM emulation产生,还应检查/sys/class/drm和DRM日志。

文章互动

阅读 --

留言

0 条留言

正在加载留言…