Linux kernel에서의 Frame buffer 활성화
1. Linux kernel에서의 Frame buffer 활성화
배포되는 Linux 마다 상이하겠으나, X 기반의 GUI가 기본 탑재되는 최근의 배포판에서는 커널에서 Frame buffer를 disable시켜 두는 경우가 대부분이다. Frame buffer가 enable인지 disable인지를 확인하기 위해서는 다음과 같은 방법이 있다.
1) 부팅 시 펭귄로고를 확인한다.
: 이 방법은 Linux 부팅 시 GUI login 화면에서는 확인이 되지 못하므로, 본 문서를 읽고 계시는 분들은 아마도(?) 확인이 되지 않을 것이다. 보통의 배포판에서는 XDM(Gnome/KDE 기반)이 구동되므로 약간의 설정을 통해 콘솔 로그인이 가능하도록 전환을 하여한다.(즉, X11이 구동되지 않도록)
/etc/inittab 을 vi/vim/gui 문서편집기 등을 이용하여, 열면 다음과 같은 내용이 있다.
=================================
<생략>
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
<생략>
==================================
여기서, id:5:initdefault: 는 #5 즉, X server를 통한 부팅이라는 의미이다.
이것을 id:3:initdefault 로 변경하면, X11 구동 없이 콘솔 로그인화면이 뜨게 되며, 이때 부팅시 펭귄 로고를 확인하면 된다.
하지만, 앞으로의 작업을 위해 XDM환경이 효율적이므로, 당분간은 이 작업을 미뤄두도록 한다. Minimo 빌드가 끝나고, 이를 확인하기 위해서 지금의 작업을 수행할 것이다.
sudo update-rc.d -f gdm remove (X disable) Kde session user는 gdm을 kde로 치환 적용
sudo update-rc.d gdm defaults (X enable)
- 본 문서에서는 vi editor의 사용법에 대해서는 따로 다루지 않도록 합니다. 제공하는 GUI 텍스트 편집기를 이용하거나, vi의 사용법을 파악하여, 해결하기를 당부드립니다.
2) 현재 커널의 환경설정을 통해 확인한다.
: GUI 환경을 유지한 상태로, Frame buffer 의 enable/disable을 확인하기 위하여, 현재 사용중인 커널의 환경설정을 확인하도록 한다.
커널 설정을 확인하는 방법 또한 두 가지이다. Ncurses lib를 이용한 menuconfig와 X기반의 xconfig가 그것이다.
Menuconfig는 GUI 환경이 없을 경우 사용되는 방법이며, libncurses 라이브러리가 설치되어 있어야 하기 때문에 xconfig를 사용하도록 한다. Libncurses는 시냅스틱꾸러미나
apt-get을 통해서 설치할 수 있다. (ex. apt-get install libncurses )
- xconfig 의 사용
bash:~$ cd /usr/src/linux-kernel
bash:~$ make xconfig
이상과 같이 입력할 경우 gui기반의 커널 설정 윈도우가 출력된다.
여기서 다음과 같이 확인을 한다.
Device Driver > Graphics support > Support for frame buffer devices
여기서 Support for frame buffer devices가 enable 되어 있다면, 현재 사용중인 커널은 frame buffer이 enable 된 상태로, 빌드되어 있다는 것이므로, 제1장을 과감히 통과 할 수 있다. 하지만! 당연히 안되어 있을 것이다.
아쉽게도 본 장에서의 여정을 위해 전진 하도록 한다.
추가] /usr/src 에서 ls 명령을 통해 해당 디렉토리의 내용을 확인할 경우, 커널이 여러 개일 수가 있습니다. 이럴 경우, 현재 사용중인 커널의 버전을 알기 위해서 다음과 같이 할 수 있습니다.
bash:~$ uname –a
Linux <컴퓨터이름> [커널버전] 기타정보
이상에서 커널버전을 확인한 후 /usr/src/[현재 사용 커널의 디렉토리]에서 xconfig를 실행하면 됩니다.
Frame buffer enable 설정후 커널 빌드를 통해 활성화 시키는 방법 대신 더욱 간편한 방법을 찾게 되어 덧붙입니다.
/boot/grub/menu.lst 에서
title Ubuntu, Kernel 2.6.20-15-generic
root (hd0,0)
kernel /boot ~~~~~중략~~~~~ splash vga=792 locale=ko_KR
.
.
.
title Ubuntu, Kernel 2.6.20-15-generic (recovery mode)
root (hd0,0)
kernel /boot ~~~~~중략~~~~~ single vga=792
Red font 부분을 추가하시면, 커널 빌드 없이 Frame buffer를 사용할 수 있습니다.
Ubuntu에서 Test 하였으며, 타 Linux에서는 상이 할 수 있습니다.
위 설정 후, 아래의 커널 설정 및 빌드 과정을 생략하셔도 됩니다.
- 커널 다운로드
본 절을 읽고 있으시다면, 분명 현재 사용중인 커널이 disable frame buffer일 것이다.
이제부터 본격적으로 커널 설정과 빌드를 위한 단계를 시작할 것이다.
커널 빌드를 위한 준비를 위해, 커널빌드시 필요한 패키지를 우선 설치한다.
bash:~$ sudo apt-get install build-essential fakeroot kernel-package
패키지 설치가 완료되었으면, 자신의 아이디 권한에 src 그룹의 권한을 부여한다.
my_username은 자신의 로그인 아이디로 치환하도록 한다.
bash:~$ sudo adduser my_username src
bash:~$ su my_username
bash:~$ groups
my_username src audio adm dialout cdrom floppy video plugdev lpadmin
해당 그룹에 src가 있는 것을 확인한다.
관련 작업이 완료되었다면, 이제 커널을 다운로드 하자.
bash:~$ sudo apt-get install linux-source
/usr/src에 커널소스가 다운로드 되어있는지 확인한 후 해당 소스의 압축을 푼다.
bash:~$ cd /usr/src
bash:/usr/src$ ls -l
linux-source-2.6.12.10.tar.bz2
bash:/usr/src$ tar xjvf linux-source-2.6.12.10.tar.bz2
작업을 간단히 하기 위하여, 압축이 풀어진 linux kernel을 linux로 링크를 한다.
bash:/usr/src$ ln -s linux-source-2.6.12.10 linux
-s 옵션은 soft link 이다. 디렉토리는 hard link가 되지 않기 때문이다.
bash:/usr/src$ ls
linux@ linux-source-2.6.12.10/ linux-source-2.6.12.10.tar.bz2
와 같이 보인다면, 완료이므로 다음 단계로 넘어간다.
- 커널 설정하기
커널 설정을 위해서는 menuconfig 또는 xconfig를 사용하여야 한다.
menuconfig를 위해서는 libncurses-dev 가 설치되어야 하고,
xconfig를 위해서는 libqt3-dev가 설치되어야 한다.
해당 패키지의 설치를위해서는 GUI메뉴에서 시냅스틱꾸러미를 이용하거나, apt-get 명령을
사용하면 될 것이다. (ex. apt-get install libqt3-dev )
여기서는 xconfig를 사용하도록 한다.
우선, 현재 사용중인 커널의 설정을 유지하면서, frame buffer를 enable 시키기 위해 현재 커널의 설정파일을 작업할 커널의 소스로 copy를 한다.
bash:$ cd /usr/src
bash:/usr/src/$ cd linux-2.6.12.10
bash:/usr/src/linux-2.6.12.10$ cp /boot/config-`uname --kernel-release`
./.config
bash:/usr/src/linux-2.6.12.10$ cd /usr/src/linux
bash:/usr/src/linux$ make xconfig (ex. make menuconfig )
위와 같이 콘솔에 입력 하게 되면, xconfig 화면이 뜰 것이다. 만약 설정화면이 뜨지 않는다면, 이 장의 처음부터 다시 점검하도록 한다.
xconfig 윈도우가 정상적으로 출력되었다면, 이제 frame buffer를 enable 하기 위해 약간의 설정을 하자.
Code maturity level options > Prompt for development and/or incomplete code/dribers
Device Drivers > Graphics support > Support for frame buffer devices > 그래픽카드 체크
Device Drivers > Graphics support > Console display driver support > Framebuffer Console support > Framebuffer Console Rotation
이상과 같이 설정이 완료 되었으면, 설정을 저장하고 xconfig를 종료한다.
menuconfig의 경우도 이상의 설정과 동일하다.
혹시나 환경 설정 중에 무언가 잘못되지 않았을까 하는 의구심은 버리자. 잘못 되었다면, 이장의 처음부터 다시 시작하면 그뿐이다. :)
필자 또한 삽질을 많이 했기에, 삽질을 적극 강추 한다. ;;
- 커널 빌드하기
커널을 빌드하기 위해서는 "make-kpkg"를 실행해야 한다. make-kpkg는 쉘 스크립트로, 자동으로 "make dep; make clean; make bzImage; make modules"를 순서대로 실행해 준다.
make-kpeg의 사용법에 대해서는 본 문서를 읽는 본인의 필요에 의해 추가적으로 검토해 볼 수도 있을 것이다.
bash:/usr/src/linux $ fakeroot make-kpkg clean
bash:/usr/src/linux $ fakeroot make-kpkg --append-to-version=.fb01 kernel_image --initrd binary
-append-to-version 은 해당 커널의 버전명에 자신이 컴파일한 커널의 버전을 추가로 붙여준다. 예를 들어 linux-kerne-2.6.0.1의 커널에 위와 같이 옵션을 줄 경우 linux-kernel-2.6.0.1.fb01 이 될 것이다. 이는 커널 관리를 위해 필요하므로, 가능하다면 반드시 버전관리를 위해서 붙여주도록 하자. fb01은 해당 커널이 framebuffer 모듈이 활성화 되었다는 의미로 붙여 주었다 ;;
위와 같이 콘솔에 명령을 입력하였다면, 이제 커널을 빌드하는 자신의 pc를 볼것이다.
커피나 담배 타임을 갖도록 하자 ;;
- 커널 이미지 팩키징
우선 빌드가 완료되었는지를 확인한다.
bash:/usr/src/linux$ cd ..
bash:/usr/src$ ls
kernel-image-2.6.12.10.fb01.00.Custom_i386.deb
linux@
linux-source-2.6.12.10/
linux-source-2.6.12.10.tar.bz2
해당 디렉토리에 deb 파일이 생성이 되었다면, 빌드에 성공한 것이다.
이제 빌드된 커널을 적용한다.
bash:/usr/src$ sudo dpkg -i kernel-image-2.6.12.10.fb01.00.Custom_i386.deb
패키징 작업이 완료되면, linux를 리부팅 한다. 만약 새로운 커널이 부팅되지 않는다면,
'Linux > Linux 일반' 카테고리의 다른 글
Ubuntu 7.10 에서 프레임버퍼 콘솔 사용하기 (0) | 2009.02.07 |
---|---|
우분투에서 ffmpeg 설치하기 (2) | 2009.02.04 |
make (0) | 2009.02.04 |