LCD(二) linux驱动分析

本文详细介绍了Linux内核中的帧缓冲结构fb_info,包括其成员变量的功能说明,如屏幕信息、颜色配置、同步设置等,并解释了像素深度的概念及调色板技术的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//struct fb_infostruct 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_IOstruct delayed_work deferred_work; struct fb_deferred_io *fbdefio;#endifstruct 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" */ unsignedlong 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位宽度的颜色信息。在一些对色彩种类要求不高的场合,//如仪表终端、信息终端等,调色板技术便巧妙地解决了数据宽度与颜色深度之间//的矛盾。
Linux常见驱动源码分析(kernel hacker修炼之道)--李万鹏 李万鹏 IBM Linux Technology Center kernel team 驱动资料清单内容如下: Linux设备模型(中)之上层容器.pdf Linux设备模型(上)之底层模型.pdf Linux驱动修炼之道-驱动中一些常见的宏.pdf Linux驱动修炼之道-内存映射.pdf Linux驱动修炼之道-看门狗框架源码分析.pdf Linux驱动修炼之道-触摸屏驱动之s3c2410_ts源码分析.pdf Linux驱动修炼之道-SPI驱动框架源码分析().pdf Linux驱动修炼之道-SPI驱动框架源码分析().pdf Linux驱动修炼之道-SPI驱动框架源码分析().pdf Linux驱动修炼之道-RTC子系统框架与源码分析.pdf Linux驱动修炼之道-platform.pdf Linux驱动修炼之道-LCD背光与gpio控制.pdf Linux驱动修炼之道-INPUT子系统().pdf Linux驱动修炼之道-INPUT子系统().pdf Linux驱动修炼之道-framebuffer(中).pdf Linux驱动修炼之道-framebuffer(下).pdf Linux驱动修炼之道-framebuffer(上).pdf Linux驱动修炼之道-DMA框架源码分析().pdf Linux驱动修炼之道-DMA框架源码分析().pdf Linux驱动修炼之道-DM9000A网卡驱动框架源码分析().pdf Linux驱动修炼之道-DM9000A网卡驱动框架源码分析().pdf Linux驱动修炼之道-DM9000A网卡驱动框架源码分析().pdf Linux驱动修炼之道-clock框架.pdf Linux驱动修炼之道-ADC驱动.pdf Linux内核访问外设I O资源的方式.pdf LINUX内核USB子系统学习笔记之初识USB.pdf kernel hacker修炼之道之驱动-流水灯.pdf kernel hacker修炼之道之驱动-混杂设备.pdf kernel hacker修炼之道之驱动-按键.pdf kernel hacker修炼之道之PCI subsystem().pdf kernel hacker修炼之道之PCI subsystem().pdf kernel hacker修炼之道之PCI subsystem().pdf kernel hacker修炼之道之PCI subsystem().pdf kernel hacker修炼之道之PCI subsystem().pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值