XFree86-FBDev with AGP Graphic board mini-HOWTO 박병준, BPark@computer.org v0.2, 20 July 1999 v0.21, 3 August 1999. 오타 수정 및 보충 설명. 이 문서는 인텔플렛폼에서 사용하는 AGP슬롯에 장착하여 사용하는 아직 호환 X서버가 존재하지 않는 그래픽카드가 있을 때, Vesa 2.0 지원 Frame Buffer장치를 이용한 XF86_FBDev X Server의 설정 방법을 설명하고 있습니다. ---------------------------------------------------------------------------- 목차 1. 전체보기 2. Vesafb는 어떻게 설정하는가? 3. XF86_FBDev란 무엇인가? 4. 프레임버퍼를 이용한 XF86Config 5. S3 Trio3D 예제 5. 참고문서들 ---------------------------------------------------------------------------- 1. 전체보기 X11을 사용하기 위해서는 그래픽 장치에 맞는 X Server 프로그램을 설치해 주어야 합니다. 그러나 아직 AGP형으로 나온 그래픽 장치들 대부분은 전용 X Server가 존재하지 않습니다. 그렇다면 이런 최신형의 장치는 리눅스에서 사용 할 수가 없는 것일까요? 답은 "사용할 수 있다."입니다. 이 문서에서는 바로 X Server가 아직 존재하지 않는 그래픽 장치에서 X11 을 사용하기 위한 설정 방법을 설명하고 있습니다. 이 문서만 보고서도 기본적인 설정과 사용이 가능하겠지만 조금 더 자세한 사항을 알고 싶은 사람은 이글의 맨 끝에 있는 참고 문서들을 꼼꼼히 읽어보기 바랍니다. 먼저 설정의 전체 과정을 살펴보면, 커널에서 Frame buffer라는 장치를 사 용 가능하도록 설정해야 합니다. (대부분의 최신 배포판은 이미 사용이 가능하도록 설정되어 있습니다.) 그리고 나서 Frame buffer의 장치드라이버를 생성해 줍니다. 다음으로는 Frame buffer의 해상도와 색수를 lilo에 설정해 주어야 합니다. 마지막으로 XF86_FBDev 패키지를 받아서 설치하고, XF86Config 파일을 수정해 주면 전체 과정을 마칠 수 있습니다. 이어지는 2장부터는 각각의 단계를 하나씩 살펴보겠습니다. 2. Vesafb는 어떻게 설정하는가? Vesafb는 VESA2.0을 지원하는 그래픽카드를 작동시키는 인텔 PC 기반의 프레임 버퍼의 구동 드라이버로써 커널을 통해 각종 그래픽 출력을 가능하게 만드는데 밀접한 관련을 맺고 있습니다. 즉, 그래픽을 출력할 수 있는 고해상도의 콘솔을 가능하게 해 줍니다. 그러므로 Vesafb를 이용하면, 각 그래픽장치가 가진 특수한 가속기능은 사용하지 못하더라도, 표준에 맞는 그래픽 출력이 가능할 수 있습니다. 프레임버퍼라는 장치는 그래픽 하드웨어를 위해서 자신만의 특수한 구조에서 분리시켜 표준형의 접근방법으로 하드웨어를 제어할 수 있도록 만든 것입니다. 그러므로 그래픽을 출력하는 응용프로그램이 그래픽 출력장치의 내부구조를 알지 못해도 그래픽 출력을 할 수 있도록 만들 수 있습니다. Vesafb를 사용하기 위해서는 커널의 설정을 확인하고 만약 설정이 잘못되어 있다면, 커널을 새로 컴파일 해 주어야 합니다. 현재 나와있는 대부분의 배포판의 커널은 이 내용을 이미 포함하고 있습니다. 먼저 커널의 소스가 있는 곳으로 가서 "make menuconfig"를 해 줍니다. Console Drivers menu로 가셔서 다음의 사항들이 Yes로 되도록 체크를 해 줍니다. VGA Text Console Video Selection Support Support for frame buffer devices VESA VGA Graphic console Advanced Low Level Drivers Select Mono,2bpp, 4bpp, 8bpp, 16bpp, 24bpp and 32bpp packed pixel drivers VGA character/attributes support 여기서 Mono ~ 32bpp까지의 pixel drivers 는 모두 다 선택하여야 되지는 않지만 반드시 8bpp는 선택하여야 합니다. 이제 커널을 make하는 방법에 따라서 커널을 컴파일 하고 설치합니다. 지금까지 나와 있는 커널 2.2.x 대의 배포판들은 대부분 이미 이 옵션을 이용하여 build되어 있으므로 이미 옵션이 체크되어 있다면 굳이 다시 하지 않더라도 프레임버퍼를 사용할 수 있습니다. 다음은 프레임버퍼에 사용될 장치구동 파일을 만들 차례입니다. "/dev" 디렉토리로 이동해서 다음 명령을 입력합니다. mknod /dev/fb0 c 29 0 이 명령은 첫번째 그래픽 장치에 대한 프레임버퍼를 만드는 것으로 만약 두 개 이상의 그래픽 장치를 사용한다면 두 번째 프레임버퍼 장치는 mknod /dev/fb1 c 29 32 를 이용하여 만들 수 있습니다. 이제 ln -s fb0 fb 를 이용하여 fb0장치를 fb로 링크시켜 줍니다. 만약 이 과정에서 이미 프레임버퍼를 사용할 수 있는 배포판을 사용한다면, 이러한 프레임버퍼 장치파일들이 이미 생성되어 있으므로 다시하실 필요는 없습니다. Vesafb설정의 마지막 단계는 해상도와 모드를 결정하는 것입니다. 그래픽 장치만 지원된다면 Full color까지 사용해도 괜찮지만, 현재로서 프레임버퍼를 사용하는 X서버는 256 색 이상을 사용할 수 없습니다. 각 해상도에 따른 256색의 프레임버퍼 설정 값은 아래 표와 같습니다. 640x480 : 769 800x600 : 771 1024x768 : 773 1280x1024 : 775 1600x1200 : 796 자신이 가지고 있는 모니터가 수용할 수 있는 해상도를 선택한 다음 /etc/lilo.conf 의 내용에 "VGA = 773" 과 같이 해당되는 숫자를 적어 줍니다. 제가 가진 lilo.conf 파일의 내용중 일부입니다. prompt vga = 773 default = linux ..... 이제 터미널에서 lilo 명령을 입력해서 바뀐 lilo.conf를 활성화 시켜 주면 Vesafb의 설정은 끝납니다. 시스템을 reboot해 보면 화면의 왼쪽 맨 위에 귀엽게 앉아있는 펭귄의 아이콘과 깨끗한 그래픽 콘솔 화면을 만나실 수가 있습니다. 만약 이렇게 나오지 않는다면 아직 Vesafb의 설정이 끝나지 않은 것이므로 위의 내용을 다시 한번 읽어보고 빠진 곳이 없는지 확인하시기 바랍니다. 3. XF86_FBDev란 무엇인가? XF86_FBDev는 X Server프로그램입니다. XFree86의 한 패키지로 제공되는 것으로 앞절에서 나온 Vesafb를 그래픽 출력 장치로 삼아 X window를 사용할 수 있게 해주는 그래픽 출력 프로그램입니다. 이 프로그램의 소스는 여러곳에서 구할 수 있으며, 현재는 각 배포판에 build된 패키지의 형태로도 구할 수가 있습니다. 이 글이 쓰여지는 99년 7월 당시에는 3.3.3.1 버전이 가장 최신의 것이며, 만약 더 최신의 것을 구하고 싶다면 http://www.xfree86.org 홈페이지를 방문하거나 자신이 사용하고 있는 배포판의 Update 페이지를 참고하시기 바랍니다. XF86_FBDev 패키지가 이미 있으며 그 버전을 알고 싶을 때는 Redhat호환 배포판의 경우 "rpm -qa |grep XFree86" 이라는 명령을 내렸을 때, XFree86-FBDev-version-build 으로 나온다면 출력된 버전의 FBDev 패키지가 설치되어 있는 것입니다. 다른 배포판의 경우에는 /usr/X11R6/bin 이나 /usr/bin/X11 의 디렉토리에 XF86_FBDev 라는 파일이 있는지 확인하십시요. 만약 자기가 가지고 있는 XFBDev가 없다면, 새로 설치를 하여야 합니다. 소스로부터 직접 컴파일 해도 되지만, 이 방법은 매우 시간이 오래 걸리므로 권장하지 않습니다. ftp://sunsite.kren.ne.kr/pub/OS ftp://ftp.bora.net/pub/Linux 와 같은 Linux배포판 mirror 사이트에서 build되어 있는 패키지를 받으시기 바랍니다. 그리고 나서 root의 권한으로 rpm --install XFree86-FBDev.*.rpm 와 같이 입력하면, XF86_FBDev가 설치가 됩니다. 자신이 가지고 있는 XF86_FBDev가 오래된 버전이라 새로운 버전으로 업그레이드 할 때는 "rpm -Uvh XFree86-FBDev.*.rpm"의 명령으로 업그레이드 할 수 있습니다. 이제 남은 과정은 XF86_FBDev 를 적절한 곳에 심볼릭 링크를 시켜주어야 합니다. Redhat호환 배포판의 경우에는 /etc/X11/X 가 링크시켜주어야할 위치이고, 그렇지 않은 경우에는 /usr/X11R6/bin/X 에 링크시켜주어야 합니다. Redhat의 경우 : ln -s /usr/X11R6/bin/XF86_FBDev /etc/X11/X 다른배포판의 경우 : ln -s /usr/X11R6/bin/XF86_FBDev /usr/X11R6/bin/X 자신의 배포판에 /etc/X11 이라는 디렉토리가 있고, 그 안에 X , XF86Config 등의 파일들이 있다면, Redhat 호환으로 XF86이 만들어 진 것이므로, 반드시 Redhat의 경우를 따라야 합니다. 4. 프레임버퍼를 이용한 XF86Config 프레임버퍼를 사용하는 XF86Config 는 매우 간단합니다. 다른 X server들과는 달리 Xconfigurator를 사용할 필요도 없습니다. 그 이유는 그래픽 카드에 관련된 설정을 XF86Config에서 하지 않고, 모두 커널의 프레임버퍼 장치 구동에서 이미 하였기 때문입니다. 그러므로 2 절에서 설명한 내용대로 vesafb를 정확히 설정하지 못하였다면 XFBDev는 실행되지 않고 오류를 발생시킬 것입니다. 아래 내용은 XFBDev를 사용하는 전형적인 XF86Config파일의 내용입니다. 이 파일은 /usr/X11R6/lib/X11/XF86Config 에 위치하며, Redhat호환 배포판의 경우에는 /etc/X11/XF86Config 의 파일로 링크가 되어 있습니다. Section "Files" 이 부분은 원래 자신의 XF86Config의 내용을 그대로 둔다. EndSection Section "ServerFlags" EndSection Section "Keyboard" 이 부분도 원래대로 그냥 둔다. EndSection Section "Pointer" 역시 여기도 고치지 않는다. EndSection Section "Monitor" Identifier "Primary Monitor" EndSection Section "Device" Identifier "Primary Card" EndSection Section "Screen" Driver "FBDev" Device "Primary Card" Monitor "Primary Monitor" SubSection "Display" Modes "default" EndSubsection EndSection 이상의 내용 중에서 키보드와 마우스 등의 영역은 처음 설치시에 Xconfigurator에 의하여 자동 설정되는 내용이므로 그 내용을 그대로 두는 것이 좋습니다. 나머지 내용들은 모두 필요없는 내용이므로 모두 삭제하고 위에서 적혀 있는 대로 고쳐 줍니다. 아쉽게도 현재의 3.3.3.1버전에서는 256 이상의 색을 표시할 수 없다는 문제점이 있지만 앞으로 나오는 다음 버전에서는 이 내용이 고쳐져서 Full Color의 표현이 가능할 것이라고 XFree86 개발자들이 밝히고 있습니다. (그러므로 2절에서 설명한 Vesafb를 256이상의 색으로 설정하면 XFBDev가 정상적으로 실행되지 않습니다. 잘못 설정하셨다면 2절의 lilo설정 부분을 참고하여 VGA모드 설정을 바꾸어 주십시요.) 이미 만들어져 있는 XF86Config의 전체 파일을 얻고자 한다면 이 글 맨 마지막에 있는 참고 문서 중에서 Anthony D'Amico 의 페이지를 찾아가 보기 바랍니다. 5. S3 Trio3D 예제 제가 PII-셀러론333 + AGP S3 Trio3D/2X 에서 설정한 과정을 예제로 올립니다. 다른 카드에서도 이와 유사한 과정을 거쳐서 설정이 가능합니다. (1) Alzza 6.0 한글 배포판을 FTP를 통해 설치하였습니다. Alzza 6.0배포판은 이미 /dev 디렉토리에 fb 장치 파일이 이미 존재하고 있었으며, make menuconfig 로 커널의 설정을 보았을 때, 이미, VGA Console의 설정이 모두 완료된 상태였습니다. (2) /etc/lilo.conf 에서 vga=normal 이라고 쓰여진 행을 찾아서 이것을 vga = 773 으로 바꿔 주었습니다. 이렇게 하고 나서 reboot을 하자 예쁜 펭귄 로고가 나타나고, 그래픽 콘솔을 사용할 수 있었습니다. (3) XConfigurator를 실행해서 키보드와 마우스 등의 설정을 자동으로 잡았습니다. 이 때 비디오카드나, 모니터의 설정은 전혀 개의할 필요가 없습니다. (4) Alzza 6.0의 경우에는 Redhat 호환이므로 /etc/X11 디렉토리에 가서 X 를 /usr/X11R6/bin/XF86_FBDev 에 링크시켰습니다. ln -s /usr/X11R6/bin/XF86_FBDev /etc/X11/X (5) /usr/X11R6/lib/X11 에서 vi로 XF86Config 를 편집하였습니다. 4절 참조. (6) startx 명령을 사용하여 이상없이 X가 실행되는지 확인하였더니 잘 실행이 되었습니다. (7) linuxconf 에서 Boot Mode를 graphic mode로 바꾼 다음 reboot. 6. 참고문서들 1. 이국현 님의 vesafb mini-howto 번역 http://kldp.org/HOWTO/mini/Vesafb 2. Anthony D'Amico 님의 3Dfx Banshee Chipset under Linux http://www.uno.edu/~adamico/banshee 3. XFree86 FAQ http://www.xfree86.org/FAQ/ 4. XFree86 새버전 소식 http://www.xfree86.org