Framebuffer驱动(1)

1. 介绍

本篇文章是对Framebuffer驱动的一个前言带大家理解什么是from buffer 为什么会有Framebuffer的存在?应用层使用Framebuffer的步骤?

2. 理解Framebuffer

2.1 裸机如何操作LCD?

在这里插入图片描述
由上图可知,要控制LCD的话,主要是分为以上几个部分,SOC(CPU、LCD控制器)、、DDR、LCD驱动模块以及LCD屏。
如果让LCD进行一个内容的显示需要做的事情就是**配置LCD控制器的寄存器使其在DDR里面去专门分配一块内存,我们称之为“显存”,并与LCD之间建立映射关系。然后我们只需将显示的数据扔到这个内存里面,驱动器会把这个显存里面的数据刷到LCD屏上就可以显示了。**所以我们其实不需要关注LCD驱动模块跟LCD屏,只需要关注LCD控制器和DDR内存这部分即可。

2.2 Linux与裸机区别

实现方式: 裸机是一个.C文件实现寄存器初始化,内存初始化、内存映射以及将显示的内容扔到内存中这一系列操作。在Linux中变成了两方面,一方面是进行寄存器初始化以及内存映射的内核部分,另一部分是写什么样数据的应用层部分。
内存管理: Linux这边是需要系统给它分配内存的,裸机是程序员自己知道需要知道用哪个内存。

2.3 OS下操作LCD的难点

大家都明白,在linux中用户空间和内核空间是属于两片不同的存储空间。但是我们实际的数据是存放在内核空间中的。所以那用户空间要访问内核空间数据,一般有两种方式。
方式1:是copy_to_usercopy_from_user。从名字就可以知道,它是需要一个数据拷贝的动作,一拷贝它的这个效率一定会慢。但我们所看的视频它是需要在一秒钟有很多帧的。这样的一个效率可能就没办法达到。
方法2::mmap,直接将用户空间和内核空间之间进行映射。这个时候,我们用户对用户空间的访问其实就相当于对内存空间数据的访问。所以不牵扯到数据的拷贝,效率自然就提升上来了。在这个过程中的话,就需要内核的驱动和应用层来相互作用,实现LCD的显示。这也是Framebuffer的意义。

2.4 什么是Framebuffer?

framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备,它代替的就是实际中的LCD显示屏、显卡以及显示驱动这一部分。并向应用层提供了一个设备节点/dev/fb*用来访问它。
这样的话,应用层就不需要去管LCD的各种参数设置之类的。只需要通过标准的统一的接口,就可以实现自己的目的。
从驱动来看,fb是一个典型的字符设备,而且创建了一个类/sys/class/graphics

3.framebuffer的使用

(1)、设备文件 /dev/fb0(fb后的个数表示有几个显示器)
(2)、获取设备信息 #include <linux/fb.h>应用层需要先获取设备的信息,根据设备信息,然后才能决定需要怎么做。
(3)、mmap映射
(4)、填充framebuffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值