lcd的显像原理:将DDR内存的一部分划分出来作为显存,显存与lcd显示屏幕之间做一个双向的映射,然后用户只需要将需要显示的内容放入显存之中,然后显存中的内容就会刷新到lcd的储存器中进行显示。
显存:在内核之中申请一块内存作为显存,由于内核空间和用户空间,也就是驱动和应用不能直接进行内容的复制,需要借助专门的接口函数copy_to_user和copy_from_user,而这两个函数的效率很慢,所以我们将在内核空间中申请的这块虚拟地址,而这个虚拟地址肯定会对应一块真实的物理地址,然后应用层mmap申请一段内存,进而进行虚拟地址映射,与我们之前显存对应的物理地址绑定,这样应用对于显存进行操作,驱动就可以将其显示在lcd上。
freamebuffer设备:
(1)由于lcd显示设备包括显示器的驱动器,显卡,以及各种不同位数的显示器,所以linux内核虚拟出来一个framebuffer设备向应用层提供一个统一的标准接口的显示设备(一般在/dev/fb0),应用可以使用open、read、write等对设备进行操作。
(2)fb设备是一个字符设备,他的设备框架自己创建了一个类/sys/class/graphic;
对于fb设备的简单操作:
#include <stdio.h>
#include <sys/types.h