1、开发平台sc6410,编译器arm-linux-gcc 4.3
以下为源代码:
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <linux/types.h>
#include <linux/fb.h>
#include <linux/videodev2.h>
int main(int argc ,char *argv[])
{
int fbfd = 0;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
long int screensize = 0;
char *fbp = NULL;
int x = 0 , y = 0;
long int location = 0 ;
int sav = 0;
//open framebuffer device
fbfd = open("/dev/fb0",O_RDWR);
if(!fbfd){
printf("Error:cannot open the framebuffer device!\n");
exit(1);
}
printf("well you open the framebuffer sucessful!\n");
//get the fixed screen information
if(ioctl(fbfd,FBIOGET_FSCREENINFO,&finfo)){
printf("Error reading fixed information\n");
exit(2);
}
//get the variable screen information
if(ioctl(fbfd,FBIOGET_VSCREENINFO,&vinfo)){
printf("Error reading variable information\n");
exit(3);
}
//show these information
printf("vinfo.xres=%d\n",vinfo.xres);
printf("vinfo.yres=%d\n",vinfo.yres);
printf("vinfo.bit_per_bits=%d\n",vinfo.bits_per_pixel);
printf("vinfo.xoffset=%d\n",vinfo.xoffset);
printf("vinfo.yoffset=%d\n",vinfo.yoffset);
printf("finfo.line_length=%d\n",finfo.line_length);
screensize = vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8;
//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);
}
memset(fbp,0,screensize);
//plot the screen the colour for black
for(x=0;x<vinfo.xres;x++)
for(y=0;y<vinfo.yres;y++){
location =(x+vinfo.xoffset)*(vinfo.bits_per_pixel/8)+(y+vinfo.yoffset)*finfo.line_length;
*(fbp+location)=0xFF;
*(fbp+location+1)=0x00;
}
sleep(10);
//release the memory
munmap(fbp,screensize);
close(fbfd);
return 0;
}
编译下载到开发板上运行的结果截图为(而你的开发板的显示屏会变蓝色):