用户空间编写S3c2440 lcd的驱动程序

s3c2410test.c

#include <stdlib.h>   
#include <unistd.h>   
#include <stdio.h>   
#include <fcntl.h>   
#include <linux/fb.h>   
#include <sys/mman.h>   
#include <sys/ioctl.h>    


extern const unsigned char tu1_320240[];

 int main()    
 {    
     int fbfd = 0;    
     struct fb_var_screeninfo vinfo;    
     struct fb_fix_screeninfo finfo;    
     long int screensize = 0;    
     char *fbp = 0;    
     int x = 0, y = 0;    
     long int location = 0;    
	 int p=0;
     unsigned short	c;
     // Open the file for reading and writing    
     fbfd = open("/dev/fb0", O_RDWR);    
     if (fbfd == -1) {    
         perror("Error: cannot open framebuffer device");    
         exit(1);    
     }    
     printf("The framebuffer device was opened successfully.\n");    
     // Get fixed screen information    
     if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1) {    
         perror("Error reading fixed information");    
         exit(2);    
     }    
     // Get variable screen information    
   
     if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1) {    
        perror("Error reading variable information");    
         exit(3);    
     }    
   
     printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);    
     // Figure out the size of the screen in bytes    
     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) {    
         perror("Error: failed to map framebuffer device to memory");    
         exit(4);    
     }    
     printf("The framebuffer device was mapped to memory successfully.\n");    
   

   
     // Figure out where in memory to put the pixel    
     for (y = 0; y < 240; y++)    
         for (x = 0; x < 320; x++) 
		 	{    
             			location = (x) * (vinfo.bits_per_pixel/8) +    
                          (y+vinfo.yoffset) * finfo.line_length;    
  			    	c=tu1_320240[p+1]|(tu1_320240[p]<<8);
				*((unsigned short int*)(fbp + location)) =c  ;
				p+=2;
					
            		 }    
 
     munmap(fbp, screensize);    
     close(fbfd);    
     return 0;    
 }  
JAkILL_LOGO.h

extern const unsigned char tu1_320240[];
JAKILL_LOGO.C

/*BMP C file converted from BMP file*/


#include "pic.h"

const unsigned char pic[] = {

   /* image header, 20 bytes */


   

   /* scan line 1 */
   
#ifdef	WIN32
   0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
   0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
   0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
   0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
   0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
   0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
.......
....


MAKEFILE:

arm-linux-gcc  -static -o jakilltest  s3c2410lcdtest.c  JAKILL_LOGO.H  JAKILL_LOGO.C

生成的 jakiiltest  在板子在上执行 ./jakilltest

会看到出现一个美女哦

前提:

s3c244 开发板,已经安装linux2.6.30.6,LCD驱动也完好


下一节,linux下的lcd驱动





你可能感兴趣的:(用户空间编写S3c2440 lcd的驱动程序)