FrameBuffer 应用

news2024/11/15 18:34:51

1.Frame 是帧的意思, buffer 是缓冲的意思,所以 Framebuffer 就是帧缓冲。

Framebuffer 就是一块内存,里面保存着一帧图像。帧缓冲(framebuffer)是 Linux 系统中的一种显示驱动接口,它将显示设备(譬如 LCD) 进行抽象、 屏蔽了不同显示设备硬件的实现对应用层抽象为一块显示内存(显存),它允许上层应用程序直接对显示缓冲区进行读写操作,而用户不必关心物理显存的位置等具体细节,这些都由Framebuffer 设备驱动来完成。

2.在 Linux 系统中,显示设备被称为 FrameBuffer 设备(帧缓冲设备),所以 LCD 显示屏自然而言就是 FrameBuffer 设备

FrameBuffer 设备对应的设备文件为/dev/fbX(X 为数字, 0、 1、 2、 3 等), Linux下可支持多个 FrameBuffer 设备,最多可达 32 个,分别为/dev/fb0 到/dev/fb31, 开发板出厂系统中, /dev/fb0设备节点便是 LCD 屏

3.在应用程序中,操作/dev/fbX 的一般步骤如下:

①、首先打开/dev/fbX 设备文件。

②、 使用 ioctl()函数获取到当前显示设备的参数信息,譬如屏幕的分辨率大小、像素格式,根据屏幕参数计算显示缓冲区的大小。

③、通过存储映射 I/O 方式将屏幕的显示缓冲区映射到用户空间(mmap)。

④、映射成功后就可以直接读写屏幕的显示缓冲区,进行绘图或图片显示等操作了。

⑤、完成显示后, 调用 munmap()取消映射、并调用 close()关闭设备文件。

4.使用 ioctl()函数获取 LCD 的可变参数信息和固定参数信息

5.使用 mmap()将显示缓冲区映射到用户空间

数据量是比较庞大的, 使用普通 I/O 方式必然导致效率低下,所以才会采用存储映射I/O 方式。

6.具体代码的实现各位读者自己去看, 非常简单,来看下 main()中做了哪些事情:

1)首先调用 open()打开 LCD 设备文件得到文件描述符 fd;

2)接着使用 ioctl 函数获取 LCD 的可变参数信息和固定参数信息,通过得到的信息计算 LCD 显存大

小、得到 LCD 屏幕的分辨率,I.MX6U 开发板出厂系统将 LCD 实现为一个 RGB888 显示设备,所以程序中自定义的 4 个函数在操作 LCD 像素点时、都是以 RGB888的格式写入颜色值。

3)接着使用 mmap 建立映射;

4)映射成功之后就可以在应用层直接操作 LCD 显存了,调用自定义的函数在 LCD 上画线、画矩形、画方块;

5)操作完成之后,调用 munmap 取消映射,调用 close 关闭 LCD 设备文件,退出程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术写作指南。 坚持不下去,怎么办?(文末附视频)

“坚持不下去,怎么办?”这是很多人会遇到的问题,不仅仅是技术写作,任何需要耗费额外精气神的事情都无法长期坚持,例如运动健身、专业学习等。 这里分享一点自己的经验与看法,希望可以对大家的学习有所帮助…

Y9000P Ubuntu/Windows 双系统安装

一:配置介绍 Y9000P默认系统Win11,系统盘500G,从盘2T,内存32G,显卡3060 二:Windows系统分盘 系统盘(磁盘1)建议通过压缩卷分出300M作为Ubuntu的引导分区。 从盘(磁盘2…

23种设计模式(十一)——生成器模式【对象创建】

文章目录 意图什么时候使用生成器真实世界类比生成器模式的实现生成器模式的优缺点亦称:建造者模式、Builder 意图 生成器模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 换成大白话理解就是:一个复杂的对象,它的创建过程和使用过程要…

云网络VPC核心知识总结

云网络VPC核心知识总结

【OpenCV】 Octave | 角点检测 | SIFT/SURF算法

Ⅰ. 图像特征提取与描述 0x00 角点特征 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片,然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序,那计算机就也会玩拼图游戏了。 在拼图时&#xff0c…

没工作在家做什么赚钱?先从开展副业开始

新的一年即将开始,很多人对未来的工作,生活充满了期待。但是还有很多朋友处在失业状态当中,随着疫情的放开,人们的生活回归正常,于是便想着出去赚钱养家。对于没工作的朋友,我的建议是先从开展副业开始&…

Dubbo SPI实战

Dubbo SPI实战 1. SPI 概述 在具体分析之前还是先了解下 SPI 是什么? 首先它其实是 Service provider interface 的简写,翻译成中文就是服务提供发现接口。 不过这里不要被这个名词搞混了,这里的服务发现和我们常听到的微服务中的服务发现…

Spring笔记【JavaEE】

Spring 核⼼ Spring 是包含了众多⼯具⽅法的 IoC 容器。 什么是容器 我们之前 接触的容器有哪些? List/Map-> 数据存储容器Tomcat->Web容器 什么是Ioc IoC Inversion of Control 翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控…

第三方控价公司,怎么选才靠谱

第三方控价公司,可以帮我们解决渠道问题,分析管理经销队伍,为我们提供宝贵的商业情报。但是市场上第三方控价公司不止一家,随便一搜,就出来一串,业务与服务方面难免良莠不齐。如何从中挑选合格的服务商&…

【甄选靶场】Vulnhub百个项目渗透——项目五十三:Inclusiveness(更改ua,lfi->rce)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目五十三:Inclusiveness(更改ua,lfi->rce) 🔥系列专栏:Vulnhub百个项目渗透 🎉欢迎关注🔎点赞👍收藏⭐️留言&#x…

springBoot工程入门

文章目录基本知识快速搭建springBoot工程起步依赖原理分析spring-boot-starter-parentspring-boot-starter-web配置yaml数据格式读取配置profileprofile配置方式多profile文件方式yml多文档方式profile激活方式内部配置加载顺序外部配置加载顺序整合其他框架Junitredismybatiss…

6.Java运算符

文章目录前言一、运算符和表达式二、运算符(1)算术运算符a.数字相加b.字符串相加c.字符相加(2)自增自减运算符应用场景:(3)赋值运算符(4)关系运算符(5)逻辑运算符应用场景:短路逻辑运算符练习(6)三元运算符练习1练习二(7)运算符优先级总结前言 一、运算符和表达式 二、运算符 …

Elasticsearch的Mapping使用分析(es7官方文档解读)

目录mapping是什么动态mapping默认动态mapping设计自己的mapping检测模板运行时字段dynamic参考ES 7版本官方文档 官方7.17文档 挑了一些我觉得重要的点总结 如有谬误,欢迎指正 mapping是什么 在ES里创建一个索引 PUT demo_index {"mappings": {"…

三十二、Kubernetes中Service详解、实例第二篇

1、概述 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资源&…

HTML常见转义字符

HTML中常见的转义字符 其他一些常用的字符实体: 链接 http://www.w3chtml.com/html/character.html

PID优化系列之给定值斜坡函数(PLC完整代码+Simulink仿真测试)

很多变频器里的工艺PID,都有"PID给定值变化时间"这个参数,这里的给定值变化时间我们可以利用斜坡函数实现,当然也可以利用PT1 低通滤波器对给定值进行平滑。给定值缓慢变化在很多闭环控制系统里很重要,比如收放卷在初始建张阶段目标值不建议突变容易将卷材拉断(…

初识 Django(Python WEB 框架)

初识 Django(Python WEB 框架)参考描述优劣 Django(部分)优势功能完备,开箱即用开发效率高Admin 管理后台安全ORM可扩展劣势性能模板过渡封装获取长期支持版(Long Time Support,LTS)…

基于Java+SpringBoot+Vue企业资源规划系统设计与实现

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及…

开源项目介绍

文章目录简介经验casdoorkeycloaklatexopenMP简介 不经常见的开源项目,第一次接触。 经验 如果是已经开源的软件,使用起来非常的平稳,问题也少。原因是已经经过了多年的历练,已经稳当下来,该发现的问题已经解决的差…

unplugin-vue-components 不能识别组件的自动导入的类型 (pnpm)

引言 unplugin-vue-components 是一款能帮助组件自动导入的库&#xff0c;简单点的说&#xff0c;你不需要使用import xx from xxx.vue 这行语句也能实现导入的效果。 <script setup lang"ts"> import ScreenAdpter from compontents/ScreenAdpter/index.vue i…