写入帧缓冲区

我正在使用内核graphics加速器GMA-HD在RHEL 6.0操作系统上运行的i5内核。 我需要testinggraphics驱动程序的graphics加速function(我发现在我的电脑上是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')。

提前致谢,

Neeraj NT

Solutions Collecting From Web of "写入帧缓冲区"

你不是增加位置! 所以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它带有一些帧缓冲性能测试