커널 컴파일
제목 : 커널 컴파일 난이도 : 중급 작성자 : redneval 라이선스 : GFDL 처음 작성일자 : 2009년 6월
목차
목적
데비안에서 리눅스 커널을 컴파일하는 방법에 대해서 알아봅니다.
사전준비
최신 커널 설치
먼저 sid 저장소를 추가해줍시다. 다음 명령어로 /etc/apt/sources.list 파일을 열어서,
sudo gedit /etc/apt/sources.list
다음을 추가해줍니다.
deb http://http.us.debian.org/debian sid main contrib non-free
이제 sid 저장소에 있는 커널을 설치해줍시다.
sudo apt-get update sudo apt-get install linux-image-2.6-686
현재(2009년 6월)는 linux-image-2.6.29-2-686 꾸러미가 설치됩니다.
어떤 버전의 커널이 설치될지는 sid 저장소에 어떠한 버전의 커널이 있느냐에 따라 다릅니다.
꾸러미 이름의 2.6.29 는 커널 버전을 의미합니다.
2 는 (리눅스 커널의 꾸러미를 관리하고 있는) Debian Kernel Team 이 두번째로 업데이트한 것라는 것을 나타내고,
686은 컴퓨터 종류(Architecture)를 나타냅니다. 참고로, 대부분의 PC 는 686 에 해당됩니다.
이제부터 일반화된 설명을 하기 위해서, 커널 버전은 2.[X].[Y] 라고 나타내고, 업데이트 번호는 [Z] 라고 나타내겠습니다.
그러므로, linux-image-2.6.29-2-686 는 이제 linux-image-2.[X].[Y]-[Z]-686 이라고 나타내는 식입니다.
앞으로의 설명에서 나오는 모든 [X], [Y], [Z] 는 해당되는 숫자로 바꿔서 이해해야합니다.
커널 설치가 끝났으면 재부팅해봅시다.
sudo reboot
부팅시에 커널 선택 화면(Grub)이 나타나는데,
방금 설치한 `Debian GNU/Linux, kernel 2.[X].[Y]-[Z]-686' 를 선택하여 부팅합니다.
설치 확인
먼저 부팅이 잘 되었나 확인합니다.
이제 uname -r 명령어로 현재 사용 중인 커널의 버전을 확인해봅시다.
redneval@Horus:~$ uname -r 2.[X].[Y]-[Z]-686
부팅 과정에서 중요한 파일들은 /boot 에 위치합니다.
redneval@Horus:~$ ls /boot | grep 2\.[X]\.[Y] System.map-2.[X].[Y]-[Z]-686 config-2.[X].[Y]-[Z]-686 initrd.img-2.[X].[Y]-[Z]-686 vmlinuz-2.[X].[Y]-[Z]-686
네 개의 파일이 있는지 확인하면 됩니다.
이 중에서 config-2.[X].[Y]-[Z]-686 은 커널 컴파일 옵션이 저장된 파일입니다.
뒤에서 커널을 컴파일할 때 사용할 것입니다.
커널 선택 화면(Grub)의 설정 파일인 /boot/grub/menu.lst 도 구경해봅시다.
redneval@Horus:~$ cat /boot/grub/menu.lst | grep Debian title Debian GNU/Linux, kernel 2.[X].[Y]-[Z]-686 title Debian GNU/Linux, kernel 2.[X].[Y]-[Z]-686 (single-user mode)
기타 필요한 꾸러미 설치
커널을 컴파일하기 위해서 필요한 몇 가지 꾸러미를 설치합니다.
sudo apt-get build-dep linux-2.[X] sudo apt-get install build-essential fakeroot procps
커널 컴파일 준비
커널 컴파일하기 위한 작업용 디렉터리를 새로 만들고, 그 곳으로 이동합시다.
예를 들면, 다음과 같이 합니다.
mkdir ~/kernel-compile cd ~/kernel-compile
이번에는 커널의 소스 코드를 받습니다.
sudo apt-get install linux-source-2.[X].[Y] cp /usr/src/linux-source-2.[X].[Y].tar.bz2 . tar xvfj linux-source-2.[X].[Y].tar.bz2 cd linux-source-2.[X].[Y]
< 참고 (선택사항) >
만약 컴퓨터의 CPU의 코어가 여러 개라면 다음과 같은 설정을 하는 것이 유리할 수 있습니다. 하지만 커널 컴파일 경험이 없는 사용자라면 이 부분은 그냥 넘어가는 것이 좋습니다. 어쨌거나 설정하기 위해서는, /etc/kernel-pkg.conf 에 다음 한 줄을 추가합니다. (참고 : man kernel-pkg.conf) CONCURRENCY_LEVEL = 2 듀얼코어라면 2 로 하고, 쿼드코어라면 4 로 설정하면 됩니다. |
커널 컴파일 옵션 설정 준비
kernel 2.[X].[Y]-[Z]-686 의 커널 컴파일 옵션 파일을 복사해옵시다.
cp /boot/config-2.[X].[Y]-[Z]-686 .config
그 다음은 커널 컴파일 옵션 설정하는 단계입니다.
커널 컴파일 옵션을 설정하기 위한 방법에는 make xconfig 와 make menuconfig 가 있습니다.
명령어 | 의존성을 해결하기 위한 명령어 |
---|---|
make xconfig | sudo apt-get install libqt3-mt-dev |
make menuconfig | sudo apt-get install ncurses-dev |
둘 중에서 make xconfig 를 사용할 것을 추천합니다.
그러므로 libqt3-mt-dev 꾸러미가 설치안되었다면 다음과 같이 설치해주고,
sudo apt-get install libqt3-mt-dev
make xconfig 명령어를 실행하여 커널 컴파일 옵션 설정 프로그램을 실행합니다.
make xconfig
커널 컴파일 옵션 설정하기
이 부분이 가장 중요한 단계입니다.
이 단계에서 커널 컴파일 옵션을 잘못 설정하게 되면, 부팅이 안되거나 기능이 잘 동작하지 않는 커널이 생성될 수도 있습니다.
그러므로 잘 모르겠으면 옵션을 건드리지 않고 그냥 넘어가도록 합시다.
컴파일 및 꾸러미 생성
설정이 끝났으면 이제 컴파일하는 단계입니다.
데비안에서는 커널 꾸러미를 자동으로 생성해주는 make-kpkg 라는 프로그램이 있습니다.
(참고로, make-kpkg 는 kernel-package 꾸러미에 포함돼있습니다.)
다음 명령어를 입력하면 됩니다. 참고로 컴퓨터의 사양에 따라 1시간이상 걸리기도 합니다.
make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-custom --revision=1.0 kernel_image kernel_headers
--append-to-version 옵션을 주면 꾸러미의 이름을 약간 바꿀 수 있고,
--revision 옵션으로 꾸러미의 버전을 바꿀 수 있습니다.
위와 같이 하면 linux-image-2.[X].[Y]-custom 과 linux-headers-2.[X].[Y]-custom 의 두 개의 꾸러미가 생성되며 꾸러미의 버전은 1.0 이 됩니다.
설치 및 확인
이제 생성된 꾸러미를 설치합니다.
cd .. sudo dpkg -i linux-image-2.[X].[Y]-custom_1.0_i386.deb linux-headers-2.[X].[Y]-custom_1.0_i386.deb
재부팅하여 커널이 잘 동작하는지 확인합시다.
커널 버전도 확인해봅시다.
redneval@Horus:~$ uname -r 2.[X].[Y]-[Z]-custom
마무리
맨 처음에 추가해줬던 sid 저장소를 빼주는 것도 잊지 맙시다. /etc/apt/sources.list 를 열어서,
sudo gedit /etc/apt/sources.list
다음 부분은 지워줍시다.
deb http://ftp.us.debian.org/debian/ sid main