笔记整理—linux驱动开发部分(8)framebuffer类设备

         framebuffer显示设备。

        在应用层直接抽象位向DDR中存放图片。

        在操作系统中,将上图分为两个部分:驱动+应用。

        使用复制的方法效率十分的低,所以有了内存映射方法实现图片的显示。

        framebuffer帧(铺满一个屏幕)(fd)在linux在虚拟出一个设备/dev/fd,是向应用层提供的接口,也是同一接口,是一种直接抽象。

        frambuffer使用方法:①打开设备/dev/fdn;②获取设备信息<linux/fd.h>;③mmp映射(原因是应用层工作在应用层空间,内核工作在内核空间,两块虚拟空间不同,但映射到了同一块物理空间)。多个进程可同时操作同一LCD,无非是谁覆盖谁;④填充framebuffer。

        fb在应用层的使用:

#define FBDEVICE “/dev/fb0”fd = open(FBDEVICE, O_RDWR);//①打开设备
if(fd<0)
{//err
}

        #define FBIOPUT_VSCREENINFO与#define FBIOGET_FSCREENINFO宏是位于linux/fb.h下的宏,其中FBIOPUT_VSCREENINFO是可变的fb信息而FBIOGET_FSCREENINFO是不可变信息。不可变信息:如硬件真实分辨率(分辨率最大值,1080p显示器可支持720p的显示);可变信息:可适分辨率、虚拟分辨率、参考点等。

struct fb_fix_screeninfo finfo = {0};//在<linux/fb.h>查看具体情况struct fb_fix_screeninfo {char id[16];			/* identification string eg "TT Builtin" */unsigned long smem_start;	/* Start of frame buffer mem *//* (physical address) */__u32 smem_len;			/* Length of frame buffer mem */__u32 type;			/* see FB_TYPE_*		*/__u32 type_aux;			/* Interleave for interleaved Planes */__u32 visual;			/* see FB_VISUAL_*		*/ __u16 xpanstep;			/* zero if no hardware panning  */__u16 ypanstep;			/* zero if no hardware panning  */__u16 ywrapstep;		/* zero if no hardware ywrap    */__u32 line_length;		/* length of a line in bytes    */unsigned long mmio_start;	/* Start of Memory Mapped I/O   *//* (physical address) */__u32 mmio_len;			/* Length of Memory Mapped I/O  */__u32 accel;			/* Indicate to driver which	*//*  specific chip/card we have	*/__u16 reserved[3];		/* Reserved for future compatibility */
};//具体情况ret = ioctl(fd, FBIOGET_FSCREENINFO, &finfo);//获取设备信息(不可变)
if(ret<0)
{//err
}

        fb大小是屏幕的一倍,用于做双缓冲(乒乓结构)。

        smem_len(字节)=虚拟分辨率(x*y)*bpp(32/8) <=色彩位(aRGB)。

unsigned int *pfb = NULL;
unsigned long smem_len= vinfo.xres_virtual * vinfo.yres_virtual * vinfo.bits_per_pixel / 8;pfb = mmap(NULL, smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
//NULL 自分配地址(应用层)
//smem_len长度
//PROT_READ | PROT_WRITE可读可写
//MAP_SHARED非排它
//0 偏移量if (NULL == pfb)
{//err
}void draw_back(unsigned int width, unsigned int height, unsigned int color)//纯色填充
{unsigned int x, y;for (y=0; y<height; y++){for (x=0; x<width; x++){*(pfb + y * WIDTH + x) = color;}}
}

        draw_back(WIDTH, HEIGHT, 0xffffffff);//白

        在对vinfo进行修改后,使用ioctl写回:

ret=ioctl(fd,FBIOGET_VSCREENINFO,&vinfo);

        可视分辨率只能在驱动中修改。

        先介绍到这吧,下一章介绍framebuffer框架与fb驱动相关。

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

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

相关文章

智慧测绘数字化管理平台建设方案

随着信息技术的飞速发展&#xff0c;测绘地理信息与遥感专业正经历着一场革命性的变革。智慧测绘数字化管理平台的建设&#xff0c;不仅能够提高测绘数据的准确性和实时性&#xff0c;还能为城市规划、环境保护、灾害预防等领域提供强有力的数据支持。本文将探讨智慧测绘数字化…

conda的作用

conda是一个开源的包和环境管理系统&#xff0c;用于安装、管理和切换不同版本的软件包及其依赖项。它不仅支持Python&#xff0c;还适用于R、Ruby等多种编程语言。以下是详细介绍&#xff1a; 多语言支持&#xff1a;conda支持多种编程语言&#xff0c;包括但不限于Python、R、…

测试平台常见前端问题-建议收藏备忘

接下来在使用Element UI开发测试平台前端的过程中&#xff0c;难免会碰到各式各样的问题&#xff0c;因此今天我们主要整理了以下几个常见的问题和解决方案&#xff0c;方便各位能轻松玩转测试平台前端&#xff1a; Element UI更换主题颜色 拉取github资源报错问题解决 nvm管…

NC313 两个数组的交集

NC313 两个数组的交集 添加链接描述 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param nums1 int整型ArrayList * param nums2 int整型ArrayList * return int整型A…

[C++刷题] 基础小知识点(4) abs() exp() 和 输入验证

分析题目, 大多数都是常规操作, 较为特殊的有: 程序需有一定的容错性, 当用户输入非法字符时, 提示用户重新输入。绝对值的实现e^x的实现 首先是 第一点 这里通过cin.fail()流判断是否合法 cin.fail()来判断当前的输入的类型和预期的是否相同&#xff0c;如不同cin.fail()返回…

【大数据学习 | HBASE】hbase的整体架构

hbase的region存储原理图 首先我们看到hbase的组成分为两个大的部分&#xff0c;分别是hmaster和hregionserver&#xff0c;主节点用于协调数据&#xff0c;regionserver用于真正的去管理表&#xff0c;其中regionserver存在多个&#xff0c;他们共同协调管理全有的表&#xff…

民间故事悬疑恐怖故事图片素材哪里找|巨日禄AI|短视频|自媒体

民间故事是中华文化中不可或缺的一部分。近一年制作与分享民间故事短视频深受创作者喜欢&#xff0c;并且这类故事对于普通民众粘性很高&#xff0c;通常点赞评论都很高。对于这类民间故事、中国传统故事、悬疑恐怖故事的文案创作借助短视频平台的高赞文案选题以及大语言模型的…

如何将VMware ESXi中的虚拟机迁移到Workstation

我们前面介绍了如何将VMware workstation中的虚拟机迁移到ESXi中&#xff08;将OpenWrt 23.05.3部署到VMware ESXi&#xff09;&#xff0c;那怎么将ESXi中的虚拟机迁移到workstation中呢&#xff1f; 首先&#xff0c;我们回顾一下&#xff0c;在将workstation中的虚拟机迁移到…

Linux操作系统开机引导

linux操作系统的开机引导的过程 linux操作系统开机流程图 1、开机自检&#xff1a;根据bios的设置&#xff0c;对cpu、内存、显卡、键盘等设备进行初步检测&#xff0c;如果以上检测设备正常工作&#xff0c;系统会把控制权移交到硬盘 总结&#xff1a;检测包含系统启动操作系…

微信小程序开发,诗词鉴赏app(一)

微信小程序开发&#xff0c;诗词鉴赏app&#xff08;一&#xff09;&#xff1a; https://blog.csdn.net/jky_yihuangxing/article/details/143501681微信小程序开发&#xff0c;诗词鉴赏app&#xff0c;诗词推荐实现&#xff08;二&#xff09;:https://blog.csdn.net/jky_yih…

阅读笔记 Contemporary strategy analysis Chapter 15

来源&#xff1a;Robert M. Grant - Contemporary strategy analysis (2018) Chapter 15 Current Trends in Strategic Management Ⅰ Introduction 2018年&#xff0c;商业世界正受到不可预测的力量重塑&#xff0c;包括人工智能的广泛应用、民族主义兴起、国际机构的衰退以…

想唱就唱 2.15.63| 电视免VIP唱K软件,支持手机点歌

想唱就唱是一款实用性强的K歌软件&#xff0c;支持歌曲搜索、歌手搜索及排行榜。软件支持歌曲下载、点歌、插队&#xff0c;还支持手机扫码点歌&#xff0c;功能与KTV软件一致&#xff0c;让用户在家也能享受KTV体验。首次加载较慢&#xff0c;因采用先下载后播放方式。会员版已…

【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方

没想到大家这篇文章呼声还挺高 这篇文章是对它的详细实现&#xff0c;建议在阅读本篇之前&#xff0c;先浏览一下前面的文章&#xff0c;以便更好地理解和掌握内容。 这种老派的假反射技术&#xff0c;适合用于移动端或对反射效果的速度和清晰度有较高要求的场合。该技术通过一…

简单的ATM提款机案例

要求&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title></head><body></body> <script>use striclet money100//想要money不重置要放循环外while(tr…

linux perf 环境部署和基本测试(基于Ubuntu20.04)

1,linux 安装perf sudo apt-ge install linux-tools-common sudo apt-get install linux-tools-$(uname -r) linux-tools-generic -y 2 补充安装 sudo apt-get install python3-q-text-as-data 3&#xff0c;perf常用命令 larkubuntu:~$ perf usage: perf [--version] [--hel…

基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 这里实现的是256*256双线性插值到512*512的系统模块 局部放大&#xff1a; 将数据导入到matlab&#xff0c;得到插值效果…

SMBIOS基础

一、INTRODUCTION The System Management BIOS&#xff08;SMBIOS&#xff09;解决了主板和系统供应商如何通过平台固件以标准格式展现其产品信息&#xff0c;这些信息包括CPU/Memory的serial number、manufacture、speed等资料&#xff0c;也有PCIe Devices、USB Device、Red…

网易数据中台实践:高效管理与成本优化的秘密

文章目录 一、数据中台概览二、元数据中心三、数据服务四、全链路数据质量中心五、数据资产管理六、数据中台实施效果 网易通过建立一套统一的数据架构与平台&#xff0c;成功实现了数据的高效管理与应用。剖析网易在互联网产品数据管理工作中的经验与做法&#xff0c;涵盖从数…

蓝桥杯真题——三角回文数(C语言)

问题描述 对于正整数 n, 如果存在正整数 k 使得 n123⋯kk(k1)2n123⋯kk(k1)/2​, 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123⋯36366066123⋯363 。 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数…

Spark SQL大数据分析快速上手-DataFrame应用体验

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 本节主要介绍如何使用DataFrame进行编程。 4.1.1 SparkSession 在旧版本中&#xff0c;Spark SQL提供…