//struct fb_info
struct
fb_info {
int
node;
int
flags;
struct
mutex lock;
/* Lock for open/release/ioctl funcs */
struct
mutex mm_lock;
/* Lock for fb_mmap and smem_* fields */
struct
fb_var_screeninfo
var
;
/* 可变参数 */
struct
fb_fix_screeninfo fix;
/* 固定参数 */
struct
fb_monspecs monspecs;
/* 显示器标准特性 */
struct
work_struct queue;
/* Framebuffer event queue */
struct
fb_pixmap pixmap;
/* 图像硬件mapper */
struct
fb_pixmap sprite;
/* 光标硬件 mapper */
struct
fb_cmap cmap;
/* 颜色表 */
struct
list_head modelist;
/* mode list */
struct
fb_videomode *mode;
/* video模式 */
#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 */
int
class_flag;
/* private sysfs flags */
char
__iomem *screen_base;
/* 显存虚拟基地址 */
unsigned
long
screen_size;
/* 显存大小 */
void
*pseudo_palette;
/* 伪16色颜色表*/
#define FBINFO_STATE_RUNNING 0
#define FBINFO_STATE_SUSPENDED 1
u32 state;
/* Hardware state i.e suspend */
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;
//每个像素位数
__u32 grayscale;
struct
fb_bitfield red;
//颜色位域
struct
fb_bitfield green;
struct
fb_bitfield blue;
struct
fb_bitfield transp;
//透明度
__u32 nonstd; __u32 activate; __u32 height;
/* height of picture in mm */
__u32 width;
/* width of picture in mm */
__u32 accel_flags;
/* (OBSOLETE) see fb_info.flags */
//时序
/* Timing: All values in pixclocks, except pixclock (of course) */
__u32 pixclock;
/* pixel clock in ps (皮秒) */
__u32 left_margin;
/* time from sync to picture */
__u32 right_margin;
/* time from picture to sync */
__u32 upper_margin;
/* time from sync to picture */
__u32 lower_margin; __u32 hsync_len;
/* length of horizontal sync */
__u32 vsync_len;
/* length of vertical sync */
__u32 sync;
/* see FB_SYNC_* */
__u32 vmode;
/* see FB_VMODE_* */
__u32 rotate;
/* angle we rotate counter clockwise */
__u32 reserved[
5
];
/* Reserved for future compatibility */
};
struct
fb_fix_screeninfo {
char
id[
16
];
/* identification string eg "TT Builtin" */
unsigned
long
smem_start;
/* Start of frame buffer mem */
/* (physical address) */
__u32 smem_len;
/* Length of frame buffer mem */
__u32 type;
/* see FB_TYPE_* */
__u32 type_aux;
/* Interleave for interleaved Planes */
__u32 visual;
/* see FB_VISUAL_* */
//色彩模式,真彩色,伪彩色
__u16 xpanstep;
/* zero if no hardware panning */
__u16 ypanstep;
/* zero if no hardware panning */
__u16 ywrapstep;
/* zero if no hardware ywrap */
__u32 line_length;
/* length of a line in bytes */
unsigned
long
mmio_start;
/* Start of Memory Mapped I/O */
/* (physical address) */
__u32 mmio_len;
/* Length of Memory Mapped I/O */
__u32 accel;
/* Indicate to driver which */
/* specific chip/card we have */
__u16 reserved[
3
];
/* Reserved for future compatibility */
};
//颜色位域
struct
fb_bitfield { __u32 offset;
/* beginning of bitfield */
__u32 length;
/* length of bitfield */
__u32 msb_right;
/* != 0 : Most significant bit is */
/* right */
};
//像素深度:BPP
// 像素深度是指存储每个像素所用的位数,它也是用来度量图像的分辨率。
//像素深度决定彩色图像的每个像素可能有的颜色数,或者确定灰度图像
//的每个像素可能有的灰度级数,例如,一幅彩色图像的每个像素用R,
//就说像素的深度为24,每个像素可以是16 777 216(2的24次方)种颜
//色中的一种。在这个意义上,往往把像素深度说成是图像深度。
//表示一个像素的位数越多,它能表达的颜色数目就越多,而它的深度就越深。
//调色板原理<详见调色板原理>:
// 在计算机图像技术中,一个像素的颜色是由它的R,G,B分量表示的,
//每个分量又经过量化,一个像素总的量化级数就是这个显示系统的颜色
//深度。量化级数越高,可以表示的颜色也就越多,最终的图像也就越逼真。
//当量化级数达到16位以上时,被称为真彩色。但是,量化级数越高,就需
//要越高的数据宽度,给处理器带来的负担也就越重;量化级数在8位以下时,
//所能表达的颜色又太少,不能够满足用户特定的需求。
// 为了解决这个问题,可以采取调色板技术。所谓调色板,就是在低颜色
//深度的模式下,在有限的像素值与RGB颜色之间建立对应关系的一个线性表。
//比如说,从所有的16位彩色中抽取一定数量的颜色,编制索引。当需要使用
//某种彩色时,不需要对这种颜色的RGB分量进行描述,只需要引用它的索引号,
//就可以使用户选取自己需要的颜色。索引号的编码长度远远小于RGB分量的
//编码长度,因此在彩色显示的同时,也大大减轻了系统的负担。
// 以256色调色板为例,调色板中存储256种颜色的RGB值,每种颜色的RGB值
//是16位。用这256种颜色编制索引时,从00H~FFH只需要8位数据宽度,而每个
//索引所对应的颜色却是16位宽度的颜色信息。在一些对色彩种类要求不高的场合,
//如仪表终端、信息终端等,调色板技术便巧妙地解决了数据宽度与颜色深度之间
//的矛盾。
LCD(二) linux驱动分析
最新推荐文章于 2024-02-26 15:14:53 发布