doubt in frame buffer using with RHEL 6.0

ShibuThomas shibuthomas at tataelxsi.co.in
Tue Jan 18 09:05:09 UTC 2011


Hi All,
I'm using an i5 core with builtin graphics accelerator GMA-HD running on 
an RHEL 6.0 OS.
I needed to test the graphics acceleration capabilities of the graphics 
driver(which I found out was i915 in my PC).
I used the following code(which I got from the internet ) for writing to 
framebuffer.



/*******************************************************/
#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;
         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);
//      printf("\nFinfo.bpp = %d",finfo.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;
}
/*************************************************************************/

After running the above code no change was found on display but ' cat  
/dev/fb0 ' showed some data.
Could someone explain why nothing was seen on screen?
(I also found that fb0 correspond to the frame buffer 'inteldrmfb' .)

Regards,
ShibuThomas






More information about the Redhat-install-list mailing list