13qt-FrameBuffer的使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于ARM系统的设计与开发
一、FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱 动程序接口。这种接口将显示设备抽象为帧缓冲 区。用户可以将它看成是显示内存的一个映像, 将其映射到进程地址空间之后,就可以直接进行 读写操作,而写操作可以立即反应在屏幕上。 该驱动程序的设备文件一般是 /dev/fb0、/dev/fb1 等等。
了解linux/fb.h中的关于framebuffer的结构体 fb_fix_screeninfo和fb_var_screeninfo中的内容 ioctl(int fb,FBIOGET_FSCREENINFO,&finfo); // fb_fix_screeninfo ioctl(int fb,FBIOGET_VSCREENINFO,&vinfo); // fb_var_screeninfo
在应用程序中,一般通过将 FrameBuffer 设备映射到进程地 址空间的方式使用,比如下面的程序就打开 /dev/fb0 设 备,并通过 mmap 系统调用进行地址映射,随后用 memset 将屏幕清空(这里假设显示模式是 640x320-16 位色模式,线性内存模式)
int fb; unsigned char* fb_mem; fb = open ("/dev/fb0", O_RDWR); fb_mem = mmap (NULL, 640*320*2, PROT_READ|PROT_WRITE,MAP_SHARED,fb,0); memset (fb_mem, 0, 640*320*2);
广州学院
广东科学技术职业学院
基于ARM系统的设计与开发
3、 mmap函数(头文件:sys/mman.h)
• mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset); • start指定记忆体位置,通常都是用NULL。offset指定档案要 在那里开始对映,通常都是用0。 • prot可取如下几个值的或:PROT_READ(可读) , PROT_WRITE (可写), PROT_EXEC (可执行), PROT_NONE(不可访问)。 • flags由以下几个常值指定:MAP_SHARED , MAP_PRIVATE , MAP_FIXED,其中,MAP_SHARED , MAP_PRIVATE必选其一,而MAP_FIXED则不推荐使用。 • 典型用法:ptr=mmap(NULL, len , PROT_READ|PROT_WRITE, MAP_SHARED , fd , 0); 广州学院
广州学院
广东科学技术职业学院
基于ARM系统的设计与开发
1、使用命令控制屏幕
比如,假设现在的显示模式是 640x320-8 位色,使用以下命令: $ dd if=/dev/zero of=/dev/fb0 bs=640 count=320
广州学院
广东科学技术职业学院
基于ARM系统的设计与开发
2、使用应用程序
广州学院
广东科学技术职业学院Biblioteka 基于ARM系统的设计与开发
二、一个在LCD屏上画全蓝或直线的例子 1、打开/dev/fb0设备文件(open) 2、用ioctl操作取得当前显示屏的参数 3、将屏幕缓冲区映射到用户空间(mmap) 4、映射后就可以直接读写屏幕缓冲区,进行绘图和图 片显示 具体参见代码解说
广州学院
广东科学技术职业学院
基于ARM系统的设计与开发
FrameBuffer的使用
1、 、
FrameBuffer的原理 的原理 FrameBuffer直接写屏 直接写屏
2、 、
广州学院
广东科学技术职业学院
基于ARM系统的设计与开发
主要的任务
通过framebuffer直接在LCD全蓝或画出一条直线
广州学院
广东科学技术职业学院
广东科学技术职业学院
基于ARM系统的设计与开发
4、munmap函数
int munmap(void *start, size_t length); start:映射区的开始地址。 length:映射区的长度 与mmap反操作。
广州学院
广东科学技术职业学院
基于ARM系统的设计与开发
5、显示屏信息的读取
相关文档
最新文档