帧缓冲设备

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 };  
fb_info结构体

相关文章: