本文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
作者:yuweixian4230@163.com
博客:yuweixian4230.blog.chinaunix.net 通过学习,加深对framebuffer的了解,现在记录下 对 framebuff 的了解 认识
framebuffer:
1. framebuffer驱动程序的功能是什么??
1.1 在内存中分配一段内存,当做显存使用
1.2 对LCD 进行配置, 这样应用程序中,就可以得到 lcd 信息了
2.流程:
2.1 打开 /dev/fb0
2.2 ioctl操作获取当前显示屏幕的参数,如屏幕分辨率、每个像素点的比特数和偏移。根据屏幕 参数可计算屏幕缓冲区的大小
2.3 将屏幕缓冲区 映射到 用户空间
2.4 直接读/写 屏幕缓冲区,进行绘图和图片显示了
-
-
struct fb_var_screeninfo vinfo;
-
struct fb_fix_screeninfo finfo;
-
-
2.1打开 设备
-
fdfd=open("/dev/fb0",O_RDWR);
-
-
2.2 获取LCD参数
-
ioctl(fdfd,FBIOGET_FSCREENINFO,&finfo); //获取 固定参数
-
- ioctl(fdfd,FBIOGET_VSCREENINFO,&vinfo); //获取可变参数
-
-
screensize=vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8; //计算一帧图片占了 多少字节
2.3 映射 -
-
fbp=(char *)mmap(NULL,screensize,PROT_READ|PROT_WRITE,MAP_SHARED,fdfd,0);
-
-
-
2.4 绘制图片
-
-
for(y=100;y<200;y++)
-
for(x=100;x<300;x++)
-
{
-
location=(x+vinfo.xoffset)*(vinfo.bits_per_pixel/8)+
-
(y+vinfo.yoffset)*finfo.line_length;
-
/*
-
location=x*2+y*vinfo.xres*2;;
-
*/
-
-
int b=(x-100)/6;
-
int g=31-(y-100)/16;
-
int r=10;
-
unsigned short int t=r<<11|g<<5|b;
-
*((unsigned short int *)(fbp+location))=t;
-
}
-
-
阅读(1593) | 评论(0) | 转发(0) |