虚拟帧缓冲驱动

2023-05-16

17.2.2 虚拟帧缓冲驱动

《嵌入式Linux系统开发全程解析》是一本全面介绍嵌入式Linux开发的专著,书中涵盖了程序生成工具、调试工具、引导加载器、Linux系统结构、Linux内核、驱动程序、用户空间编程、用户空间中间件等方面的内容。《嵌入式Linux系统开发全程解析》内容前后照应、贴近实践,且有较强的延伸型,有利于读者建立嵌入式Linux开发系统化的知识结构和技术理念。本节为大家介绍虚拟帧缓冲驱动。

17.2.2  虚拟帧缓冲驱动

虚拟帧缓冲(vfb,Virtual FrameBuffer)驱动程序是一个不基于硬件的驱动程序,它在内存中开辟虚拟显示设备的内存,这可以模拟对显示的操作。

从结构上,vfb和一个真实的显示驱动程序基本相同,但是它实际上并不完成显示的功能,而只提供虚拟显示输出功能。在实际的系统中,vfb通常仅仅用于测试,或者在没有支持FrameBuffer硬件的时候,作为默认的实现。

虚拟帧缓冲驱动的源代码为:drivers/video/vfb.c。

在内核配置的时候,如果选择了虚拟帧缓冲的支持(FB_VIRTUAL),将会自动选择帧缓冲驱动的几个配置宏(填充、区域复制、fb的sys文件系统)。

vfb变化屏幕信息(fb_var_screeninfo)的定义如下所示:


   
  1. static struct fb_var_screeninfo vfb_default __initdata = {  
  2.   .xres        =  640,      .yres          =  480,    // 定义屏幕的大小  
  3.   .xres_virtual    =  640,    .yres_virtual = 480,  
  4.   .bits_per_pixel = 8,  
  5.   .red    =       { 0, 8, 0 },      // 定义RGB888的颜色空间  
  6.      .green  =        { 0, 8, 0 },  
  7.      .blue   =        { 0, 8, 0 },  
  8.      .activate =  FB_ACTIVATE_TEST,  
  9.      .height =    -1,     .width =    -1,  
  10.      .pixclock      = 20000,  
  11.      .left_margin   = 64,     .right_margin = 64,  
  12.      .upper_margin =  32,     .lower_margin = 32,  
  13.      .hsync_len = 64,     .vsync_len =    2,  
  14.      .vmode = FB_VMODE_NONINTERLACED,  
  15. }; 

vfb_default结构的定义表示vfb的屏幕大小为640×480,颜色空间为RGB888,每个像素24个字节。

vfb固定屏幕信息(fb_fix_screeninfo)的定义如下所示:


   
  1. static struct fb_fix_screeninfo vfb_fix __devinitdata = {  
  2.   .id =       "Virtual FB",  
  3.   .type =     FB_TYPE_PACKED_PIXELS,  
  4.   .visual =   FB_VISUAL_PSEUDOCOLOR,  
  5.   .xpanstep = 1,// 虚拟的屏幕可以支持任意的移位操作  
  6.   .ypanstep = 1,  
  7.   .ywrapstep =    1,  
  8.   .accel =    FB_ACCEL_NONE,  
  9. }; 

vfb的FrameBuffer操作由vfb_ops结构表示,内容如下所示:


   
  1. static struct fb_ops vfb_ops = {  
  2.   .fb_read           = fb_sys_read,  
  3.   .fb_write          = fb_sys_write,  
  4.   .fb_check_var        = vfb_check_var,           // vfb的检查参数  
  5.   .fb_set_par      = vfb_set_par,             // vfb的设置参数  
  6.   .fb_setcolreg   = vfb_setcolreg,        // vfb的设置颜色寄存器  
  7.   .fb_pan_display = vfb_pan_display,      // vfb的移动操作  
  8.   .fb_fillrect         = sys_fillrect,  
  9.   .fb_copyarea         = sys_copyarea,  
  10.   .fb_imageblit        = sys_imageblit,  
  11.   .fb_mmap               = vfb_mmap,              // vfb的内存映射操作  
  12. }; 

在vfb_ops结构中的sys_fillrect(填充矩形)、sys_copyarea(复制区域)和sys_imageblit(绘制图像)是FrameBuffer驱动程序中公用的函数,而以vfb_为前缀的几个函数是在vfb驱动中单独实现的。

vfb_pan_display()的实现如下所示:


   
  1. static int vfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)  
  2. {  
  3.   if (var->vmode & FB_VMODE_YWRAP) {  
  4.       if (var->yoffset < 0 
  5.           || var->yoffset >= info->var.yres_virtual || var->xoffset)  
  6.           return -EINVAL;  
  7.   } else {  
  8.       if (var->xoffset + var->xres > info->var.xres_virtual ||  
  9.           var->yoffset + var->yres > info->var.yres_virtual)  
  10.           return -EINVAL;  
  11.   }  
  12.   info->varvar.xoffset = var->xoffset;      // 指定显示的位置  
  13.   info->varvar.yoffset = var->yoffset;  
  14.   if (var->vmode & FB_VMODE_YWRAP)  
  15.       info->var.vmode |= FB_VMODE_YWRAP;  
  16.   else  
  17.       info->var.vmode &= ~FB_VMODE_YWRAP;  
  18.   return 0;  

vfb_pan_display()利用了虚拟缓冲完成显示区域调整的函数。在其中,并不需要完全重写显示区域,只需要将可以显示区域的地址赋值。

提示:在一个实际的硬件系统中,pan功能的实现应当实际显示硬件的寄存器操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

虚拟帧缓冲驱动 的相关文章

  • VScode怎么修改主题色

    VScode底部点击 设置 按钮 xff0c 点击colorTheme 出来的弹框选项中 xff0c 点击选择合适的主题色即可
  • 初学者PID进阶——在线调整参数

    原文地址 xff1a http brettbeauregard com blog 2011 04 improving the beginner e2 80 99s pid tuning changes 问题The Problem 在系统运行
  • 路由器WiFi天线拆机详解-路由器天线原理

    xff08 本文已经同步到公众号 原创文章 xff0c 转载请与作者联系 xff09 1 前言 xff1a 随着无线通信的发展 xff0c WiFi对我们日常生活工作越来越重要 作为WiFi的载体 路由器 xff0c 也是经常出现在生活的各
  • 以机器人为中心的视觉惯性里程计--RVIO

    有没有大佬能用这个代码发布一个 39 nav msgs Odometry 39 message的 34 odom 34 话题 xff0c 下面是代码的github地址 xff0c 和作者的意见 代码地址 https github com r
  • ubuntu的gazebo无法加载模型的解决办法

    最近在CMU exploration的平台上做仿真实验时 xff0c 出现了无法加载模型的错误 ERROR 1657256347 244258655 3 370000000 Updating ModelState model camera
  • 开发板(ubuntu系统)通过串口接收数据,并将数据通过网口转发出去

    测试软件windows下串口助手和cmd下的telnet xff0c ubuntu下的minicom 设置好相应的串口号和端口号 此程序可以正常接收数据 include lt termios h gt include lt unistd h
  • 嵌入式操作系统的内存,你了解多少?

    linux 内存是后台开发人员 xff0c 需要深入了解的计算机资源 合理的使用内存 xff0c 有助于提升机器的性能和稳定性 本文主要介绍 linux 内存组织结构和页面布局 xff0c 内存碎片产生原因和优化算法 xff0c linux
  • RK查看gpu占用率方法

    查看gpu占用率 cat sys devices platform ff9a0000 gpu devfreq ff9a0000 gpu load 0 64 200000000Hz 64 前面的数值表示gpu占用率 xff0c 如果一直为0
  • 对视频50p,50i 还有25p,25i区别的粗劣解释

    对视频50p 50i 还有25p 25i区别的粗劣解释 首先跟你解释p和i的概念 xff0c p是逐行扫描模式 xff0c i是隔行扫描模式 帧速率有以下几种 xff1a 60帧 秒 xff08 实际为59 94帧 秒 xff0c 为方便起
  • 对 makefile 中 .c.o 的理解

    LIBS 61 gao o all LIBS 64 echo 34 final 34 c o gcc o 64 lt echo 34 in c o rule 34 执行 结果 xff1a gcc o gao o gao c in c o r
  • 使用arecord、aplay 实现录音和播放

    Linux应用开发 第八章 ALSA应用开发 腾讯云开发者社区 腾讯云 tencent com period size 指定 period size buffer size 指定 buffer size 259条消息 使用arecord a
  • git 查看某个文件的修改记录

    1 git log filename 可以看到fileName相关的commit记录 2 git log p filename 可以显示每次提交的diff 3 查看某次提交中的某个文件变化 xff0c 可以直接加上fileName git
  • C语言wav格式详解,代码实践

    393条消息 C语言wav格式详解 xff0c 代码实践 c语言写wav文件 白屿林的博客 CSDN博客
  • RT-Thread 命令自启动详解

    408条消息 RT Thread 自动初始化详解 init app export Nameless Y的博客 CSDN博客 在msh c增加如下代码 xff0c 即可实现自启动 static int exec audio sample vo
  • (无人机方向)ros小白学习之路(一)ROS创建节点与编译

    文章目录 前言ROS创建节点与编译创建工作空间 1 创建和初始化 2 编译 3 为新建的工作空间配置系统环境ros功能包的创建1 xff1a 自定义功能包的创建2 xff1a 在github上下载功能包源码 ROS功能包常用指令1 xff1
  • 使用pjsip传输已经编码的视频

    pjsip功能很强 xff0c 做sip rtp语音通话库首选 在2 0之后 xff0c 也支持视频 不过 xff0c 它的视频功能缺省是从视频设备采集 xff0c 然后进行编译 xff0c 再发送出去的 假设 xff0c 我们已经有了视频
  • CentOS7中英文输入法及切换

    安装完CentOS7后如果没有拼音输入法 xff0c 先在输入源里找下有没有 打开设置 gt gt 区域和语言 gt gt 输入源 搜索pinyin就可以找到拼音输入法 xff0c 然后点击添加 回到设置 xff0c 选择键盘 gt gt
  • rtpsession详解

    以下过程仅分析推送视频模式 xff1a 服务器监听rtsp端口号 xff0c 当有客户端连接后 xff0c 会创建RTSPSession xff0c 在客户端请求过程中的announce时 xff0c 会创建RTPSession xff0c
  • gdb调试coredump(使用篇)

    什么是coredump Coredump叫做核心转储 xff0c 它是进程运行时在突然崩溃的那一刻的一个内存快照 操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下 xff0c 会把进程此刻内存 寄存器状态 运行堆栈等信息转储保存在

随机推荐