【Linux駆動】LCD駆動テスト

3291 ワード

(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 .
"); 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/fb 0現象:スクリーンが表示されます.