分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
如想想对lcd屏进行操作(例如在lcd屏幕上画线,或者显示视频数据),我们就必须得了framebuffer(帧缓冲),网上各种百度,大多都说的很官方,至少很难找到那些让人觉得很生动的描述,让我们这些出入门的菜鸟能好好了解一下。 下面就是我结合老师的指点和论坛上的解释再加上自己的理解写的一些东西。
****************************************************************************************************************************
很多人都会说操纵lcd显示就是操纵framebuffer,表面上来看是这样的。实际上是frambuffer就是linux内核驱动申请的一片内存空间,然后lcd内有一片sram,cpu内部有个lcd控制器,它有个单独的dma用来将frambuffer中的数据拷贝到lcd的sram中去 拷贝到lcd的sram中的数据就会显示在lcd上,
LCD驱动和framebuffer驱动没有必然的联系,它只是驱动LCD正常工作的,比如有信号传过来,那么LCD驱动负责把信号转成显示屏上的内容,至于什么内容,怎么显示,它根本不关心也不知道。
*********************************************************************************************************************************************************************
百度上framebuffer的解释:帧缓冲是Linux为显示设备提供的一个接口,它把一些显示设备描述成一个缓冲区,允许应用程序通过 FrameBuffer定义好的接口访问这些图形设备,从而不用去关心具体的硬件细节。
(经过我的解释,我们是不是可以好一点理解了呢?上面的显示设备就是lcd呀,framebuffer不就是一个临时存放数据的区域)其在文件系统中对应的设备名称为/dev/fb(0,1,2,3....31最大允许32个fb,主设备号是29)
*********************************************************************************************************************************************************************
(下面插上一幅图来更形象的解释)
![](https://i-blog.csdnimg.cn/blog_migrate/5c0e52c8c751827b501d6c3bfe6393a9.png)
我们从上面这幅图看,帧缓冲设备在Linux中也可以看做是一个完整的子系统,大体由fbmem.c和xxxfb.c组成。向上给应用程序提供完善的设备文件操作接口(即对FrameBuffer设备进行read、write、ioctl等操作),接口在Linux提供的fbmem.c文件中实现;向下提供了硬件操作的接口,只是这些接口Linux并没有提供实现,因为这要根据具体的LCD控制器硬件进行设置,所以这就是我们要做的事情了(即xxxfb.c 部分的实现)。
说了这么多,我感觉应该要用一些实例在说说,到底如何在lcd上画线呢?(这个也是老师给我的任务)
****************************************************************************************************************************
#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include <fcntl.h>#include <linux/fb.h>#include <linux/kd.h>#include <sys/mman.h>#include <sys/ioctl.h>#include <sys/time.h>#include <string.h>#include <errno.h>struct fb_var_screeninfo vinfo;struct fb_fix_screeninfo finfo;char *frameBuffer = 0; //打印fb驱动中fix结构信息,注:在fb驱动加载后,fix结构不可被修改。