linux2.4与2.6内核中struct fb_ops区别

嵌入式技术

1368人已加入

描述


在2.6的内核中这个结构体已经改变,所以原来用于2.4内核的framebruffer驱动已经不再适用。

2.4中的fb_ops

struct fb_ops {
    /* open/release and usage marking */
    struct module *owner;
    int (*fb_open)(struct fb_info *info, int user);
    int (*fb_release)(struct fb_info *info, int user);
    /* get non settable parameters */
    int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con,
        struct fb_info *info);
    /* get settable parameters */
    int (*fb_get_var)(struct fb_var_screeninfo *var, int con,
        struct fb_info *info);  
    /* set settable parameters */
    int (*fb_set_var)(struct fb_var_screeninfo *var, int con,
        struct fb_info *info);  
    /* get colormap */
    int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con,
         struct fb_info *info);
    /* set colormap */
    int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con,
         struct fb_info *info);
    /* pan display (optional) */
    int (*fb_pan_display)(struct fb_var_screeninfo *var, int con,
     struct fb_info *info);
    /* perform fb specific ioctl (optional) */
    int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd,
      unsigned long arg, int con, struct fb_info *info);
    /* perform fb specific mmap */
    int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma);
    /* switch to/from raster image mode */
    int (*fb_rasterimg)(struct fb_info *info, int start);
};

2.6中的fb_ops

struct fb_ops {
 /* open/release and usage marking */
 struct module *owner;
 int (*fb_open)(struct fb_info *info, int user);
 int (*fb_release)(struct fb_info *info, int user);

 /* For framebuffers with strange non linear layouts or that do not
  * work with normal memory mapped access
  */
 ssize_t (*fb_read)(struct file *file, char __user *buf, size_t count, loff_t *ppos);
 ssize_t (*fb_write)(struct file *file, const char __user *buf, size_t count, loff_t *ppos);

 /* checks var and eventually tweaks it to something supported,
  * DO NOT MODIFY PAR */
 int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);

 /* set the video mode according to info->var */
 int (*fb_set_par)(struct fb_info *info);

 /* set color register */
 int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green,
       unsigned blue, unsigned transp, struct fb_info *info);

 /* set color registers in batch */
 int (*fb_setcmap)(struct fb_cmap *cmap, struct fb_info *info);

 /* blank display */
 int (*fb_blank)(int blank, struct fb_info *info);

 /* pan display */
 int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info);

 /* Draws a rectangle */
 void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);
 /* Copy data from area to another */
 void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);
 /* Draws a image to the display */
 void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);

 /* Draws cursor */
 int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);

 /* Rotates the display */
 void (*fb_rotate)(struct fb_info *info, int angle);

 /* wait for blit idle, optional */
 int (*fb_sync)(struct fb_info *info);

 /* perform fb specific ioctl (optional) */
 int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,
   unsigned long arg);

 /* Handle 32bit compat ioctl (optional) */
 int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd,
   unsigned long arg);

 /* perform fb specific mmap */
 int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma);

 /* save current hardware state */
 void (*fb_save_state)(struct fb_info *info);

 /* restore saved state */
 void (*fb_restore_state)(struct fb_info *info);
}

大家比较可以发现这两者的区别还是很大的。我想在2.6的结构中我们可以直接将文件层的操作加入到framebuffer中这样应该会大大简化操作的流程。



打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分