读书人

这个代码编译通过运行出错?请帮忙-

发布时间: 2012-02-09 18:22:27 作者: rapoo

这个代码编译通过,运行出错?请帮忙---framebuffer!
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <asm/page.h>

#include "fbtools.h "

#define TRUE 1
#define FALSE 0
#define MAX(x,y) ((x)> (y)?(x):(y))
#define MIN(x,y) ((x) <(y)?(x):(y))

//open & init a frame buffer
int fb_open(PFBDEV pFbdev)
{
pFbdev-> fb = open(pFbdev-> dev, O_RDWR);
if(pFbdev-> fb < 0)
{
printf( "Error opening %s: %m. Check kernel config\n ", pFbdev-> dev);
return FALSE;
}
if (-1 == ioctl(pFbdev-> fb,FBIOGET_VSCREENINFO,&(pFbdev-> fb_var)))
{
printf( "ioctl FBIOGET_VSCREENINFO\n ");////----出错!!
return FALSE;
}
if (-1 == ioctl(pFbdev-> fb,FBIOGET_FSCREENINFO,&(pFbdev-> fb_fix)))
{
printf( "ioctl FBIOGET_FSCREENINFO\n ");
return FALSE;
}

//map physics address to virtual address
pFbdev-> fb_mem_offset = (unsigned long)(pFbdev-> fb_fix.smem_start) & (~PAGE_MASK);
pFbdev-> fb_mem = (unsigned long int)mmap(NULL, pFbdev-> fb_fix.smem_len + pFbdev-> fb_mem_offset,PROT_READ | PROT_WRITE, MAP_SHARED, pFbdev-> fb, 0);
if (-1L == (long) pFbdev-> fb_mem)
{
printf( "mmap error! mem:%d offset:%d\n ", pFbdev-> fb_mem, pFbdev-> fb_mem_offset);
return FALSE;
}

return TRUE;
}

//close frame buffer
int fb_close(PFBDEV pFbdev)
{
close(pFbdev-> fb);
pFbdev-> fb=-1;
}

//get display depth
int get_display_depth(PFBDEV pFbdev);
{
if(pFbdev-> fb <=0)
{
printf( "fb device not open, open it first\n ");
return FALSE;
}
return pFbdev-> fb_var.bits_per_pixel;
}

//full screen clear
void fb_memset (void *addr, int c, size_t len)
{
memset(addr, c, len);
}

//use by test
#define DEBUG


main()
{
FBDEV fbdev;
memset(&fbdev, 0, sizeof(FBDEV));
strcpy(fbdev.dev, "/dev/fb0 ");
if(fb_open(&fbdev)==FALSE)
{
printf( "open frame buffer error\n ");
return;
}

//fb_memset(fbdev.fb_mem + fbdev.fb_mem_offset, 0, fbdev.fb_fix.smem_len);
fb_memset((void *)(fbdev.fb_mem+fbdev.fb_mem_offset), 0, fbdev.fb_fix.smem_len);
/*
unsigned long temp;

temp= fbdev.fb_mem+fbdev.fb_mem_offset;

fb_memset((void *)temp, 0, fbdev.fb_fix.smem_len);
*/
fb_close(&fbdev);
}


if (-1 == ioctl(pFbdev-> fb,FBIOGET_VSCREENINFO,&(pFbdev-> fb_var)))


{
printf( "ioctl FBIOGET_VSCREENINFO\n ");////----出错!!
return FALSE;
}
根本找不到相关资料,一头雾水!!




[解决办法]
google search “ linux framebuffer " 很多的。

读书人网 >UNIXLINUX

热点推荐