리눅스 커널 컴파일
IT 위키
더 많은 작업
리눅스 커널 소스를 받아 필요한 기능을 골라 새 커널 이미지와 모듈을 만드는 과정이다. 새 하드웨어 지원, 불필요한 기능 제거, 보안 패치 적용 등을 위해 수행한다.
$ uname -r 4.18.0-477.10.1.el8_8.x86_64 $ cat /proc/version
- 버전은
주 번호.부 번호.패치 번호형식이다. 예: 4.18.0 - 2.6 버전까지는 부 번호가 짝수면 안정 버전, 홀수면 개발 버전이었으나 3.0 이후로는 이 구분을 쓰지 않는다.
- 공식 소스는 https://www.kernel.org 에서 받는다.
| 순서 | 명령 | 설명 |
|---|---|---|
| 1 | tar xvf linux-x.y.z.tar.xz -C /usr/src | 소스 압축 해제 |
| 2 | make mrproper | 이전 설정 파일(.config)과 빌드 결과를 모두 지운다. |
| 3 | make menuconfig 등 | 커널 기능을 선택해 .config 파일을 만든다. |
| 4 | make (또는 make bzImage) | 커널 이미지를 컴파일한다. 결과: arch/x86/boot/bzImage |
| 5 | make modules | 모듈로 선택한 기능을 컴파일한다. |
| 6 | make modules_install | 모듈을 /lib/modules/버전/ 에 설치한다. |
| 7 | make install | 커널 이미지와 System.map을 /boot에 복사하고 initramfs와 부트로더 항목을 만든다. |
- 최근 커널은
make한 번으로 이미지와 모듈을 함께 빌드한다. 병렬 빌드는make -j$(nproc)을 쓴다. - 빌드에는 gcc, make, ncurses-devel, bison, flex, elfutils-libelf-devel, openssl-devel 등이 필요하다.
| 명령 | 지우는 범위 |
|---|---|
| make clean | 대부분의 빌드 결과물. .config는 남긴다. |
| make mrproper | clean + .config와 각종 설정 파일 |
| make distclean | mrproper + 편집기 백업 파일, 패치 잔여 파일 |
| 명령 | 방식 |
|---|---|
| make config | 텍스트로 항목마다 질문에 답한다. |
| make menuconfig | 텍스트 메뉴 (ncurses 필요) |
| make nconfig | 개선된 텍스트 메뉴 |
| make xconfig | X 윈도 GUI (Qt) |
| make gconfig | X 윈도 GUI (GTK) |
| make oldconfig | 기존 .config를 기준으로 새로 생긴 항목만 묻는다. |
- 각 항목에서
y는 커널에 포함,m은 모듈로 빌드,n은 제외이다.
- GRUB2 환경에서는 make install이 항목을 자동으로 추가한다.
- 직접 설정을 다시 만들 때는 grub2-mkconfig를 쓴다.
# grub2-mkconfig -o /boot/grub2/grub.cfg
- 예전 GRUB Legacy는 /boot/grub/grub.conf에 직접 항목을 적었다.
# patch -p1 < patch-x.y.z
- 절차 순서 : mrproper → menuconfig → make(bzImage) → modules → modules_install → install
- clean / mrproper / distclean의 차이
- 설정 도구 이름과 필요한 환경 (xconfig는 Qt, gconfig는 GTK)
- 커널 이미지 위치 arch/x86/boot/bzImage, 모듈 위치 /lib/modules/버전