嵌入式linux 设置framebuffer设备的屏幕参数,ARM9嵌入式Linux开发-FrameBuff和LCD驱动移植...

FrameBuff

FrameBuffer介绍

FrameBuffer直译就是,帧缓冲。

Frame(帧):所看到的屏幕上的图像,或者在一个窗口中的图像,就叫一帧。

Buffer(缓冲):一段RAM,用来暂存图像数据,这些数据会被直接写入到显示设备。

帧缓冲就相当于图形操作和图像输出中间的一个介质,将程序对图形数据的处理操作反馈到显示输出上。

8fda64709675e0f584fdfee43763c02c.png

LCDC是将系统需要显示的数据经过处理后输出到LCD显示驱动器的液晶显示控制模块 ,在用户初始化配置后,LCDC将自动进行读取数据、缓存数据、处理数据以及输出符合时序要求的控制和数据信号等操作。

FrameBuffer是Linux内核为显示设备提供的一个接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。 帧缓冲设备是字符设备,主设备号为29,次设备号为帧缓冲的个数(最多32个),对应的设备文件一般是 /dev/fb0、/dev/fb1 等等。假设现在的显示模式是1024x768-8 位色,则可以通过如下的命令清空屏幕

dd if=/dev/zero of=/dev/fb0 bs=1024 count=768

如果应用程序需要知道FrameBuffer设备的相关参数,必须通过ioctl()系统调用来完成。最常用的ioctl命令字是下面这两个: FBIOGET_FSCREENINFO:与FrameBuffer有关的固定的信息,比如图形硬件上实际的帧缓存空间的大小、能否硬件加速等信息 FBIOGET_VSCREENINFO:与FrameBuffer有关的可变信息,之所以可变,是因为对同样的图形硬件,可以工作在不同的模式下,简单来讲,一个支持 1024x768x24图形模式的硬件通常也能工作在800x600x16的图形模式下,可变的信息就是指FrameBuffer的长度、宽度以及颜色深度等信息。

a38844772b0a2312a62faec28036bf70.png

Framebuffer中驱动重要数据结构

struct fb_info

驱动最关键的结构体,包含了设备属性和操作的完整描述,包括设备的设置参数、状态以及对底层硬件操作的函数指针。在Linux中,每一个帧缓冲设备都必须对应一个fb_info,fb_info在/linux/fb.h中的定义如下 (只列出重要的一些) :

struct fb_info {

int node;

int flags;

struct fb_var_screeninfo var; /*LCD可变参数结构体*/

struct fb_fix_screeninfo fix; /*LCD固定参数结构体*/

struct fb_monspecs monspecs;  /*LCD显示器标准*/

struct work_struct queue ;     /*帧缓冲事件队列*/

struct fb_pixmap pixmap;      /*图像硬件mapper*/

struct fb_pixmap sprite;      /*光标硬件mapper*/

struct fb_cmap cmap;          /*当前的颜色表*/

struct fb_vi

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值