浅谈Linux的Framebuffer(1):

      笔者最近在尝试在Linux3.4.2版本内核下编写程序在液晶显示屏上显示信息,在使用mmap读取显存地址以及读写数据时接触了Linux的framebuffer(帧缓冲),现对framebuffer的编程做一点总结与解析。

      1,framebuffer简介

       framebuffer本意是帧缓冲,它是指显示设备里的显存。显存里保存是像素的RGB数据。一个显存的大小等于屏幕宽度*屏幕高度*每像素字节数。我们通过程序修改显存的像素值,就形成各种显示效果.再由硬件将显存数据送到显示模块输出。显存一般是由SDRAM一段连续的空间来充当。framebuffer是一种出现在内核2.2.xx版本后的一种驱动程序接口,由于Linux工作在保护模式下,且每个应用程序都有自己的虚拟地址空间,所以不能在应用程序中直接访问物理缓冲区的地址,所以为了能通过应用程序读写framebuffer进而显示图像内容,我们可以在用户层使用void *mmap()函数将framebuffer的一段物理地址映射到用户空间的虚拟地址上,用户就可以通过这段虚拟地址访问framebuffer,实现屏幕的绘图。

       2,设备的主要操作

       framebuffer对应的设备文件通常是/dev/fb0,我们读写这个设备相当于读写framebuffer,读写framebuffer采用读写mmap()函数的方式来实现对framebuffer的读写,除了读写之外,我们还需用到ioctl()函数获取显示设备信息,如屏幕大小与分辨率等参数,ioctl()的操作由底层驱动完成。

       3,framebuffer常用数据结构:

  • 1. fb_info结构体:帧缓冲设备中最重要的数据结构体,包括了帧缓冲设备属性和操作的完整性属性。
  • 2. fb_ops结构体:fb_info结构体的成员变量,fb_ops为指向底层操作的函数的指针。
  • 3.fb_var_screen和fb_fix_screen结构体:fb_var_screen记录用户可以修改的显示控制器参数,fb_fix_screen记录用户不能修改的显示控制器参数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值