본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

리눅스 커널 소스를 받아 필요한 기능을 골라 새 커널 이미지와 모듈을 만드는 과정이다. 새 하드웨어 지원, 불필요한 기능 제거, 보안 패치 적용 등을 위해 수행한다.

커널 버전 확인

편집 원본 편집
$ 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 + 편집기 백업 파일, 패치 잔여 파일
  • 새 커널 설정을 시작하기 전 기존 설정값(.config)과 오브젝트 파일(.o)을 모두 지우는 것은 make mrproper 다. make clean 은 .config 를 남긴다

헷갈리는 명령

편집 원본 편집
명령 하는 일
make dep 2.4 이하 커널에서 소스 파일 사이의 의존성 정보를 만들던 단계. 2.6 부터는 make 가 알아서 하므로 쓰지 않는다. 파일을 지우지 않는다
depmod make 의 대상이 아니라 별도 명령이다. 설치된 모듈의 의존 관계를 modules.dep 로 만든다(make modules_install 이 자동 실행). make depmod 라는 대상은 없다 → 리눅스 depmod
make bzImage 압축된 커널 이미지를 만든다. 지우는 명령이 아니다
명령 방식
make config 텍스트로 항목마다 질문에 답한다.
make menuconfig 텍스트 메뉴 (ncurses 필요)
make nconfig 개선된 텍스트 메뉴
make xconfig X 윈도 GUI (Qt)
make gconfig X 윈도 GUI (GTK)
make oldconfig 기존 .config를 기준으로 새로 생긴 항목만 묻는다.
  • 각 항목에서 y는 커널에 포함, m은 모듈로 빌드, n은 제외이다.
  • make qconfig 라는 대상은 없다. Qt 기반 GUI 는 make xconfig 로 연다(실제로 실행되는 프로그램 이름이 qconf 라 헷갈리기 쉽다).
  • make nconfig 는 menuconfig 보다 나중에 들어온 ncurses 기반 텍스트 메뉴로, X 윈도 없이 터미널에서 쓴다.

부트로더 등록

편집 원본 편집
  • GRUB2 환경에서는 make install이 항목을 자동으로 추가한다.
  • 직접 설정을 다시 만들 때는 grub2-mkconfig를 쓴다.
# grub2-mkconfig -o /boot/grub2/grub.cfg
# 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/버전