Linux驱动:LCD驱动测试

(1) 进入内核源码目录中,make menuconfig -> Device Drivers -> Graphics support -> [M]Support for frame buffer devices

重新编译内核 make uImage ,然后make modules,将driver/video/下的 fb.ko、cfbfillrect.ko、cfbimgblt.ko、cfbcopyarea.ko拷贝到210的根文件中,分别 insmod 安装到内核中。

(2) 安装lcd.ko驱动模块

(3) 应用层读写 frame buffer 测试程序框架

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
int main()
{  
    int fbfd = 0;
    struct fb_var_screeninfo vinfo;
    struct fb_fix_screeninfo finfo;
    long int screensize = 0;
    char *fbp = NULL;
    int x,y,r = 0,g = 0, b = 0;
    unsigned int rgb;
    
    /*打开设备文件*/
    fbfd = open("/dev/fb0", O_RDWR);
    
    /*取得屏幕相关参数*/
    ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo);  
    ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo);
    
    /*计算屏幕缓冲区大小*/
    screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
    
    /*映射屏幕缓冲区到用户地址空间*/
    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");
        return -1;
    }
    /*下面可通过fbp指针操作缓冲区:显示红 */
    for(y = 0;y<(vinfo.yres);y++)//vinfo.yres = 272
    {    
        for(x = 0;x < vinfo.xres;x++)//vinfo.xres=480
        {    
            long location = x*3 + y * vinfo.xres * 3;//用户缓冲区地址移动,一个像素3字节(24位真彩色)
            r = 256;
            g = 0;
            b = 0;
            rgb = (r << 16) | (g << 8) | b;    //分别获得相应颜色
            *((unsigned short *)(fbp + location)) = rgb;
        }
    }
    /*释放缓冲区,关闭设备*/
    munmap(fbp, screensize);
    close(fbfd);
}

或者直接使用:cat xxxfile > /dev/fb0 现象:出现花屏。

posted @ 2015-10-01 12:06  陈纽扣  阅读(1605)  评论(0编辑  收藏  举报