
커널 컴파일(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 파일을 수정해야 함
특별히 문제가 안된다면 관련 항목을 주석처리하고 진행할 수도 있음
'Linux' 카테고리의 다른 글
| [Linux] LVM 관련 명령어 - pvscan / vgscan / lvscan / pvcreate / vgcreate / lvcreate (0) | 2025.09.23 |
|---|---|
| [Linux] 모듈 관련 명령어 - lsmod / insmod / rmmod / modprobe / modinfo / modules.dep (0) | 2025.09.16 |
| [Linux] gcc(GNU Compiler Collection) (0) | 2025.09.07 |
| [Linux] 소프트웨어 설치 -rpm (1) | 2025.09.02 |
| [Linux] 압축 - tar(tape archive) (3) | 2025.09.01 |