프레임버퍼를 이용한
LPP(Linux Progress Patch) 사용하기

필자 : 이우중 (wjlee@debianusers.org)

 

     

    참고문헌:

    커널문서
    Documentation/fb/vesafb.txt by Nico Schmoigl (schmoigl@rumms.uni-mannheim.de)
    Documentation/fb/framebuffer.txt by Geert Utterhoeven (geert@linux-m68k.org)
    Linux Progress Patch
    LPP web site (http://lpp.freelords.org)
    KDTP(Korean Debian Tips Project) 문서: 커널패키지 만들기 - 가락쇠 (galax@debianusers.org)
    kernel-package Man page

    필자의 테스트환경:
    Debian GNU/Linux (SID)
    Kernel 2.4.0

    ----------------------   목차   -------------------------   

    1. 개요
    2. 프레임버퍼란 무엇인가
    3. LPP (Linux Progress Patch) 의 소개
    4. 전반적인 사항에 대한 정리
    5. Lpp 패치및 테마적용하여 리눅스 커널을 컴파일하기
       1) 커널에 LPP 패치 및 테마의 인스톨
       2) 커널컴파일 LPP와 관련된 사항
       3) 데비안에서의 패키지로 커널 빌드하기
    6. lilo 의 설정
    7. 마치며

    -------------------------------------------------------  

 

1. 개요

    이 글에서는 프레임버퍼와 lpp 를 패치하여 커널을 컴파일하는 것을 다루고 있습니다.
    간단한 프레임버퍼의 개념과 소개, 그리고 실제로 프레임버퍼를 활용하는 것 중 하나인 lpp 패치를 통한 그래픽컬한 부트 화면을 구성하는 것을 다룹니다.
    또한 일반적인 컴파일방식은 많이 소개가 되어있으므로 데비안에서 특징인 데비안에서의 커널을 패키지로 빌드하는 방식으로 설치를 하도록 하겠습니다.
    다른 배포본을 사용하시는 분들은 일반적인 방법으로 커널을 컴파일 하시면 됩니다.

 

2. 프레임버퍼란 무엇인가

    먼저 프레임버퍼에 대한 내용을 한번 알아보도록 하겠습니다.
    프레임 버퍼 장치는 그래픽 하드웨어에 대한 추상을 제공합니다.
    하지만 전체가 다 지원되는 것은 아니고 일부 비디오 카드에 한해서만 지원이 되고 있습니다.
    현재 2.4.0 커널에서 제공되고 있는 driver 는 다음과 같습니다.

      [*] Support for frame buffer devices (EXPERIMENTAL)              
          < >   nVidia Riva support (EXPERIMENTAL)                     
          < >   Cirrus Logic support (EXPERIMENTAL)                    
          < >   Permedia2 support (EXPERIMENTAL)                       
          < >   Cyber2000 support                                      
          [  ]   VESA VGA graphics console                              
          < >   VGA 16-color graphics console                          
          < >   Hercules mono graphics console (EXPERIMENTAL)
          < >   Matrox acceleration (EXPERIMENTAL)           
          < >   ATI Mach64 display support (EXPERIMENTAL)    
          < >

       ATI Rage 128 display support (EXPERIMENTAL)
          < >   3Dfx Banshee/Voodoo3 display support (EXPERIMENTAL)
          < >   SIS 630/540 display support (EXPERIMENTAL)         
          < >   Virtual Frame Buffer support (ONLY FOR TESTING!)  

    이중 vesafb 는 일반적인 vesa 2.0 호환 그래픽 카드를 지원하며 위의 목록에 없는 그래픽 카드를 가졌거나 또는 vesa 2.0 호환 그래픽 카드를 사용한다면 이것을 사용하면 됩니다. 또한 필자의 경우 nVidia RIVA TNT II 를 사용하고 있는데 이것 역시 vesafb 로 사용이 가능합니다. 대부분의 인텔플랫폼에서의 그래픽 카드들은 vesa 2.0 호환이므로 vesa 를 사용하는 것을 추천합니다. (아직 다른 드라이버들은 EXPERIMENTAL 상태임을 유의하기 바랍니다.)

    실제적인 사용으로는 /dev/fb 를 통한 X Server 의 이용과(X86_FBdev) 또는 고해상도의 콘솔(그래픽콘솔: 필자의 경우는 800x600 에 65,536 색이 지원되는 콘솔을 사용하고 있다. 하지만 이 경우는 현재의 글에서 다룰 lpp 패치가 화면에 꽉차게 나오지 않기 때문에 미관상, 만약 이렇게 사용하려면 lpp 를 하지 않는 것이 좋다.)
    그리고 이 글의 주제 중 하나인 Linux Progress Patch 의 사용입니다.
    실제 지원되는 해상도와 컬러는 커널소스의 Documentation/vesafb.txt 에 나와있습니다.
    간단하게 살펴보면 다음과 같습니다.
     

     

    640x480

    800x600

    1024x768

    1280x1024

    256

    0x301

    0x303

    0x305

    0x307

    32k

    0x310

    0x313

    0x316

    0x319

    64k

    0x311

    0x314

    0x317

    0x31A

    16M

    0x312

    0x315

    0x318

    0x31B


    자세한 프레임버퍼에 대한 내용은 Documentation/framebuffer.txt 파일과 vesafb.txt 파일을 참고 하시기 바랍니다.

 

3. LPP (Linux Progress Patch) 의 소개 (http://lpp.freelords.org)

    Linux Progress Patch 는 full-screen logo 를 progress bar (윈도우의 시작시에 bar 가 옆으로 채워지는 것을 생각하면 됩니다)와 text 로 된 정보를 부팅하는 동안에 제공하기 위한 커널패치입니다. 실제로 아래의 필자의 부팅시의 화면을 보면 좀더 이해가 빠를 것입니다. 즉 기존의 부팅시에 나오는 메시지들을 숨기고 그 내용을 단순화 해서 화면의 progress bar 밑에 출력하게 됩니다. 예를 들면..starting init... 이런 정도의 메시지들이 바뀌면서 나타나게 됩니다.
    참고 하실 곳은 lpp.freelords.org 에 lpp 의 웹사이트가 있습니다. 이곳에는 각종 테마와 관련 자료들이 있으니 참고하시기 바랍니다. 이 글에서는 Debian theme 을 기준으로 설명하였습니다.

 

4. 전반적인 사항에 대한 정리

    위에서 언급한 바와 같이 vesafb 는 인텔 플랫폼에서 비트맵 텍스트 콘솔을 이용해 그래픽 모드를 사용할 수 있게 해주는 디스플레이 장치입니다.
    대략적인 개념은 부팅시에 BIOS 의 도움을 받아 그래픽 모드를 켜는 것입니다.
    그리고 이것은 위에서 다룬 framebuffer device ( /dev/fb0 ) 를 사용하게 됩니다.
    vesafb 에 대한 내용으로는 위에서 언급한 Documentation/vesafb.txt 파일을 참고 하시기 바랍니다.
    아래는 vesafb 를 사용할 경우의 유용한 점을 잠깐 언급하였습니다.

    유용한점에 대한 정리

    * 그것은 훌륭한 큰 콘솔을 제공합니다.(128 cols + 48 lines with 1024x768)
      제가 테스트 한 바로는 상당히 화면도 깔끔하고 또한 line 및 cols 의 증가에 따라
      마치 기존의 일반 모니터에서 LCD 를 보는 듯한 착각을 일으킬 정도입니다.
    * 또한 XF68_FBDev 를 /dev/fb0 위에서 실행할 수 있습니다.
    * 가장 중요한 Boot logo 를 사용할 수 있습니다.

    다음은 필자의 부트시 실행되는 LPP 에 의한 화면입니다.

     

                 [그림1 : 데비안 테마를 사용한 필자의 부트화면]

 

5. Lpp 패치및 테마적용하여 리눅스 커널을 컴파일하기

    그럼 실제적인 패치와 컴파일을 한번 해보도록 하겠습니다.

    1) 커널에 LPP 패치 및 테마의 인스톨

    일단 커널 소스를 ftp.kernel.org 나 기타 미러사이트로부터 받아옵니다.
    파일을 /usr/src 디렉토리로 옮겨놓고 압축을 풀어 놓습니다.
    그 다음 생성된 linux 디렉토리의 이름을 linux-2.4.0 으로 이름을 바꿉니다.

    sid:/usr/src# tar zxvf ./linux-2.4.0.tar.gz
    sid:/usr/src# mv ./linux ./linux-2.4.0

    다음으로는 lpp 웹사이트에서 lpp 패치와 테마를 받아올 차례입니다.
    테마는 여러가지가 있으나 이 글에서는 debian 테마를 사용하였으므로 debian.tar.gz 파일을 이용하겠습니다.

    http://lpp.freelords.org
    http://lpp.FreeLords.org/download/lpp-0.3.0.tar.bz2 (lpp 최신버전)
    http://lpp.freelords.org/themes/640x480/debian.tar.bz2 (debian 테마파일)

    전체테마는 http://lpp.freelords.org/Themes.phtml 에서 확인하실 수 있습니다.

    테마파일의 해상도는 640x480, 800x600, 1024x768, 1280x1024, 1400x1050
    이러한 해상도로 제공이 되어지는데..자신이 사용할 해상도에 맞는 것을 다운로드 받으면 됩니다. 해상도 설정에 대해서는 이후 다시 언급하도록 하겠습니다.
    하지만 아직까지는 대부분의 테마들은 640x480 밖에 지원을 하지 않고 있으니 이에 유의하여 다운로드를 받으시기 바랍니다.

    lpp-0.3.0-tar.bz2 - 커널 패치 파일
    debian.tar.gz     - 테마 파일

    두개의 파일을 /usr/src 디렉토리에 다운을 받아서 저장합니다. 먼저 lpp-0.3.0-tar.bz2를 압축을 풀어 놓습니다.

    sid:/usr/src# tar jxvf lpp-0.3.0-tar.bz2

    압축을 풀면 lpp-0.3.0 디렉토리가 생성됩니다.
    이 디렉토리 안으로 들어가서 보면 패치 파일이 커널 버전별로 존재합니다.

    sid:/usr/src/lpp-0.3.0# ls
    AUTHORS    README         contrib           pics      theme_install
    CHANGELOG  README.debian  lpp-2.2.18-6.bz2  scripts
    COPYING    TODO           lpp-2.4.0-3.bz2   template

    자세한 활용방법은 README 파일을 읽어보시면 됩니다.

    일단 커널소스 디렉토리로 버전에 맞는 패치를 합니다.

    sid:/usr/src/lpp-0.3.0# cd /usr/src/linux-2.4.0

    sid:/usr/src/linux-2.4.0# bzip2 -cd /usr/src/lpp-0.3.0/lpp-2.4.0-3.bz2

    다음으로는 받아놓은 테마파일을 설치합니다.
    테마파일의 설치는 lpp-0.3.0 디렉토리를 보시면 theme_install 스크립트를 이용합니다.

    sid:/usr/src/linux-2.4.0# /usr/src/lpp-0.3.0/theme_install /usr/src/debian.tar.gz /usr/src/linux-2.4.0

    theme_install 스크립트의 첫번째 인자는 테마파일이며 두번째 인자는 커널소스 디렉토리입니다.

    여기까지 해서 패치를 적용하였습니다.

    2) 커널컴파일 LPP와 관련된 사항

    다음으로는 컴파일 과정입니다.
    커널 컴파일에 대해서는 많은 문서들이 있습니다. 다음과 같은 항목에 주의하셔서 일반적으로 컴파일 하시면 되겠습니다. make config 나 make menuconfig, make xconfig 를 이용하여 설정하는 부분에서 아래와 같은 부분을 꼭 체크하시기 바랍니다.

    Console Drivers -> Video mode selection support
                           -> Support for frame buffer devices (EXPERIMENTAL)
                           -> VESA Framebuffer support (RIVA/MATROX whatever should be ok)
                           -> Enable Linux Progress Patch (EXPERIMENTAL) (NEW)

    이 문서에서는 간략하게 데비안 패키지로 커널을 빌드하는 방식으로 소개를 할까 합니다.

    3) 데비안에서의 패키지로 커널 빌드하기

    데비안에서의 패키징은 다음과 같은 패키지가 기본적으로 설치되어 있어야 합니다.
    debhelper, dh-make, fakeroot, kernel-package(커널을 패키지로 만들 경우)

    kernel-package 가 설치되어 있는 경우 그 설정 파일은 /etc/kernel-pkg.conf입니다.
    아래의 그림은 /etc/kernel-pkg.conf 를 열어서 본 캡쳐 화면입니다.

     

                             [그림2: kernel-pkg.conf]

    자세한 설정에 대해서는 콘솔에서 다음과 같이 하면 맨페이지를 볼 수 있습니다.

    #man kernel-pkg.conf

    그럼 파일을 열어서 다음과 같이 설정하여 보겠습니다.

          maintainer := WooJoong-Lee
          email := wjlee@debianusers.org
          debian := wjlee0.4
          kimage := bzImage
          patch_the_kernel := YES
          config_target := menuconfig
          delete_build_link := YES
          CONFDIR := /usr/share/kernel-package/Config
          CONCURRENCY_LEVEL := 3

    첫 항의 maintainer 는 패키지의 제작자를 적어놓습니다.
    둘째항의 email 은 제작자의 이메일 주소입니다.
    debian 부분은 --revision 옵션으로 따로 설정을 할 수 있는 부분입니다.
    자신이 빌드한 커널의 버전을 집어 넣습니다. 기본 값으로는 1.00 값이 들어갑니다.

    patch_the_kernel 에는 현재 커널을 패치하였으므로 YES 값으로 해줍니다.
    config_target 에는 config menuconfig xconfig 셋 중에 하나를 적어넣으시면 됩니다.
    delete_build_link 부분을 YES 로 설정해준 경우 생성된 커널패키지에 의하여 생기는 lib/modules/$VERSION/build 의 심볼릭 링크를 제거하여 줍니다.
    자세한 사항은 맨페이지를 참고 하시기 바랍니다.

    다음으로 make-kpkg 에 의한 설정을 하려면 .config 파일이 리눅스 소스디렉토리에 있어야 한다. /boot 에보면 config-version 파일이 있다. 이것을 소스디렉토리에 .config 파일로 카피한다.

    #cp /boot/config-2.2.17 /usr/src/linux-2.4.0/.config

    여기까지 설정하여 주셨다면 다음과 같은 명령으로 설정을 시작합니다.

    sid:/usr/src/linux-2.4.0# make-kpkg configure

    그러면 설정해 놓은 대로 menuconfig 화면이 뜹니다.

    아래는 lpp 패치관련 옵션을 설정하는 부분을 캡쳐 한 그림입니다.

                [그림3: 커널 설정부분에서 lpp를 가능하도록 설정]

    설정이 끝나면 패키지를 빌드합니다.

    sid:/usr/src/linux-2.4.0# make-kpkg kernel_image

    컴파일이 끝나면 상위 디렉토리에 kernel-image-2.4.0_wjlee0.4_i386.deb 파일이 생성된 것을 확인할 수 있습니다.
    다음으로는 커널헤더패키지를 만들어줍니다.

    sid:/usr/src/linux-2.4.0# make-kpkg kernel_headers
    역시 마찬가지로 상위 디렉토리에 kernel-headers-2.4.0_wjlee0.4_i386.deb 가 생긴 것을 볼수 있습니다.

    아래는 make-kpkg 의 옵션입니다. 참고 하시기 바랍니다.
     

    Targets

    Automatically builds

    clean
    buildpackage
    binary
             binary - indep
                            kernel_source
                            kernel_doc 
             binary - arch
                            kernel_headers
                            kernel_image
    modules
    modules_image
    modules_config
    modules_clean
    configure



     

    Builds the whole package
    Builds kernel_{source,headers,image,doc}












    If you wish to edit files
    generated by make config
    Creates ./debian dir, and
    optionally patches the source


    마지막으로 생성된 패키지를 설치합니다.

    #dpkg -i kernel-image-2.4.0_wjlee0.4_i386.deb
    #dpkg -i kernel-headers-2.4.0_wjlee0.4_i386.deb

 

6. lilo 의 설정

    먼저 프레임버퍼 장치를 통해 생성될 그래픽 콘솔의 해상도를 정의하여야 합니다.

    /etc/lilo.conf 파일을 열고 vga 옵션을 주어 아래의 표에서 원하는 해상도와 색상을 결정하시기 바랍니다.
     

     

    640x480

    800x600

    1024x768

    1280x1024

    256

    0x301

    0x303

    0x305

    0x307

    32k

    0x310

    0x313

    0x316

    0x319

    64k

    0x311

    0x314

    0x317

    0x31A

    16M

    0x312

    0x315

    0x318

    0x31B


    기본적으로 테마파일이 640x480 이므로 vga=0x301 을 추천합니다.

    다음으로는 append=”console=/dev/tty2 CONSOLE=/dev/tty2”를 추가합니다.

    아래는 필자의 lilo.conf 의 예입니다.

    ----------------------- /etc/lilo.conf ---------------------------

    boot=/dev/hda
    root=/dev/hda6
    compact
    install=/boot/boot-menu.b
    delay=20
    prompt
    map=/boot/map
    vga=0x301
    append=” devfs=mount console=/dev/tty2 CONSOLE=/dev/tty2”
    read-only
    default=Debian
    image=/vmlinuz
         label=Debian
    other=/dev/hda2
         label=Win2000
         table=/dev/hda

    ---------------------------------------------------------------

    설정을 마치고 나와서 콘솔에서 다음과 같이 입력하여 mbr 의 내용을 변경합니다.

    #lilo
    Added Debian *
    Added Win2000

 

7. 마치며

    이것으로 모든 사항이 끝났습니다.
    마지막으로 남은 일은 리붓 하면서 멋있게 뜨는 붉은색 회오리를 감상할 시간입니다.
    리붓하셔서 회오리를 감상하시며 즐거운 리눅싱 되십시오.

    참고: 데비안에서의 modconf 는 아직까지 커널 2.4를 완전하게 지원하지 않고 있습니다.
            데비안 팁프로젝트(http://debianusers.org/tips) 문서를 참고 하시기 바랍니다.




▲ top

home으로...