본문으로 바로가기

[Ubuntu] How to Kernel Compile

category ETC... 2019. 10. 20. 10:29

우분투를 사용하면서 원하는 버젼의 커널을 사용하거나, 커널 코드 변경으로 인해 커널을 컴파일해야할 경우가 많다.

따라서 간단히 커널 컴파일 방법에 대해 소개하려 한다.

 

커널은 아래의 kernel Archives를 제공하는 사이트에서 다운 받을 수 있다. 커널은 계속 업데이트되고 변경되고 버려지기 때문에 되도록 Stable kernel version을 다운로드 하는것을 추천한다.

 

1. 커널 다운로드

 

https://www.kernel.org/

 

The Linux Kernel Archives

 

www.kernel.org

필자는 최신 버전을 선택했지만, 원하는 버전에 맞춰 다운로드하면 된다.

 

 

"Save File" 옵션을 선택한다. 일반적으로 Save File 옵션을 선택하면 ~/Download 위치에 다운된다.

 

 

 

2. 컴파일 주요 패키지 설치 & 커널 압축 해제

 

커널 설치, 환경 설정을 하기 위해서 반드시 설치해야하는 패키지들이 존재한다.

아래의 명령어를 통해 컴파일시 주요 패키지를 설치할 수 있다.

 

$sudo apt-get update

$sudo apt-get install build-essential libncurses5 libncurses5-dev bison flex libssl-dev libelf-dev bin86 kernel-package

 

 

다운받은 kernel의 형태는 linux-[kernel version].tar.xz로 되어 있다.

 

xz로 압축을 풀면 linux-[kernel version].tar로 풀리고

tar로 한 번더 압축을 풀면 linux-[kernel version]으로 풀린다.

 

$sudo xz -d linux-[kernel version].tar.xz

$sudo tar -xvf linux-[kernel version].tar

 

 

3. 커널 컴파일 .config 설정

 

새로운 커널을 설치할 때 이전에 사용한 정보들을 가져갈지 새롭게 설치할지 선택해야한다.

 

여기서는 새롭게 설치한다는 내용이지만 이전 정보들을 가져가고 싶다면 /boot/config-[kernel version] 파일을 복사 후 menuconfig에 복사한파일을 넣어주면 된다.

 

컴파일하기전 .config 파일을 설정할 필요가 있으므로 .config를 만들기 위해 아래의 명령어를 사용한다.

 

$sudo make menuconfig

 

위의 명령어는 반드시 커널 디렉토리 내부에서 해야한다.

 

 

그렇다면 아래와 같은 환경을 만날 수 있다. 만일 이전 정보들을 복사했다면 Load를 통해, 새롭게 설치한다면 "Save"를 누르면 된다.

 

 

 

Save를 누르면 다음과 같은 화면이 나오고 OK를 누르면 된다. 이렇게 된다면 기존에 있던 .config 파일이 덮어쓰게 되어서 이전 작업들이 사라지니 주의하자.

 

Exit로 나오면 "End of the configuration" 문구를 만날 수 있고, 잘 설정이 적용된것이다.

 

 

 

4. 커널 컴파일 과정

 

커널 컴파일은 오래 걸리는 작업인데 make -j#을 통해 thread로 나누어 컴파일 할 수 있다.

다만, CPU core의 1.5배~2배가 적당하므로 개인 PC 환경에 맞춰 컴파일 하면 된다.

 

$sudo make-kpkg -j2 --initrd --revision=1.0 kernel_image

 

옵션에 대해서 간단히 설명하면 다음과 같다.

 

make-kpkg: 커널과 관련된 데비안 패키지를 생성하기 위해 사용하는 옵션이다.

-j2: 2개의 thread로 컴파일을 진행한다.

--initrd:

--revision=1.0: 버전 번호는 커널 빌드를 좀 더 쉽게 파악하기 위한 번호이다. 마음대로 수정 가능하다.

kernel_image: kernel_image가 설치할 수 있는 deb로 만들어진다. 즉, [kernel version].deb의 output이 나온다.

 

커널 컴파일이 끝나면 상위 디렉터리에 linux-image-[kernel version].deb파일이 생기는 것을 확인할 수 있다.

 

 

 

$sudo dpkg -i linux-image-[kernel version].deb 커널을 설치 후 reboot 하면 완료이다

 

 

reboot 후에 아래의 명령어를 통해 새로운 커널이 설치되었음을 확인할 수 있다.

 

$uname -r