帧缓冲设备
1.1帧缓冲设备:
帧缓冲(framebuffer)是 Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由帧缓冲设备驱动本身来完成。对于帧缓冲设备而言,只要在显示缓冲区中与显示点对应的区域写入颜色值,对应的颜色会自动在屏幕上显示。
1.2 Linux帧缓冲相关数据结构与函数
fb_info结构体
帧缓冲设备最关键的一个数据结构体是fb_info结构体(为了便于记忆,我们把它简称为“FBI”),
FBI中包括了关于帧缓冲设备属性和操作的完整描述。
FBI 中记录了帧缓冲设备的全部信息,包括设备的设置参数、状态以及操作函数指针。每一个帧缓冲设备都必须对应一个 FBI。
1 struct fb_info { 2 int node; 3 int flags; 4 struct mutex lock; /* 用于 open/release/ioctl 的锁 */ 5 struct fb_var_screeninfo var; /*可变参数 */ 6 struct fb_fix_screeninfo fix; /*固定参数 */ 7 struct fb_monspecs monspecs; /*显示器标准 */ 8 struct work_struct queue; /* 帧缓冲事件队列 */ 9 struct fb_pixmap pixmap; /* 图像硬件 mapper */ 10 struct fb_pixmap sprite; /* 光标硬件 mapper */ 11 struct fb_cmap cmap; /* 目前的颜色表*/ 12 struct list_head modelist; 13 struct fb_videomode *mode; /* 目前的 video 模式 */ 14 15 #ifdef CONFIG_FB_BACKLIGHT 16 /* 对应的背光设备 */ 17 struct backlight_device *bl_dev; 18 /* 背光调整 */ 19 struct mutex bl_mutex; 20 u8 bl_curve[FB_BACKLIGHT_LEVELS]; 21 #endif 22 #ifdef CONFIG_FB_DEFERRED_IO 23 struct delayed_work deferred_work; 24 struct fb_deferred_io *fbdefio; 25 #endif 26 struct fb_ops *fbops; /* fb_ops,帧缓冲操作 */ 27 struct device *device; /* 父设备 */ 28 struct device *dev; /* fb 设备 */ 29 int class_flag; /* 私有 sysfs 标志 */ 30 #ifdef CONFIG_FB_TILEBLITTING 31 struct fb_tile_ops *tileops; /* 图块 Blitting */ 32 #endif 33 char _ _iomem *screen_base; /* 虚拟基地址 */ 34 unsigned long screen_size; /* ioremapped 的虚拟内存大小 */ 35 void *pseudo_palette; /* 伪 16 色颜色表 */ 36 #define FBINFO_STATE_RUNNING 0 37 #define FBINFO_STATE_SUSPENDED 1 38 u32 state; /* 硬件状态,如挂起 */ 39 void *fbcon_par; 40 void *par; 41 };