기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요~

아래 프로그램은 kelp의 holelee 님의 프레임 버퍼 강좌입니다.

저의 환경에 맞게 LCD에 24Bit컬러로 사용할려고 하는데...

아래에 16으로 된 부분만 24로 바꾸었는데 에러가 발생합니다.

리눅스 상에서 프로임 버퍼로 쓸려고 하는데 어떤부분이 잘못된 건지요?

고수님들의 조언을 부탁드립니다.

/*
* fbbmp.c : bmp drawing on frame buffer example
*
* Copyright(C) 2002 holelee
*
*/

#include <stdio.h>
#include <stdlib.h> /* for exit */
#include <unistd.h> /* for open/close .. */
#include <fcntl.h>  /* for O_RDONLY */
#include <sys/ioctl.h> /* for ioctl */
#include <sys/mman.h> /* for mmap */
#include <linux/fb.h>  /* for fb_var_screeninfo, FBIOGET_VSCREENINFO */
#include "bmplib.h"

#define MIN(x, y) ((x) > (y) ? (y) : (x))

#define FBDEVFILE "/dev/fb"

typedef unsigned char ubyte;

static unsigned short makepixel(struct fb_var_screeninfo *pfbvar, ubyte r, ubyte g, ubyte b)
{
        unsigned short rnew, gnew, bnew;

        rnew = r >> (8-pfbvar->red.length);
        gnew = g >> (8-pfbvar->green.length);
        bnew = b >> (8-pfbvar->blue.length);

        return (unsigned short) ((rnew << pfbvar->red.offset)
                        | (gnew << pfbvar->green.offset)
                        | (bnew << pfbvar->blue.offset));
}

int main(int argc, char *argv[])
{
        int fbfd;
        unsigned short *pfbmap;
        struct fb_var_screeninfo fbvar;
        int i, j;
        struct bgrpixel pixel;
        bmphandle_t bh;

        if(argc != 2)
        {
                fprintf(stderr, "Usage:%s bmpfilen", argv[0]);
                exit(1);
        }

        bh = bmp_open(argv[1]);
        if(bh == NULL)
        {
                fprintf(stderr, "Cannot open bmp file(%s)n", argv[1]);
                fprintf(stderr, "File may be not bmp. Or file may be not supported by this programn");
                exit(0);
        }

        fbfd = open(FBDEVFILE, O_RDWR);
        if(fbfd < 0)
        {
                perror("fbdev open");
                exit(1);
        }

        if(ioctl(fbfd, FBIOGET_VSCREENINFO, &fbvar) < 0)
        {
                perror("fbdev ioctl");
                exit(1);
        }

        if(fbvar.bits_per_pixel != 16)
        {
                fprintf(stderr, "bpp is not 16n");
                exit(1);
        }

        pfbmap = (unsigned short *)
                mmap(0, fbvar.xres*fbvar.yres*24/8,
                        PROT_READ|PROT_WRITE, MAP_SHARED, fbfd, 0);

        if((unsigned)pfbmap == (unsigned)-1)
        {
                perror("fbdev mmap");
                exit(1);
        }

        /* main loop */
        for(i = 0; i < MIN(bmp_height(bh), fbvar.yres); i++)
        {
                for(j = 0; j < MIN(bmp_width(bh), fbvar.xres); j++)
                {
                        pixel = bmp_getpixel(bh, j, i);
                        *(pfbmap+i*fbvar.xres+j) = makepixel(&fbvar, pixel.r, pixel.g, pixel.b);
                }
        }

        /* clean up */
        bmp_close(bh);
        munmap(pfbmap, fbvar.xres*fbvar.yres*24/8);
        close(fbfd);
        exit(0);
        return 0;
}


고현철

2006.04.24 23:14:06
*.117.46.252

driver에서 16bpp로 고정이 되어 있습니다.

해서 그 부분에 알맞게 app를 사용하셔야 합니다.
16bpp로 고정하는 이유는 성능때문입니다. 24bpp면 로드가 많이
걸리거든요.

박현진

2006.04.25 00:21:50
*.105.36.194

그러면 커널 컴파일시에 그 부분을 수정해 줘야 하나요?

고현철

2006.04.25 00:50:32
*.117.46.252

커널컴파일시가 아니라, 커널을 수정하셔야 합니다.
List of Articles
번호 제목 글쓴이 날짜sort 조회 수
6348 사운드 구동시 kenel error [1] 김대영 2006-04-20 1324
6347 fs mount시 질문이요... <==완료 [2] 윤현승 2006-04-20 1839
6346 aesop board ramdisk 올리기 문제 질문 입니다. [2] 김대영 2006-04-21 1477
6345 삼바서버 올리기에서...<==완료 [1] 윤현승 2006-04-21 1227
6344 SD memory Interface 관련 자료 좀 [5] 봉다리 2006-04-22 1307
6343 mmap사용에 대해서.. [4] 김대영 2006-04-22 1174
6342 동작하다 리셋됩니다.ㅠㅠ <--완료. [7] 한지훈 2006-04-22 1243
6341 커널패닉 - 묵혀놓은 보드 꺼내들고 집에 셋팅하는데 잘 안되네요... [10] 조준동 2006-04-24 6701
6340 gpe 파일시스템으로 부팅 동작에 관한 질문 <-진행중.ㅎㅎ [4] 한지훈 2006-04-24 1217
6339 데몬을 올리기가....?? <==완료 [3] 윤현승 2006-04-24 1149
» LCD를 24bit Bpp로 쓸려면....<==완료 [3] 박현진 2006-04-24 1359
6337 inetd 자체가 처음부터 활성화가 안돼있는데염..<==완료 [1] 윤현승 2006-04-25 960
6336 Ramdisk 올리기 질문입니다 (용량문제) [3] 추성 2006-04-25 1479
6335 mmu 가 없는 보드는 무엇을 고려해서 개발을 해야 할까염..??<=... [2] 윤현승 2006-04-26 1279
6334 부트 로더 동작 안해버리네요.ㅡㅡ <..완료 [8] 한지훈 2006-04-26 1366
6333 wmware에 slackware설치시 질문입니다.<==완료 [3] 김정한 2006-04-28 1121
6332 u-boot Compile 질문요...<==완료 [5] 박현진 2006-04-28 1373
6331 보드에서 무선 AP를 만들려면...<==완료 [4] 임채홍 2006-04-29 1310
6330 ffplay libmad 붙이기 방법 질문[완료] [1] 오용석 2006-04-29 990
6329 터치 질문 [1] 김증일 2006-05-01 1308

사용자 로그인