조회 수 10486 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

Frame buffer는 임베디드 리눅스에서 그래픽을 표현하는 역할을 한다. 커널에서 확보되는 비디오 메모리내의 Framebuffer로 전달될 메모리 공간이다. 일반 PC에서는 Graphic Card라는 장치가 그래픽을 표현해주는 것과는 조금 다르다고 할 수 있다.

 

일반  PC -> Graphic Card

ARM등의 임베디드 장비 -> LCD Controller

 

Frame buffer 디바이스 드라이버는 하드웨어를 user level application에서 제어할 수 있도록 만들어진 디바이스드라이버이다. 화면 출력장치의 종류가 많고 환경도 다양하기 때문에 디바이스 드라이버로써 이식성을높이고 표준화된 인터페이스를 제공하기 위해 필요하다. Frame Buffer의 이용시 임베디드 장비에서 여러 장비에 대한 이식성이 향상되는 장점이 있다고 할 수 있다.

 

다음 소스는 프레임 버퍼 드라이버를 직접 오픈 하여 프레임 버퍼에 대한 핸들을 얻어내고, 프레임 버퍼에 대한 포인터를 얻어 내어 검정색으로 화면을 초기화하는 예제이다.

 

clearfb.c

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

struct fb_var_screeninfo vinfo;

int
main(int argc, char *argv[])
{
    int fbfd, fbsize, i;
    unsigned char *fbbuf;

    /* 프레임버퍼 드라이버 열기 */
    if ((fbfd = open("/dev/fb0", O_RDWR)) < 0) {
        exit(1);
    }

    /* 디스플레이 정보 얻기 */
    if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
        printf("Bad vscreeninfo ioctl\n");
        exit(2);
    }

    /* 프레임버퍼크기 =
       (X-resolution * Y-resolution * bytes per pixel) */
    fbsize = vinfo.xres*vinfo.yres*(vinfo.bits_per_pixel/8);

    /* 매모리맵핑 */
    if ((fbbuf = mmap(0, fbsize, PROT_READ|PROT_WRITE,
                      MAP_SHARED, fbfd, 0)) == (void *) -1){
        exit(3);
    }

    /* 화면 초기화 */
    for (i=0; i<fbsize; i++) {
        *(fbbuf+i) = 0x0;
    }
    munmap(fbbuf, fbsize);

    close(fbfd);
}


"/dev/fb*" 형태로 프레임 버퍼 드라이버를 오픈 하여 mmap() 함수를 사용하여 프레임 버퍼에 대한 직접적인 제어를 통해 LCD를 제어할 수 있도록 하고 있다.


프레임 버퍼 드라이버는 리눅스 시스템에서 사용자 레벨의 응용 프로그램에서 제어할 수 있도록 만들어진 디바이스 드라이버이다. 또한 위의 예제에서 볼 수 있듯이 open, mmap과 같은 표준 인터페이스 함수를 통해 이용할 수 있는 구조로 구성되었다.

 

K-20150215-766713.png

 

▲프레임 버퍼 드라이버의 동작 모습을 사용자의 응용 프로그램 관점에서 보여준다.


  1. No Image

    Build Qt 4.7.0 for Embedded Linux

    Date2015.05.25 Bymakersweb Views8187
    Read More
  2. 리눅스 프레임버퍼(Linux Frame Buffer)

    Date2015.02.15 Bymakersweb Views10486
    Read More
  3. No Image

    file_operations

    Date2014.02.27 Bymakersweb Views5773
    Read More
  4. ioctl() 함수

    Date2014.02.27 Bymakersweb Views18377
    Read More
  5. No Image

    키패드 드라이버

    Date2014.02.12 Bypjk Views9800
    Read More
Board Pagination Prev 1 2 3 Next
/ 3