Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177227
  • 博文数量: 37
  • 博客积分: 1110
  • 博客等级: 少尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-29 22:01
文章分类

全部博文(37)

文章存档

2013年(10)

2011年(2)

2010年(25)

我的朋友

分类: 嵌入式

2013-03-19 14:54:08


一. 帧缓冲设备驱动在Linux子系统中的结构如下:
嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解 - BEYOND ME - BEYOND ME


二、主要的数据结构

struct fb_info {
 int node;
 int flags;
 struct fb_var_screeninfo var; /* Current var *//*可变参数*/
 struct fb_fix_screeninfo fix; /* Current fix *//*固定参数*/
 struct fb_monspecs monspecs; /* Current Monitor specs *//*显示器特有的固定信息*/
 struct work_struct queue; /* Framebuffer event queue *//*帧缓冲事件队列*/
 struct fb_pixmap pixmap; /* Image hardware mapper *//*图像硬件mapper*/
 struct fb_pixmap sprite; /* Cursor hardware mapper *//*光标硬件mapper*/
 struct fb_cmap cmap;  /* Current cmap *//*当前的颜色表*/
 struct list_head modelist;      /* mode list *//
 struct fb_videomode *mode; /* current mode */ /*当前的显示模式*/

#ifdef CONFIG_FB_BACKLIGHT
 /* assigned backlight device *//*对应的背光设备*/
 /* set before framebuffer registration,
    remove after unregister */
 struct backlight_device *bl_dev;

 /* Backlight level curve */
 struct mutex bl_curve_mutex; 
 u8 bl_curve[FB_BACKLIGHT_LEVELS];/*背光调整*/

#endif
#ifdef CONFIG_FB_DEFERRED_IO
 struct delayed_work deferred_work;
 struct fb_deferred_io *fbdefio;
#endif

 struct fb_ops *fbops;/*对底层硬件操作的函数指针*/
 struct device *device;  /* This is the parent */
 struct device *dev;  /* This is this fb device */ /*fb设备*/
 int class_flag;                    /* private sysfs flags */
#ifdef CONFIG_FB_TILEBLITTING
 struct fb_tile_ops *tileops;    /* Tile Blitting *//*图块Blitting*/
#endif
 char __iomem *screen_base; /* Virtual address *//*虚拟基地址*/
 unsigned long screen_size; /* Amount of ioremapped VRAM or 0 */ /*LCD IO映射的虚拟内存大小*/
 void *pseudo_palette;  /* Fake palette of 16 colors */  /*伪16色颜色表*/
#define FBINFO_STATE_RUNNING 0
#define FBINFO_STATE_SUSPENDED 1
 u32 state;   /* Hardware state i.e suspend *//*LCD的挂起或恢复状态*/
 void *fbcon_par;                /* fbcon use-only private area */
 /* From here on everything is device dependent */
 void *par; 
};
struct fb_var_screeninfo {
    __u32 xres;                /*可见屏幕一行有多少个像素点*/
    __u32 yres;                /*可见屏幕一列有多少个像素点*/
    __u32 xres_virtual;        /*虚拟屏幕一行有多少个像素点*/        
    __u32 yres_virtual;        /*虚拟屏幕一列有多少个像素点*/
    __u32 xoffset;             /*虚拟到可见屏幕之间的行偏移*/
    __u32 yoffset;             /*虚拟到可见屏幕之间的列偏移*/
    __u32 bits_per_pixel;      /*每个像素的位数即BPP*/
    __u32 grayscale;           /*非0时,指的是灰度*/

    struct fb_bitfield red;    /*fb缓存的R位域*/
    struct fb_bitfield green;  /*fb缓存的G位域*/
    struct fb_bitfield blue;   /*fb缓存的B位域*/
    struct fb_bitfield transp; /*透明度*/    

    __u32 nonstd;              /* != 0 非标准像素格式*/
    __u32 activate;                
    __u32 height;              /*高度*/
    __u32 width;               /*宽度*/
    __u32 accel_flags;    

    /*定时:除了pixclock本身外,其他的都以像素时钟为单位*/
    __u32 pixclock;            /*像素时钟(皮秒)*/
    __u32 left_margin;         /*行切换,从同步到绘图之间的延迟*/
    __u32 right_margin;        /*行切换,从绘图到同步之间的延迟*/
    __u32 upper_margin;        /*帧切换,从同步到绘图之间的延迟*/
    __u32 lower_margin;        /*帧切换,从绘图到同步之间的延迟*/
    __u32 hsync_len;           /*水平同步的长度*/
    __u32 vsync_len;           /*垂直同步的长度*/
    __u32 sync;
    __u32 vmode;
    __u32 rotate;
    __u32 reserved[5];         /*保留*/
};

struct fb_fix_screeninfo {
    char id[16];                /*字符串形式的标示符 */
    unsigned long smem_start;   /*fb缓存的开始位置 */
    __u32 smem_len;             /*fb缓存的长度 */
    __u32 type;                 /*看FB_TYPE_* */
    __u32 type_aux;             /*分界*/
    __u32 visual;               /*看FB_VISUAL_* */
    __u16 xpanstep;             /*如果没有硬件panning就赋值为0 */
    __u16 ypanstep;             /*如果没有硬件panning就赋值为0 */
    __u16 ywrapstep;            /*如果没有硬件ywrap就赋值为0 */
    __u32 line_length;          /*一行的字节数 */
    unsigned long mmio_start;   /*内存映射IO的开始位置*/
    __u32 mmio_len;             /*内存映射IO的长度*/
    __u32 accel;
    __u16 reserved[3];          /*保留*/
};

struct fb_ops {

    struct module *owner;

    
//检查可变参数并进行设置
    int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);

    
//根据设置的值进行更新,使之有效
    int (*fb_set_par)(struct fb_info *info);

    
//设置颜色寄存器
    int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green,
             unsigned blue, unsigned transp, struct fb_info *info);

    
//显示空白
    int (*fb_blank)(int blank, struct fb_info *info);

    
//矩形填充
    void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);

    
//复制数据
    void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);

    
//图形填充
    void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);
};

阅读(1954) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~