linuxfb简单说明

framebuffer简介

Linux framebuffer(/dev/fb)是用来屏蔽图形显示硬件的抽象层。如果不对硬件进行抽象屏蔽,不同硬件显卡,可能需要编写不同的驱动和应用程序。而引入framebuffer进行统一的抽象后,开发人员可以不用关心硬件平台的差异,以统一的方式编写应用层和较高内核层程序。linuxfb提供接口,让用户的应用程序可以直接访问framebuffer(显示缓存区)来实现显示功能,而不用关心framebuffer的具体实现细节。

framebuffer提供了显卡的抽象描述,同时代表了显卡上的显存,往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。用户将framebuffer映射到进程空间后,就可以直接进行读写操作,写操作会直接反映在屏幕显示的画面上。这种方式尤其适用于没有实际物理显存的嵌入式设备。
带GPU硬件的设备,在显示时,图形的旋转、渲染等,大部分由GPU完成。而framebuffer仅仅是一个映射,将用户写入的信息直接显示在屏幕上,所以所以的图形处理,都是在用户层实现、由CPU完成,因而CPU的负担会加重。
在这里插入图片描述

linuxfb设备

在linux内核嵌入式设备,或者linux内核的电脑上,执行ls -l | grep fb可以看到系统中的linuxfb设备。
正在调试嵌入式设备,有3个fb设备,分别为fb0、fb1、fb2:
在这里插入图片描述
装有Ubuntu系统的PC,有1个fb设备,fb0:
在这里插入图片描述
可以看到/dev/fbx设备的属性是crw,字符型设备。主设备号是29,从设备号从0到31,分别对应/dev/fb0到/dev/fb31。

linuxfb驱动

framebuffer属于驱动层,在linux内核源码下,/drivers/video/fbdev/vesafb.c是通用的framebuffer驱动,该目录下还有其他一些显示芯片framebuffer的驱动。

利用linuxfb截屏

在嵌入式开发中,有时想获取屏幕当前显示内容,可以利用指令,简单的从framebuffer中读取当前显示内容:

cat /dev/fb0 > frame.raw
ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt bgr24  -s 320X240 -i frame.raw -f image2 -vcodec png frame.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值