小结 frambuffer 原理及流程 (五)
本文的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 直接读/写 屏幕缓冲区,进行绘图和图片显示了
2.3 映射
作者: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;
- }
-