在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中這樣應該會大大簡化操作的流程。
評論
查看更多