[Linux Kernel] 커널 빌드 과정
Kernel/Development

[Linux Kernel] 커널 빌드 과정

반응형

  • make mrproper
    Mr.Proper는 수세미 이름인데 딱딱한 스펀지로 되어 있어 잘 지워진다. 그래서 커널 소스 처음 가져왔을 때나 커널을 여러 번 컴파일했을 때 기존에 설정되어 있던 모든 의존 관계를 완전히 제거해주는 역할을 한다.
  • make menuconfig
    GUI 메뉴 형식의 커널 환경 설정 시작 명령어. CLI는 "make config"로 가능하다.
  • make dep
    커널에 설정된 내용에 따라 소스 코드의 파일들을 확인하고 필요한 링크들을 생성하는 것과 같은 의존성 설정 작업. 의존성 확인 후 커널 컴파일에 필요한 파일들의 목록만 각 디렉터리에 .depend 파일로 저장. 이 과정을 거치지 않고 "make bzImage" 명령어를 사용해도 되지만 안 했을 때보다는 컴파일 과정이 빠르게 실행된다.
  • make clean
    이전 컴파일 작업으로 생성된 오브젝트 파일 등을 모두 삭제하여 새롭게 빌드하기 위한 준비를 하는 과정.
  • make bzImage
    실제로 실행되는 커널을 빌드하는 명령어. "make zImage"는 압축하지 않고 커널을 빌드하는 명령어인데 오늘날에는 커널의 크기가 거대해지고 있기 때문에 압축해서 만드는 bzImage를 사용한다.
  • make modules
    커널에서 사용할 모듈들을 빌드하는 단계. 커널 자체에 모든 기능을 넣어두면 커널의 크기가 너무 커지기 때문에 필요한 기능들을 모듈을 빌드하기 위해 존재하는 명령어. 새로운 디바이스가 추가되었을 때도 커널 자체를 다시 빌드하는 것이 아닌 모듈만 추가하면 된다.
  • make modules_install
    컴파일된 모듈을 설치하는 과정.
  • make install
    부트스트랩에게 새롭게, 혹은 바뀐 설정을 알려줌.

그림에도 나와있지만 커널 2.6 버전 이후로는 "make"를 쓰는 것으로 dep ~ modules의 범위를 커버하는게 가능하다.

 

처음부터 시작하고 싶다면 [make mrproper]로 밀어주고 시작한다.

.config 파일은 처음부터 만들면 여러 가지로 세팅해주기 어렵기도 하고 자신의 시스템에 존재하는 환경에 맞게 설정해주는 것이 필요하므로 현재 배포판이 가지고 있는 .config 파일을 가져와서 설정하는 것이 좋다.

mv /boot/config-XXX [KERNEL_SRC_DIR]/.config

위의 명령어를 통해 자신의 커널 소스 파일이 있는 디렉터리로 가져온다. 각자 환경에 맞게 config 파일을 가져오면 된다(이름은 배포판에 따라 다를 수 있다). 그리고나서 [make menuconfig]를 통해 필요한 설정들을 추가로 해준다.

이후에는 [make -j ?] 명령어를 사용해 커널을 빌드한다. 물음표(?)는 자신의 cpu 코어 개수를 지정할 수 있는데, 그만큼 빨리 빌드를 할 수 있다. vmware에서 5.10 버전을 -j 옵션 없이 했을 때 무려 3시간 걸렸던 경험이 있다.

정상적으로 다 됐다면 [make modules_install]으로 모듈들을 설치해주고 [make install]으로 부트스트랩(ex. grub)에 등록한다. 주의해야 할 점은 기존에 본인이 커스텀해놓은 부트스트랩 설정이 있다면 백업을 해둔다든지 해야 한다. 그렇지 않으면 그 정보들이 날아갈 것이다.

부트스트랩에 설정도 다 끝났다면 이제 재부팅을 해주면 된다. 그리고 쉘에서 [uname -a] 또는 [uname -r] 명령어를 통해 바뀐 커널 버전을 확인할 수 있다.

 

도움 되는 다른 사이트들

https://5equal0.tistory.com/entry/Linux-Kernel-Kernel-%EB%B9%8C%EB%93%9C-%EB%B0%8F-%EC%84%A4%EC%B9%98

 

[Linux Kernel] 리눅스 커널 빌드 및 설치

Content 1. Introduction 2. Kernel 구성하기 (Configuration) 3. Kernel 빌드하기 4. Kernel 설치하기 5. Kernel 버전 확인하기 Linux Kernel을 빌드하고 설치하는 과정을 실습을 통해 이해합니다.  1. Introduc..

5equal0.tistory.com

verified 모듈만 가능하다고 뜨는 경우, tainted kernel이라고 dmesg에서 뜨는 경우 아래 2개의 블로그를 보고 설정을 따라해보길 바람

https://velog.io/@mythos/Linux-Kernel-0-%EC%BB%A4%EB%84%90-%EC%86%8C%EC%8A%A4-%EB%B9%8C%EB%93%9C%ED%95%98%EA%B8%B0 

 

Linux Kernel #0 커널 소스코드 빌드하기

리눅스 커널(Linux kernel)은 모놀리딕 유닉스 계열 컴퓨터 운영체제 커널이며 자유-오픈 소프트웨어이다. - Wikipedia (리눅스 커널) 필자는 예전부터 리눅스를 매우 좋아했다. 커널을 무료로 배포하

velog.io

http://egloos.zum.com/rousalome/v/9966496

 

[Kernel][Panic] crash due to "signature and/or required key missing"

#커널 크래시 디버깅 및 TroubleShootingRace로 mmc_wait_data_done() 함수에서 커널 패닉"cat /d/shrinker" 입력 시 커널 패닉함수 포인터 미지정으로 xfrm_local_error() 커널 패닉preempt 조건으로 ___might_sleep() 함수

egloos.zum.com

 

반응형