Custom Kernel 컴파일링 & 설치하기

얼마전에 우리는 우분투 사이트에서 커널을 다운받아서 업그레이드를 해봤습니다.
http://bagjunggyu.blogspot.kr/2013/11/linux-kernel-nvidia.html
참 간단하고 쉽게 업그레이드 할 수 있었습니다.

오늘은 커널을 직접 컴파일 해서 설치하는 과정을 살펴 보겠습니다.
일반적으로 배포되는 리눅스 OS들의 커널은 generic 입니다.
대개의 컴퓨터에 이용 가능한 버전들이죠.

오늘 우리가 해볼 것은 우리집 컴퓨터에 맞게 커널을 만들어서 설치하는 것입니다.
커널에 관한 설명은 정말 설명이 잘 되어 있는 글이 있습니다.
꼭 읽어보시길 바랍니다. 
http://www.linux.org/threads/%EF%BB%BFthe-linux-kernel-introduction.4203/
위의 글의 내용중에 커널에 대한 설명을 조금 번역해봤습니다.

"커널이란 운영체제의 핵심입니다. 
운영체제란 하드웨어를 관리하고, 컴퓨터에서 어플리케이션들을 사용할수 있게 해주는 모든 프로그램들의 집합입니다. 
커널이 하드웨어와 어플리케이션을 조종합니다. 
어플리케이션들은 하드웨어와 직접소통하지는 못하고, 대신 커널에 신호를 보냅니다. 
요약하면, 소프트웨어가 커널에 신호를 보내면 커널이 하드웨어를 작동하는 겁니다. 
커널이 없다면, 컴퓨터는 사용할수 없는 물건입니다."

우선 방법은 일반적인 방식인 make 와 make install 을 이용해서 컴파일 하고 설치하는 방식과

deb 패키지를 만들어서 설치하고 지우는 방법들에 관해서 총괄적으로 살펴 보겠습니다.
linux Mint 13 Maya Mate 에서 하겠습니다.
하드 디스크에 여유 공간이 10GB이상 있어야 합니다.

1) make install로 설치하는 방법

일반적인 방식으로 모든 리눅스 os에서 가능한 방식입니다.
우선 https://www.kernel.org/ 에서 설치할 커널을 다운받습니다.
Latest Stable Kernel 이 가장 최신버전입니다.
RC 버전은 Release Candidate 버전들로 아직 안전성이 확정 되지 않은 출시 대기중인 버전입니다.
 https://www.kernel.org/

1) 커널을 컴파일 하려면 우선 menuconfig 설정을 위해 libncurses5-dev 가 필요합니다.
sudo apt-get install libncurses5-dev

2) 커널 업그레이드 후에 프로그램들이 설치되지 않을 것을 대비해서 미리 모든 프로그램들을 업그레이드 해둡니다.
sudo apt-get update && sudo apt-get upgrade

3) 다운 받은 폴더로 가서 압축 파일을 /usr/src 에 풉니다.
cd 다운로드 , 또는 cd Downloads 
sudo tar -xvf linux-3.12.6-tar.xz -C /usr/src

4) 커널을 컴파일할 폴더로 갑니다.
cd /usr/src/linux-3.12.6

5) 먼저 커널설정을 합니다. 
자신의 컴퓨터에 맞게 설정을 하는 부분입니다. 
새로 설정을 하시려면
sudo make menuconfig

64-bit 이시면 space bar누르셔서 선택하시고요, 등등 자신의 컴퓨에 맞게 설정을 하는 곳입니다.
모르시면, 그대로 Save를 하시고 Exit을 하셔도 됩니다.
해당 항목에서 를 누르면 설명이 나옵니다. <esc>를 두번 누르시면 항목에서 나가기고요,
저렇게 색깔있는 굵은 글자가 단축키랍니다.

Processor type and features ---> 에서 자신의 CPU에 해당하는 항목이 나옵니다.

이전의 설정을 그대로 이용하실 때는
sudo make oldconfig

6) 컴파일 하고, 모듈을 설치하고, 커널을 설치합니다.시스템에 따라 다르지만,오래 걸립니다.
저는 4시간 정도 걸리더군요
sudo make 
sudo make modules_install
sudo make install 

7) /boot 디렉토리 안에 4개의 파일이 있나 확인 합니다.
ex)
System.map-3.12.6
vmlinuz-3.12.6
initrd.img-3.12.6
config-3.12.6

이렇게 커널 설치는 끝났습니다. 재부팅 하시면 됩니다.
커널 컴파일을 위해서 /usr/src 에 만들어진 linux-3.12.6 폴더가 7GB 가까운 용량을 차지합니다.
설치를 마치신후에 지우시길 바랍니다.
sudo rm -rf /usr/src/linux-3.12.6

8) 커널 제거하기
우선 커널은 두개를 운영 하시는게 좋습니다.이전 버전을 백업 용도로 쓰는 겁니다.
제거 하시려면 , 우선 다른 버전의 커널로 부팅 합니다.

일반적으로 우분투 계열이나 데비안은 데비안 패키지로 설치하기 때문에 
dpkg -l | grep linux-image 하면 설치된 커널이 나오며, sudo apt-get remove 를 통해서 지워집니다. 

물론 추천 하는 방법은 Ubuntu-Tweak을 이용하는 것입니다.

하지만, 이렇게 설치한 커널은  일반적인 sudo apt-get remove 로 지워지지 않습니다.
그래서 , Ubuntu-Tweak으로도 지워지지 않습니다.
직접 찾아서 지워야 합니다.

/lib/modules 에서 지울 버전의 폴더 지우기
* /boot 에서 4개의 파일을  지웁니다. ex) System.map-3.12.6 , vmlinuz-3.12.6 , initrd.img-3.12.6 , config-3.12.6
* sudo update-grub 해서 변경된 커널 설정을 적용합니다.

2) fakeroot로 deb 패키지를 만들어 설치하는 방법 
이번엔 우분투 소스를 다운 받아서 deb 패키지를 만들어서 설치하는 방법을 알아 보겠습니다.
시간도 반으로 줄어 듭니다. 2시간 30분 정도 걸립니다.
두가지 방법을 알려 드리겠습니다. 선호하는 방법으로 하세요
두 번째는 커널에 내가 원하는 이름을 붙일 수 있는 방법입니다.

1)  커널 deb 패키지 만들기에 필요한 도구들을 설치 합니다.
sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge
sudo apt-get install git git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev
sudo apt-get install linux-source device-tree-compiler

2) 커널 deb 패키지 빌드를 위한 폴더를 만들고, 그 폴더로 이동합니다.
cd
mkdir kernel
cd kernel

3) git 에서 커널 소스를 다운받습니다. 우분투의 배포판 별로 있습니다.
어떤 커널들인지 궁금하시면 이곳에 가셔서 확인해 보세요
http://kernel.ubuntu.com/~kernel-ppa/mainline/

우분투 14.04 trusty
git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
우분투 13.10 saucy
git://kernel.ubuntu.com/ubuntu/ubuntu-saucy.git
우분투 13.04 raring
git://kernel.ubuntu.com/ubuntu/ubuntu-raring.git
우분투 12.10 quantal
git://kernel.ubuntu.com/ubuntu/ubuntu-quantal.git
우분투 12.04 precise
git://kernel.ubuntu.com/ubuntu/ubuntu-precise.git

저는 최신 버전인 14.04 trusty-tahr의 커널을 다운받아 설치하겠습니다.
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git

4) 다운받은 커널 소스의 폴더로 이동합니다.
cd ubuntu-trusty

5) 커널 설정 파일을 생성합니다. 커널 설정은 위의 menuconfig 에 해당합니다. 
chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs

6) 커널 빌드 하기
fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic

이렇게 해서 deb 커널 패키지를 만들었습니다.
생성된 파일은 ubuntu-trusty 의 상위 디렉토리 ~/kernel 폴더에 있습니다.

7) 설치는 ~/kernel 폴더에 가셔서
sudo dpkg -i linux-headers-3.12.6-*.deb, linux-headers-3.12.6-*_all.deb, linux-image-3.12.6-*.deb
3개를 설치하시면 됩니다.  

8)  설치한 커널 지우기는, 다른 버전의 커널로 부팅하신후에
sudo apt-get remove --purge -y linux-headers-3.12.6-* linux-image-3.12.6-* 
하시면 됩니다.

3) make-kpkg를 이용해서 deb 패키지를 만들고, 커널에 자신이 원하는 이름을 붙여 넣는 방법
이 방법은 deb 커널 패키지를 만들면서, 커널의 버전명에 자신만의 레이블을 새겨넣을 수 있습니다.
정말 커스텀 커널 맛이 제대로 납니다.

설치 소스는 kernel.org나 ,  ubuntu source 둘 다 가능합니다.

1) deb 커널 패키지 만들기에 필요한 도구 설치
sudo apt-get install git kernel-package libncurses5 libncurses5-dev

2) 커널 deb 패키지 빌드를 위한 폴더를 만들고, 그 폴더로 이동합니다.
cd
mkdir kernel
cd kernel

3) Kernel.org 에서 다운 받거나, git 에서 커널 소스를 다운 받아 여기에 압축을 풉니다.
https://www.kernel.org/ 
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git 

4) 다운받은 커널 소스의 폴더로 이동합니다.
cd ubuntu-trusty ,또는  cd linux-3.12.6

5) 먼저 커널설정을 합니다. 
자신의 컴퓨터에 맞게 설정을 하는 부분입니다. 

새로 설정을 하시려면
sudo make menuconfig

이전 설정을 불러 들이시려면
sudo make oldconfig

6) deb 커널 패키지 작성
sudo make-kpkg 또는
sudo make-kpkg -j 2 --initrd --append-to-version=-bagjunggyu-kernel kernel-image kernel-headers

숫자 2cpu 갯수입니다.

바로 여기서 레이블을 붙일 수 있습니다.
--append-to-version=-원하는 이름-kernel 

파일들은 지금 작업한 폴더의 상위 폴더에 만들어 집니다. 

설치는 해당 폴더에서 
sudo dpkg -i *.deb 하시면 됩니다.

지우기는 위의 방법과 같습니다.
자신의 컴퓨터에 맞춘 커널을 만들어서 이용하는 방법에 관해서 알아 봤습니다.

참조)
http://www.howopensource.com/2011/08/how-to-compile-and-install-linux-kernel-3-0-in-ubuntu-11-04-10-10-and-10-04/
https://wiki.ubuntu.com/Kernel/Dev/KernelGitGuide?action=show&redirect=KernelTeam%2FKernelGitGuide
https://help.ubuntu.com/community/Kernel/Compile#Alternate_Build_Method%3a_The_Old-Fashioned_Debian_Way
https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
http://askubuntu.com/questions/163298/whats-a-simple-way-to-recompile-the-kernel



댓글

  1. 정보 감사합니다.

    블로그가 카테고리가 없어서 보기가 좀 불편하네요..ㅜㅜ

    답글삭제
    답글
    1. 네 맞아요, 카테고리를 만들 수 가 없네요,
      그래서 카테고리 별로 정리한 곳이 blog.daum.net/bagjunggyu 와 blog.naver.com/bagjunggyu 입니다.
      이렇게 3곳 모두다 같은 내용입니다.
      답글 달기도 쉽고해서 다음과 네이버를 주로 대화의 창구로 이용한답니다.

      삭제

댓글 쓰기