这个代码编译通过,运行出错?请帮忙---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);
}
<