写入帧缓冲区

2023-11-24

我使用的是带有内置图形加速器 GMA-HD 的 i5 内核,在 RHEL 6.0 操作系统上运行。 我需要测试显卡驱动程序的图形加速能力(我发现我的电脑上是i915)。 我使用以下代码(我从互联网上获得并进行了一些修改)来写入帧缓冲区。

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>

int main()
{
        int fbfd = 0;
        struct fb_var_screeninfo vinfo;
        struct fb_fix_screeninfo finfo;
        long int screensize = 0;
         char *fbp = 0;
        int x = 0, y = 0;
        long int location = 0;
        int count ;

        /* Open the file for reading and writing */
        fbfd = open("/dev/fb0", O_RDWR);
        if (!fbfd) {
                printf("Error: cannot open framebuffer device.\n");
                exit(1);
        }
        printf("The framebuffer device was opened successfully.\n");
     /* Get fixed screen information */
        if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) {
               printf("Error reading fixed information.\n");
                exit(2);
        }

        /* Get variable screen information */
        if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
                printf("Error reading variable information.\n");
                exit(3);
        }

        /* Figure out the size of the screen in bytes */
        screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
        printf("\nScreen size is %d",screensize);
        printf("\nVinfo.bpp = %d",vinfo.bits_per_pixel);

        /* Map the device to memory */
        fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,fbfd, 0);
        if ((int)fbp == -1) {
                printf("Error: failed to map framebuffer device to memory.\n");
                exit(4);
        }
         printf("The framebuffer device was mapped to memory successfully.\n");


        x = 100; y = 100; /* Where we are going to put the pixel */

        /* Figure out where in memory to put the pixel */
        location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) + (y+vinfo.yoffset) * finfo.line_length;
        for(count = 1 ;count < 100 ;count++)
        {
                *(fbp + location) = 255;    /* Some blue */
                *(fbp + location + count) = 0; /* A little green */
                *(fbp + location + count + 1) = 0; /* A lot of red */
                *(fbp + location + count + 2) = 0; /* No transparency */
        }
        munmap(fbp, screensize);
        close(fbfd);
        return 0;
}

运行上述代码后,显示上没有发现任何变化,但“cat /dev/fb0”显示了一些数据。 有人可以解释为什么屏幕上什么也没有看到吗? (我还发现 fb0 对应于帧缓冲区 'inteldrmfb' 。)

提前致谢,

尼拉吉·N·T


你没有增加位置!所以 255 仅在第一个像素上,所有其他像素均为 0。请尝试以下操作:

        location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) + (y+vinfo.yoffset) * finfo.line_length;
        for(count = 1 ;count < 100 ;count++)
        {
                *(fbp + location) = 255;    /* Some blue */
                *(fbp + location + 1) = 0; /* A little green */
                *(fbp + location + 2) = 0; /* A lot of red */
                *(fbp + location + 3) = 0; /* No transparency */
                location += 4;   
        }

然而,测试的正确做法可能是使用directfb它来了 一些帧缓冲区性能测试

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

写入帧缓冲区 的相关文章

随机推荐

  • Django Rest Framework:使用令牌身份验证时重定向到 Amazon S3 失败

    我在 DRF 中使用令牌身份验证 并且对于某个 API 调用 想要重定向到 S3 使用类似的 URLhttps my bucket s3 amazonaws com my file path my file jpg Signature MY
  • AttributeError:“池”对象没有属性“__exit__”

    我正在使用一些多处理Python脚本multiprocessing Pool 这些脚本如下所示 from multiprocessing import Pool def f x return x x if name main with Po
  • 我什么时候应该在菜单项中使用省略号

    我什么时候应该把 放在菜单项的末尾 我似乎记得读过一些规则 但我一辈子都找不到它们 对于上下文 我正在向右键单击菜单添加属性选项 并且想知道添加它们是否合适 据我了解 这表明该选项在实际执行任何操作之前会询问您其他问题 这 3 个点实际上称
  • Sql Server 2005 - 如果不存在则插入

    互联网上有很多关于这个常见 问题 的信息 解决方案如 IF NOT EXISTS BEGIN INSERT INTO END 在我看来 它们不是线程安全的 您可能会同意 但是你能确认将exists放入单选的where子句中就可以解决sql引
  • 如何从 App Store 上提供的 ipa 文件获取 dSYM 文件

    有没有办法从 App Store 中提供的 ipa 文件获取 dSYM 文件 我丢失了特别包含 dSYM 的档案 我可以这样做吗 我需要将 dSYM 上传到 Crittercism 提前致谢 假设您仍然可以访问 iTunes Connect
  • C# SIP 堆栈/库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个好的 SIP 库 要么用 C 编写 要么提供 C 包装器 不一定需要免费 有人用过什么好东西吗 为了澄清起见 我说的是 VoIP 协议
  • 创建具有动态属性名称的对象[重复]

    这个问题在这里已经有答案了 我正在尝试这样做 var KEYS KEYS PHONE TYPE phone type KEYS AGENT TYPE agent type var myAppConfig iconMap KEYS PHONE
  • SQLAlchemy with_for_update 行锁定不起作用?

    有一个学生 他的type属性为 4 最小值为type属性可以是1 在 postgres 中 在会话 1 中 我独占锁定并更新学生表中的一行 BEGIN LOCK TABLE students IN ROW EXCLUSIVE MODE SE
  • 直接在SQLite中计算两点之间的距离

    在我的 web MySQL 应用程序中 我有类似的方法来获取两点之间的距离 6371 acos cos radians 19 83996 cos radians lat cos radians 43 94910 radians lng si
  • 如何从 preg_split 结果中删除空数组? [复制]

    这个问题在这里已经有答案了 举个例子 我有大量的正则表达式 就像我写的一样简单 php gt var dump preg split reg s reg a zA Z array 3 0 gt string 0 1 gt string 13
  • 裤子包括 OS X 特定的 Python 轮子

    TLDR Pants 获取 OS X 特定的轮子 因为我正在 Mac 上开发 我怎样才能避免这种情况 或者指定我将部署到 Ubuntu 完整故事 尝试用 Pants 打包 Python 应用程序 到目前为止进展顺利 但遇到了一个困扰我一段时
  • 以编程方式设置或查看“高级 Wifi”设置

    我需要一种以编程方式打开 高级 wifi 设置的方法 以让用户更改某些设置 或者最好以编程方式更改这些高级无线设置 到目前为止 我只能通过 startActivity new Intent Settings ACTION WIFI SETT
  • 什么样的类型定义在本地环境中是合法的?

    在伊莎贝尔的NEWS文件 我发现 命令 typedef 现在可以在本地理论上下文中工作 无需 引入对参数或假设的依赖 这不是 可以在 Isabelle Pure HOL 中实现 请注意 逻辑环境可能 包含本地 typedef 的多种解释 具
  • Kafka Connect 接收器任务忽略容差限制

    我尝试忽略接收器连接器中的错误消息errors tolerance all选项 完整的连接器配置 name crm data sink pandora config connector class io confluent connect
  • Linux下C语言读写串口

    我试图使用 FTDI 通过 USB 端口发送 接收数据 所以我需要使用 C C 处理串行通信 我正在尝试Linux 乌班图 基本上 我连接到一个正在侦听传入命令的设备 我需要发送这些命令并读取设备的响应 命令和响应都是ASCII 字符 使用
  • C++ 中的设置/获取方法

    Java 程序员和 API 似乎更喜欢显式的 set get 方法 然而我的印象是 C 社区不赞成这种做法 如果是这样 是否有特殊原因 除了更多行代码之外 为什么会这样 另一方面 为什么Java社区选择使用方法而不是直接访问 谢谢 理想情况
  • 使用 Rust 稳定通道和夜间通道并行编译代码有多困难?

    Cargo 创建的默认文件树允许并行编译发布和调试版本 因为它们位于自己的目录中 target release and target debug 分别 允许并行编译有多困难stable nightly 编译器 例如使用目录 target d
  • 在 R 中合并两个列表

    我有两个清单 first list a 1 b 2 c 3 second list a 2 b 3 c 4 我想合并这两个列表 所以最终产品是 a 1 1 2 b 1 2 3 c 1 3 4 有一个简单的函数可以做到这一点吗 如果列表始终具
  • 更新部分主键Entity Framework 4.0

    我有一个带有复合主键的表 3 列 UTP ID ITEMId UTS ID CategoryID USS ID SubCategoryID 例如 当我尝试使用 EF 4 更改 SubCategory 时 出现以下错误 utl USS ID
  • 写入帧缓冲区

    我使用的是带有内置图形加速器 GMA HD 的 i5 内核 在 RHEL 6 0 操作系统上运行 我需要测试显卡驱动程序的图形加速能力 我发现我的电脑上是i915 我使用以下代码 我从互联网上获得并进行了一些修改 来写入帧缓冲区 inclu