#include <stdio.h>
#include <linux/kernel.h>
#include <stdlib.h>
//#include <fnctl.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
//#include <asm/page.h>
//#include <asm/pgalloc.h>
//#include <linux/io.h>
#include <linux/types.h>
#include <fcntl.h>
#include "LcdAppDisp.h"
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
int main(int argc, char *argv[] )
{
FBDEV pFBdev;
printf("11111111111111\n");
memset(&pFBdev,0x0,sizeof(FBDEV));
printf("222222222222\n");
strcpy(pFBdev.dev,"/dev/fb0");
printf("333333333333\n");
PFBDEV ppFBdev = &pFBdev;
ppFBdev->fb = open(ppFBdev->dev, O_RDWR );
printf("44444444443\n");
if (ppFBdev->fb < 0 )
{
printf("Erroring Open DEV \n");
return 0;
}
printf("open fb success \n");
if ( ioctl(ppFBdev->fb, FBIOGET_VSCREENINFO,&(ppFBdev->fb_var)) == -1 )
{
printf("ioctl FBIOGET_VSCREENINFO error \n");
return 0;
}
if ( ioctl(ppFBdev->fb,FBIOGET_FSCREENINFO,&(ppFBdev->fb_fix)) == -1 )
{
printf("ioctl FBIOGET_FSCREENINFO error \n");
return 0;
}
printf("get fscreeninfo success \n");
ppFBdev->fb_mem_offset = (unsigned long )(ppFBdev->fb_fix.smem_start) & (~PAGE_MASK);
ppFBdev->fb_mem = (unsigned long int )mmap( NULL,ppFBdev->fb_fix.smem_len + ppFBdev->fb_mem_offset,
PROT_READ | PROT_WRITE, MAP_SHARED, ppFBdev->fb, 0 );
printf("fb_mem_offset success \n");
if ( ppFBdev->fb_mem == -1L)
{
printf("fb mmap failed, fb_mem : %d, fb_offset : %d \n",ppFBdev->fb_mem, ppFBdev->fb_mem_offset );
return 0;
}
int xres = ppFBdev->fb_var.xres;
int yres = ppFBdev->fb_var.yres;
int mem_len = ppFBdev->fb_fix.smem_len;
void *mem_addr = (void*)(ppFBdev->fb_mem + ppFBdev->fb_mem_offset);
printf("mem_addr success \n");
int i,j;
for ( i = 0; i < 50; i ++ )
for ( j = 0; j < 40; j ++ )
{
unsigned char *pVideomem = (unsigned char *)(mem_addr) + (xres*j+i );
*pVideomem = (unsigned char)0xE0;
}
for ( i = 50; i < 100; i++ )
for( j = 0; j < 40; j++ )
{
unsigned char *pVideomem = (unsigned char *)(mem_addr) + (xres*j+i );
*pVideomem = (unsigned char)0x1C;
}
for ( i = 100; i < 150; i++ )
for (j = 0; j < 40; j++ )
{
unsigned char *pVideomem = (unsigned char *)(mem_addr) + (xres*j+i );
*pVideomem = (unsigned char)0x03;
}
printf("loop end \n");
while ( 1 )
{
;
}
exit( 0 );
return EXIT_SUCCESS;
}
各位这是我写的上层,请帮我分析下,我找了下在调用mmap时是不是会调用fb_cmap颜色表进行计算颜色,
目录程序显示出来的颜色 RED->GREEN GREEN->BLUE BLUE->RED ,
驱动中设置的颜色长度和偏移都是正确的
var->red.length = 3;
var->red.offset = 5;
var->green.length = 3;
var->green.offset = 2;
var->blue.length = 2;
var->blue.offset = 0;