linux framebuffer 例子

  昨天做的一个极简单的framebuffer的例子,用来学习怎样操作fb设备。

  这段代码是在picogl的vesafb backend部分的基础上简出来的,所以变量名还保留着。

流程如下:

1 打开framebuffer设备;

2 通过ioctl取得fixed screen information;

3 通过ioctl取得variable screen information;

4 通过mmap映射设备内存到进程空间;

5 写framebuffer;

6 终止。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <fcntl.h>
  5. #include <linux/fb.h>
  6. #include <sys/mman.h>
  7. struct fb_fix_screeninfo FixedInfo;
  8. struct fb_var_screeninfo OrigVarInfo;
  9. static int FrameBufferFD = -1;
  10. void *FrameBuffer = (void *) -1;
  11. void openFBDEV(void) {
  12.     /* open the framebuffer device */
  13.     FrameBufferFD = open("/dev/fb0", O_RDWR);
  14.     if (FrameBufferFD < 0) {
  15.         fprintf(stderr, "Error opening /dev/fb0/n");
  16.         exit(1);
  17.     }
  18.     /* Get the fixed screen info */
  19.     if (ioctl(FrameBufferFD, FBIOGET_FSCREENINFO, &FixedInfo)) {
  20.         fprintf(stderr, "error: ioctl(FBIOGET_FSCREENINFO) failed/n");
  21.         exit(1);
  22.     }
  23.     /* get the variable screen info */
  24.     if (ioctl(FrameBufferFD, FBIOGET_VSCREENINFO, &OrigVarInfo)) {
  25.         fprintf(stderr, "error: ioctl(FBIOGET_VSCREENINFO) failed/n");
  26.         exit(1);
  27.     }
  28.        
  29.     if (FixedInfo.visual != FB_VISUAL_TRUECOLOR && FixedInfo.visual != FB_VISUAL_DIRECTCOLOR) {
  30.         fprintf(stderr, "non-TRUE/DIRECT-COLOR visuals (0x%x) not supported by this demo./n", FixedInfo.visual);
  31.         exit(1);
  32.     }
  33.     /*
  34.      * fbdev says the frame buffer is at offset zero, and the mmio region
  35.      * is immediately after.
  36.      */
  37.     /* mmap the framebuffer into our address space */
  38.     FrameBuffer = (void *) mmap(0, /* start */
  39.         FixedInfo.smem_len, /* bytes */
  40.         PROT_READ | PROT_WRITE, /* prot */
  41.         MAP_SHARED, /* flags */
  42.         FrameBufferFD, /* fd */
  43.         0 /* offset */);
  44.     if (FrameBuffer == (void *) - 1) {
  45.         fprintf(stderr, "error: unable to mmap framebuffer/n");
  46.         exit(1);
  47.     }
  48. }
  49. void closeFBDEV(void) {
  50.     munmap(FrameBuffer, FixedInfo.smem_len);
  51.     close(FrameBufferFD);
  52. }
  53. int main() {
  54.     openFBDEV();
  55.     fprintf(stderr, "openFBDEV finish/n");
  56.     memset(FrameBuffer, 128, FixedInfo.smem_len);
  57.     sleep(5);
  58.     closeFBDEV();
  59.     fprintf(stderr, "closeFBDEV finish/n");
  60.     return 0;
  61. }

 

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

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

相关文章

加载数据时,页面显示正在加载的动画,支持移动端

最近在使用ionic3做一个移动端APP&#xff0c;在用户网络环境差的时候&#xff0c;查询数据会比较慢&#xff0c;这个时候需要模拟其他成熟的APP给页面上加入一个加载的动画。由于一开始我不知道ionic3本身已经提供了一套组件&#xff0c;所以自己先做了一套样式。提供给不用框…

静态时序分析——单周期

一、建立时间的检查 建立时间的检查是指检查电路里每一个触发器的数据和时钟的关系是否满足建立时间的要求。 我们以上图为例进行建立时间检查。由图可知&#xff0c;我们主要针对第二个触发器UFF1进行检查。我们可以梳理时序关系如下&#xff1a; 通过这个图&#xff0c;我们…

自己搭建的CISCO实验环境

交换机&#xff1a;设备型号&#xff1a; CISCO 3750 24-TS 3台CISCO 3750 48-PS 1台路由器&#xff1a;设备型号&#xff1a;1.CISCO 2821 3台2.CISCO 3745 3台 物理拓扑图如下&#xff1a; 转载于:https://blog.51cto.com/zxs3026/2156424

关于大数定律的讨论(转)

科普一下所谓“大数定律的四种证法” 作者 : 王若度最近网上总是调侃数学、统计博士知道所谓“大数定律的四种证法”&#xff0c;本身是模仿《孔乙己》的桥段&#xff0c;用以调侃数学、统计博士学一些没什么用的东西。其实我是从来没听说过大数定律的四种证法这回事的&#x…

DM365 u-boot 启动分析

第一阶段&#xff1a;汇编语言启动 先看u-boot/board/davinci/dm365_ipnc/下的文件。 u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . 0x0000000…

[Luogu1821][USACO07FEB]银牛派对Silver Cow Party

由题意可知&#xff0c;我们需要求的是很多个点到同一个店的最短距离&#xff0c;然后再求同一个点到很多个点的最短距离。 对于后者我们很好解决&#xff0c;就是很经典的单源最短路径&#xff0c;跑一边dijkstra或者SPFA即可。 然而对于前者&#xff0c;我们应该怎么解决呢&a…

CMOS组合逻辑

1. 静态互补CMOS 实际上就是静态CMOS反相器扩展为具有多个输入。更反相器一样具有良好的稳定性&#xff0c;性能和功耗。 静态的概念&#xff1a;每一时刻每个门的输出通过低阻抗路径连到VDD或VSS上。任何时候输出即为布尔函数值。动态电路通常依赖把信号暂存在高阻抗节点的电…

绘制泰森多边形

使用到的数据文件&#xff0c;内容如图&#xff1a; 代码&#xff1a; clc; clear; close all; % 导入需要的坐标数据成矩阵 a load(test.txt); x a(:,1); y a(:,2); x x;%获取坐标的横坐标 y y;%获取坐标的纵坐标 %根据点 绘制泰森多边形 voronoi(x,y); %设定x轴的边界 x…

(八)限定某个目录禁止解析php、限制user_agent和PHP相关配置

2019独角兽企业重金招聘Python工程师标准>>> 限定某个目录禁止解析php 对于使用php语言编写的网站&#xff0c;有一些目录是有需求上传文件的。如果网站代码有漏洞&#xff0c;让黑客上传了一个用PHP写的木马&#xff0c;由于网站可以执行PHP程序&#xff0c;最终会…

静态时序分析——多周期、半周期和伪路径

一、多周期 multicycle paths 在一些情况下&#xff0c;如下图所示&#xff0c;两个寄存器之间的组合电路传输的逻辑延时超过一个时钟周期。在这样的情况下&#xff0c;这个组合路径被定义为多周期路径&#xff08;multicycle path&#xff09;。尽管后一个寄存器会在每一个的…

微信头像单张图片上传

后台配置 public function upload_img($img){import(ORG.Tencent.Weixin);$wx new Weixin(get_app_config());$media_data$wx->getMedia($img);$path./Uploads/.uniqid()..jpg;if(!file_put_contents($path,$media_data)){$this->error(图片上传失败);}return $path;}前…

u-boot nand flash read/write cmd

支援的命令函數說明1. nand info/nand device功能&#xff1a;顯示當前nand flash晶片資訊。函數調用關係如下(按先後順序)&#xff1a;static void nand_print(struct nand_chip *nand) ;2. nand erase 功能&#xff1a;擦除指定塊上的數據。 函數調用關係如下(按先後順序)&am…

APP测试瞎话

APP测试 一、功能性 1、APP的安装、卸载 2、APP中业务功能 二、性能测试 1、高、中、低端机上运行效果 2、APP安装过程、卸载过程的耗时 3、APP运行时&#xff0c;手机的CPU、内存、耗电量、流量、FPS&#xff08;画面每…

网络七层协议之物理层

我们以一个非常简单的例子开始&#xff1a; 两服务器通讯问题 如上图&#xff0c;有两台服务器&#xff0c;分别是 Server 1 和 Server 2 。 我们先做一个假设&#xff1a;计算机网络现在还没有被发明出来&#xff0c; 作为计算机科学家的你&#xff0c;想在这两台服务器间传递…

静态时序分析——On-chip Variation

OCV&#xff08;on-chip variation&#xff09;是指在同一个芯片上, 由于制造工艺和环境等原因导致芯片上各部分特征不能完全一样&#xff0c;从而造成偏差&#xff0c;对时序分析造成影响。这些偏差对互联线和cell的延时都是有影响的。 由于OCV对延时有影响&#xff0c;那么我…

Exception和RuntimeException的区别

1.Exception表示程序运行过程中可能出现的非正常状态 RuntimeException表示虚拟机的通常操作中可能遇到的异常&#xff0c;是一种常见运行错误。 Java编译器要求方法必须声明抛出可能发生的费运行异常&#xff0c;但是并不要求必须声明抛出未被捕获的运行时异常&#xff0c; 即…

[转载]IIS7报500.23错误的解决方法

原文出处&#xff1a; 原文作者&#xff1a;pizibaidu 原文链接&#xff1a;http://pizibaidu.blog.51cto.com/1361909/1794446 背景&#xff1a;今天公司终端上有一个功能打开异常&#xff0c;报500错误&#xff0c;我用Fiddler找到链接&#xff0c;然后在IE里打开&#xff0c…

关于用户空间和内核空间

当一个任务&#xff08;进程&#xff09;执行系统调用而陷入内核代码中执行时&#xff0c;我们就称进程处于内核运行态&#xff08;内核态&#xff09;。在内核态下&#xff0c;CPU可执行任何指令。当进程在执行用户自己的代码时&#xff0c;则称其处于用户运行态&#xff08;用…

kaggle中zillow比赛中模型融合的方法及其代码

在机器学习这个领域&#xff0c;尤其是做多媒体&#xff08;声音、图像、视频&#xff09;相关的机器学习方法研究&#xff0c;会涉及很多特征、分类模型&#xff08;分类任务&#xff09;的选择。以声音识别为例&#xff0c;常见的特征有MFCC、LPCC、spectrogram-like feature…

静态时序分析——Timing borrow

Timing Borrow技术又称为cycle stealing技术&#xff0c;主要是利用latch的电平敏感特性&#xff0c;通过有效电平获取数据&#xff0c;通过无效电平保持被锁存的数据&#xff0c;主要用于解决路径时序不满足电路要求的情况。 通过TimingBorrow可以对电路进行加速,当路径延迟较…