필자가 처음 리눅스를 접했을 때가 중학생 때 였다. 30년은 족히 넘었다. 이때도 xwindow라는 윈도우 시스템을 사용할 수 있었다. 다만, 비디오 쪽 설정을 잘못하면 모니터(CRT)를 태울 수 있어서 필자는 시도 조차 안했던것 같다. 그리고 몇년 뒤부터는 그러한 하드웨어 파손없이 사용할 수 있는 리눅스 배포본들이 상당히 많이 나와서, CLI 보다는 리눅스의 xwindow기반에서 이런저런 코딩도 해보고 했었다. 물론, 당시 에는 코딩보다는 인터넷 공유기를 만든다고 삽질했던 기억이 더 많지만 말이다. 그리고 대학교때는 APM등을 이용해서 웹서버를 운영하기도 했고, 한참뒤에는 제로보드나 이런 설치형 웹 도구들이 나오면서 그마저도 시들해졌던거 같다. 역시 똑똑한 친구들이 모여서 만들면... 필자가 만든거 보다 훨씬 기능과 성능, 디자인이 좋을 수 밖에 없으니 말이다. 

     

    그러다가 임베디드 시스템을 접하면서 프레임버퍼를 사용하는 방법에 대해서 공부했다. 수학을 싫어하는 필자에게도 어렵지 않고 재미있게 공부했던거 같다. 내용도 그리 복잡하지 않은데, 이것저것 엮으면 웬만한 프로그램을 window 시스템 없이 사용이 가능하다는 것이다. 우선 간단하게 정리해보도록 하자. 물론, 검색하면 아주 오래된 리눅스 프레임버퍼(linux_framebuffer)라는 문서를 확인할 수 있을 텐데, 필자는 그냥 대충 요약해서 필요한 부분만 설명하고자 한다. 상세한 설명이 필요한 독자들은 해당 문서를 찾아서 확인하기 바란다. 

     

    1. 프레임버퍼란 무엇인가?

      간단하게 표현하는게 혼선이 없을테니 필자는 다음과 같이 소개하도록 하겠다.

      프레임버퍼란 디스플레이 장치가 제공하는 하드웨어 메모리라고 보면된다. 해당 메모리에 어떤 데이터를 입력하면, 데이터에 따라 화면에 영상이 출력된다. 이러한 프레임 버퍼는 커널(장치 드라이버)에서 제공하며, 사용자는 해당 프레임버퍼를 메모리 매핑하여 사용할 수 있다. 우리가 윈도우를 사용하건, 터미널을 사용하건 디스플레이되는 모든 데이터는 내부적으로 이 프레임버퍼를 통해서 출력된다.

     

    2. 프레임버퍼를 왜 다시 꺼냈는가?

      일반적으로 이런 프레임버퍼를 사용자가 직접 쓰는 경우는 현재로서는 그리 많지않다. 이유인즉, 좋은 그래픽 라이브러리가 있기 때문이다. 이러한 그래픽 라이브러리의 종류에는 윈도우 시스템의 근간이 되는 GTK나, 사용자가 주로 이용하는 SDL, DirectFB, QT등이 대표적이다. 파이선의 경우에는 ParaGUI(지금도 쓰는지는 모르겠다..)를 이용할 수 도 있으며, 각 라이브러리는 처리방식은 다를 수 있겠지만, 여러 장치를 이용할 수 있는 기능이나 인터럽트등을 처리할 수 잇는 매서드등이 제공된다. 그러므로 일반적인 개발자가 프레임버퍼를 사용할 일은 별로 없다. 특히, 임베디드 시스템의 경우에 QT는 아주 오래전부터 지원하고 있어서, 필자도 한동한 강의할 때 QT를 기반으로한 강의를 다니기도 했다. 

     

      그런데 말이다. 이러한 라이브러리들은 라이선스가 있으며, 상용적 목적으로 사용시 라이선스를 구매하던지 아니면, 소스 전체 또는 일부를 공개해야되는 문제가 발생된다. 그래서 임베디드 시스템을 제외하고 대부분의 소프트웨어는 마이크로 소프트윈도우에 최적화 되어 개발되어졌다. 왜냐면, 비쥬얼 스튜디오만 구매하면, 상용 목적으로 판매가 가능하기 때문이다. 물론, 일부 공개 라이브러리를 사용한 경우 일부에 대해서 공개해야 되기도 하지만, 그런 소프트웨어등은 멀티미디어와 관련된 일부 소프트웨어를 제외하면 그리 많지 않을수 있다. 

     

      어쨋든, 그러면 QT (Qt Embedded)를 쓰면 된다. QT의 경우 크로스플랫폼을 대부분 지원하므로, 안드로이드, 리눅스, 맥 어디서든 조금만 터치해주면 만든 프로그램이 모두 동작하므로 좋긴하지만, 라이선스를 구매할 때 그리 싸지 않았던 것으로 기억한다. 꽁짜로 쓰다가 양산 들어가면 기다리고 있다가 발목을 잡힌 회사들이 있다는 이야길 많이 들었기 때문에 말이다. 어쨋든 공부하는데 쓰거나 상업적 목적만 아니면 상관이 없어서 나쁘지 않았다. 그런데, QT5로 오면서 QWS가 사라졌다.  QWS는 Qt Windows System의 약자인것으로 기억하는데,  리눅스 시스템에 Window환경이 아니더라도 Window환경 처럼 쓸 수 있는 기능이다. 이 기능은 최근 Boot2QT에 포함이되어 더더욱 상용화 되고, 일반 사용자 아무래도.. 접근이 어렵게 되었다. 그러면 이러한 비싼 라이선스를 이용한 방법말고는, 기억에 남는게 프레임버퍼를 직접 사용하는 방법이 있다. 최소한의 라이선스는 회피할 수 있으니 말이다. 그리고 화려한 GUI나 많은 정보를 출력하지 않는 경우라면 프레임 버퍼 많으로도 충분히 사용이 가능하다. 예를들면 PM의 컨트롤 화면, 자판기의 GUI 화면등은 Framebuffer만으로도 충분히 사용할 수 있다. 필자가 예전에 그렇게 썼으니까 말이다. 

     

     

    3. 주의사항

      프레임버퍼를 이용할 때의 주의사항은 별것 없다. 다만, 독자가 생각한데로 무엇인가 만들기 위해서는 많은 노력이 필요하다. 왜냐면, 픽셀단위로 모든것을 제어해야되기 때문이다. 그리고 여러 그래픽 요소를 포개려면 프레임버퍼에 영상을 포개는 순서부터, 변화가 있는 경우라면 해당 부분을 갱신하기 위해서 기존 프레임버퍼를 가져와 다시 오버레이 한다던지해야된다. 그런 부분에서 프로그램을 개발하다 보면 깜빡임 문제가 발생하게되고, 깜빡임 문제를 없애기 위해서 더블버퍼링이나 Queue를 통한 버퍼링 등을 사용해야 되는 경우가 있어서 기본적인 자료구조를 어느정도 학습해야 되는 경우도 발생하기 때문에, 원하는 결과를 내는데 많은 시간을 소요해야 된다는점이 주의할 점 정도 되겠다.

     

     

    4. 요약

    4.1. Framebuffer 이용의 장점과 단점

    (1) 장점 : 라이선스에서 자유로워진다.

    (2) 단점 : 프로그래밍 모든 요소를 직접 만들어야 되므로 개발에 오랜시간이 소요된다.

     

    4.2. 그래픽 라이브럴 이용

    (1) 장점 : 대부분의 기능이 제공된다. 따라서 프로그래머는 해당 객체를 가져와서 사용만 하면 된다.

                    상용으로 사용하지 않는 경우라면 좋은 선택지가 될 수 있다.

    (2) 단점 : 라이선스를 해야하며, 라이선스 비용이 비싸며 보통 카피당 비용으로 처리된다.

     

    5. 프레임버퍼 예시

      필자가 아주 오래전에 만든 간단한 동영상 샘플이 있어서 링크를 걸어둔다. 혹시나 궁금하거든 한번 확인해보기 바란다.

     

    https://youtu.be/SfZdU8Xk_Zo

     

     

     

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기