Linux Kernel Compile

SeongWon Oh·2021년 7월 15일
0

Linux

목록 보기
1/2

👋🏻 Introduction

컴퓨터에서 커널은 운영체제를 구성하는 프로세스와 운영체제의 제어 아래에서 실행되는 프로그램에 대해 자원 할당을 하는 일을 담당한다.

Ubuntu홈페이지에서 다운을 받아 사용하는 Ubuntu 배포판은 사용자들이 미리 정의된 커널 설정을 기반으로 편하게 사용하게 해줍니다.

하지만 때때로 우리는 커널의 여러 옵션을 활성화/비활성화를 하여야 하는 상황이 발생하기도 합니다.

본 글에서는 커널을 빌드하고 컴파일하는 방법에 대해 단계별로 설명합니다.



💻 Kernel Compile Step

Step1. 커널 파일 다운로드

공식 커널 웹사이트에 들어가서 자신에게 필요한 버전의 커널을 다운로드 합니다.
다운받은 커널 파일에는 소스코드가 포함되어 있습니다.

소스코드를 터미널에서 wget 명령어를 통해 다운로드할 경우 아래의 명령어를 사용합니다.

$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.13.2.tar.xz

Step2. 소스코드 추출

커널 파일을 다운로드 한 위치로 이동을 한 뒤 다운로드 한 파일의 압축을 해제하여 소스코드를 추출합니다. 압축 해제를 완료하면 아래의 사진과 같이 추출된 코드들을 확인할 수 있습니다.

$ tar xvf linux-5.13.2.tar.xz

Step3. 필수 패키지 설치

커널을 빌드 하기 전에 필수적으로 필요한 패키지를 설치합니다.

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

Step4. Kernel configuration(.config)파일 생성

Step2에서 커널 파일 압축을 풀어서 만들어진 폴더로 이동한 뒤 현재 커널의 configuration file을 복사해 줍니다.

$ cd linux-5.13.2
$ cp -v /boot/config-$(uname -r) .config

※ .config파일이 안 보이는 경우
config파일이 숨겨진 것임으로 GUI탐색기에서는 Ctrl+h
터미널에서는 ls-a를 통해 확인할 수 있습니다.


Step5. Kernel configuration(.config)파일로 커널 설정

커널 설정은 Step4에서 생성한 .config파일을 기반으로 설정합니다.
설정은 사용자 편의에 따라 menuconfig 또는 텍스트 에디터를 통해 할 수 있습니다.

※ menuconfig를 통해 설정을 하고자 한다면 아래의 명령어를 입력해 menuconfig를 실행하여 커널 설정을 합니다.

$ make menuconfig
> ※ 커널 설정의 경우는 설정 간의 의존성 때문에 잘못된 설정을 하게 된다면 Step6에서 오류가 발생할 수 있습니다. '.config'파일을 변경할 때는 설정 간의 의존성을 잘 확인하고 변경하여야 합니다.

Step6. 커널 빌드 및 설치

Step 5에서 사용자가 설정한 .config파일을 기반으로 커널 빌드 및 설치를 합니다.
진행 순서는 커널 빌드, 필요한 모듈 설치, 커널 설치 순으로 진행됩니다.

$ make
$ sudo make modules_install
$ sudo make install 

※ 커널 빌드의 경우 많은 시간이 소요됩니다.
※ 커널 빌드는 많은 용량이 필요하니 충분한 디스크 공간을 확보한 후 빌드 하여야 합니다.


Step7. 재부팅

Step1~6의 과정이 모두 끝났다면 시스템을 재부팅합니다.
재부팅을 한 다음에는 uname 명령어를 통해 커널 버전이 변경되었음을 확인할 수 있습니다.

$ uname -r


📝 Conclusion

본 글에서는 커널을 사용자의 설정에 맞춰 처음부터 빌드하고 설치하는 방법을 다뤄봤습니다.

최근 학부 연구를 하며 Docker의 CRIU 패키지를 사용할 일이 생겼습니다. 처음에는 커널 컴파일이라는 것을 몰라 ubuntu 배포판을 다운로드해 Docker와 CRIU를 설치 후 사용을 해보려고 하였으나 오류가 발생하여 사용을 하지 못하는 상황에 놓였습니다. 그러던 중 커널 컴파일이라는 설정을 알게 되어서 직접 CRIU에 맞는 커널 컴파일을 해보게 되었습니다.



🔗 Reference

[1] https://phoenixnap.com/kb/build-linux-kernel
[2] https://junshim.github.io/linux%20kernel%20study/Linux_Kernel_Compile/
[3] https://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
[4] https://me74.tistory.com/18
[5] https://5equal0.tistory.com/entry/Linux-Kernel-Kernel-%EB%B9%8C%EB%93%9C-%EB%B0%8F-%EC%84%A4%EC%B9%98
[6] https://criu.org/Linux_kernel

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글