Linux

[Linux] 커널 컴파일(Compile)

thdwldud 2025. 9. 15. 10:52

커널 컴파일(Compile)

  • 커널 컴파일은 커널 소스를 다운로드하여 사용하는 시스템에 최적화된 커널을 만드는 과정
  • 이 과정을 통해 불필요한 항목들을 제거하고, 안정성과 성능 향상을 얻을 수 있음
  • 커널 컴파일을 하기 위해서는 C컴파일러인 gcc, 어셈블러, 관련 라이브러리(ncurses, ncurses-devel 등), 링커, make 유틸리티 등의 개발 도구가 설치되어야 함
  • 선택 사항에 따라 flex, bison 등의 패키지를 요구
  • 설치가 되어 있지 않다면 발생하는 메시지를 확인해서 ‘dnf install gcc’, ‘dnf install ncurses’, ‘dnf install ncurses-devel’ 등을 실행해서 순차적으로 설치하면 됨
  • 설치하려는 커널 버전에 따라 요구하는 gcc의 버전도 차이가 있으므로 커널 컴파일 진행 시에 나타나는 메시지를 잘 확인해야 함
  • 관련 도구가 설치되어 있다면, 설치하려는 리눅스 커널 버전의 소스를 /usr/src/kernels 디렉터리에 다운로드
💡 커널 컴파일 순서
커널 소스 파일 압축 해제
→ 커널 소스의 설정값 초기화 (make mrproper)
→ 커널 컴파일 옵션 설정 작업 (make menuconfig)
→ 커널 이미지 파일 생성 작업 (make bzImage)
→ 커널 모듈 생성을 위한 컴파일 작업 (make modules)
→ 커널 모듈 설치 작업 (make modules_install)
→ 커널 모듈 파일 복사, grub 환경설정 파일 수정 (make install)
→ 새로운 커널 사용을 위한 시스템 재부팅
  • 커널 소스 파일은 tar 명령의 압축 해제 옵션을 이용한 후에 관련 디렉터리로 이동
  • 커널 컴파일 관련 도움말을 보려면 ‘make help’라고 입력하면 됨. 지원되는 다양한 타깃(target)을 확인 가능

[Cleaning Targets]

주요 도구 설명
make clean 리눅스에서 소스 파일로 프로그램 설치할 때 configure 작업을 수행하는데, 이 작업을 수행하면 오브젝트 파일이 생성됨
make clean은 생성된 오브젝트 파일을 제거하고 다시 configure 할 때 쓰이는 명령 커널 컴파일할 때도 설정된 작업을 초기화하기 위해 make clean 명령을 사용할 수 있으나, 오브젝트 파일만을 지울 뿐 환경 설정한 내용이 저장된 .config 등은 지우지 못하므로 make mrproper를 사용하는 것이 좋음
make mrproper configure 작업을 통해 생성된 오브젝트 파일뿐만 아니라 config 파일, 다양한 백업 파일 등도 제거
make distclean mrproper 작업과 더불어 편집된 백업 및 패치 파일도 모두 제거
  • 일반적으로 make mrproper 명령을 사용하는데, 이 명령은 기존에 설정된 값을 초기화하는 명령으로 오브젝트 파일 뿐만 아니라 설정된 환경 파일인 .config 파일까지 지움
  • 커널 컴파일 옵션 설정 작업은 다양한 도구들을 이용할 수 있고, 설정 규칙은 y, m, n으로 나눔. y(yes)는 선택해서 커널에 포함한다는 의미이고, m(module)은 모듈로 생성한다는 의미를 나타내고, n(no)를 선택하지 않는다는 의미

[커널 컴파일 주요 도구 (Configuration targets)]

주요 도구 설명
make config 텍스트 기반의 설정 도구로 터미널 환경에서 y, m, n으로 설정
make menuconfig 텍스트 기반의 컬러 메뉴를 제공하고, 커서를 이용해서 이동이 가능 가장 보편적으로 사용하는 도구
make noconfig 텍스트 기반의 컬러 메뉴를 제공하고, 커서와 [F1]~[F9] 까지의 기능키를 제공하는 도구
make xconfig X 윈도 환경에서 Qt 기반으로 설정하는 도구
make gconfig X 윈도 환경에서 Gtk+ 기반으로 설정하는 도구
  • make bzImage 명령은 커널 이미지를 생성할 때 bzip2로 압축해서 생성
  • make modules 명령은 커널 옵션 설정시 ‘m’으로 선택한 항목들을 모듈 만드는 과정
  • make modules_install 명령은 모듈 관련 디렉터리인 ‘/lib/modules/커널버전’ 디렉터리 안에 복사하는 과정

예시

1. 압축 해제 및 관련 디렉터리 이동

[root@www kernels]# pwd
/usr/src/kernels
[root@www kernels]# ls
4.18.0-372.9.1.el8.x86_64 linux-4.19.250.tar.xz
[root@www kernels]# tar Jxvf linux-4.19.250.tar.xz
[root@www kernels]# cd linux-4.19.250

 

2. 커널 소스 설정값 초기화

[root@www linux-4.19.250]# make mrproper

 

3. 커널 컴파일 옵션 설정 도구 실행

  • 설정된 내용은 .config 파일에 기록됨
[root@www linux-4.19.250]# make menuconfig

 

4. 커널 이미지 생성

[root@www linux-4.19.250]# make bzImage

 

5. 커널 모듈 생성을 위한 컴파일 작업

[root@www linux-4.19.250]# make modules

 

6. 생성한 커널 모듈 설치 작업

[root@www linux-4.19.250]# make modules_install

 

7. 커널 모듈 파일 복사 및 grub 환경 설정 파일 자동 수정 작업

[root@www linux-4.19.250]# make install

 

8. 시스템 재가동하여 새로운 커널로 부팅 후 커널 버전 확인

[root@www linux-4.19.250]# reboot
[root@www ~]# uname -r

 

💡 커널 컴파일 실행 중 오류
make bzImage 작업시 오류가 발생하는 경우 중에 가장 큰 원인은 관련 패키지의 미설치
오류 메시지를 확인해서 관련 패키지를 설치한 후에 진행해야 함
특히 기본 패키지 이외에 openssl-devel 등과 같은 개발 관련 패키지를 요구하는 경우가 많음
또한 관련 설정이 달라서 발생하는 경우도 있는데, 이 경우에는 .config 파일을 수정해야 함
특별히 문제가 안된다면 관련 항목을 주석처리하고 진행할 수도 있음