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

来源:互联网 发布:淘宝店铺有哪些类型? 编辑:程序博客网 时间:2024/06/05 01:59

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 shortc;     // 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 */   #ifdefWIN32   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驱动