dayne의 블로그

리눅스 커널 컴파일 방법 본문

시스템 프로그래밍/리눅스

리눅스 커널 컴파일 방법

dayne_ 2024. 10. 11. 13:10

목차

1. 리눅스 커널 컴파일 개요

2. 우분투 22.04.5 커널 컴파일 방법

 

 


1. 리눅스 커널 컴파일 개요

1.1 커널

커널은 항상 메모리에 상주하는 운영체제의 핵심이 되는 부분으로, 운영체제의 가장 아래 계층에 돌아갑니다.

커널은 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있도록 하기 위한 목적을 가지고 있고, 사용자가 쉘을 통해 입력한 명령어를 해석하여 하드웨어에 전달해 주는 역할을 합니다.

 

컴퓨터 자원을 관리하는 '자원 관리자'로서, 대표적으로 다음 4가지 기능을 가지고 있습니다.

  • 메모리 관리
    • 각 프로그램이 어디에서, 무엇을, 얼마나 사용하는지를 추적하고, 메모리 자원을 할당하는 역할을 합니다.
    • 가상메모리를 사용할 수 있도록 합니다.
  • 프로세스 관리 및 CPU 스케줄링
    • 사용자가 시스템에 로그인 함과 동시에 수많은 프로세스가 실행되는데, 커널은 CPU의 시간 자원을 배분하는 역할(어떤 프로세스가 언제, 얼마나 사용할지)을 하여 여러 개의 프로세스가 동시에 동작하는 것처럼 보이게 합니다.
  • 디바이스 관리
    • 컴퓨터에 연결된 장치들을 드라이버라는 매개체를 통해서 제어하고 관리합니다.
  • 시스템 콜 인터페이스 및 보안
    • 시스템 콜을 제공하여 응용 프로그램-프로세스의 서비스 요청을 수신합니다.

 

1.2 커널 컴파일의 필요성

리눅스 커널 컴파일을 하는 이유는 사용자의 특정 요구에 맞게 시스템을 최적화하고 성능을 개선하기 위해서입니다.

 

기본적으로 배포판에서 제공하는 커널은 다양한 하드웨어와 소프트웨어 환경을 지원하도록 구성되어 있어 다소 무겁거나 불필요한 기능이 포함될 수 있습니다.

 

커널을 직접 컴파일하면 불필요한 모듈을 제거하고, 필요한 기능만 활성화함으로써 부팅 속도를 개선하거나 메모리 사용량을 줄일 수 있습니다.

또한, 최신 커널 버전이나 보안 패치가 필요할 때, 혹은 하드웨어 드라이버 지원을 추가할 때도 커널 컴파일이 필요합니다.

 

이를 통해 시스템이 더 가볍고 안정적이며, 사용자의 하드웨어 및 용도에 맞춘 최적화된 커널을 구축할 수 있습니다.

 
 

2. 우분투 22.04 커널 컴파일 방법

2.1 진행 환경

진행 환경 : 라즈베리파이3, 우분투 22.04.5

 

현재 커널 버전 확인

uname -r

 

결과 : 5.15.0-1063-rasp

 

 

2.2 과정

1. 커널 컴파일 시에 필요한 패키지 다운로드

sudo apt update
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev fakeroot

 

 

2. 원하는 커널 버전 다운로드

cd /usr/src
sudo wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.4.282.tar.xz
sudo xz -d linux-5.4.282.tar.xz
sudo tar xf linux-5.4.282.tar
  • cd /usr/src
    • 해당 디렉토리로 이동 후, ls를 눌러보면 리눅스 커널의 소스코드 파일들을 확인할 수 있음
  • sudo wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.4.282.tar.xz
    • ' http://kernel.org' 해당 사이트에서 원하는 커널 버전의 경로 확인 후 wget을 사용해서 다운로드
  • sudo xz -d linux-5.4.282.tar.xz
    • 파일 압축 해제
    • tar : 아카이브 파일을 의미. 리눅스에서 여러 파일과 디렉토리를 하나로 묶는 것
    • xz : 압축 파일 종류 중 하나
  • sudo tar xf linux-5.4.282.tar
    • linux-5.4.282.tar라는 아카이브 파일을 현재 작업 중인 디렉토리로 추출

 

 

3. 현재 사용중인 커널의 config 파일 복사하기

cd /usr/src/linux-5.4.282
uname -r
sudo cp /boot/config-현재커널명 ./.config
  • uname -r
    • 현재 커널 버전 확인
    • 결과 : 5.15.0-1063-rasp
  • sudo cp /boot/config-현재커널명 ./.config
    • 현재 사용중인 커널의 config 파일을 다운받은 커널 소스에 복사
    • 저의 경우, sudo cp /boot/config-5.15.0-1063-rasp ./.config

 

 

4. 현재 사용중인 커널의 config를 다운로드 받은 커널에도 적용시키기

sudo make menuconfig
  • sudo make menuconfig
    • 현재 사용중인 커널의 config를 다운로드 받은 커널에도 적용시키기 위해 위의 명령어 사용
    • 명령어를 입력하면 새로운 화면이 출력되는데, Load → OK → Save → OK → Exit

 

 

5. 커널 컴파일

grep -c processor /proc/cpuinfo

sudo make -j# #에는 확인한 cpu 수 대입
sudo make modules_install
sudo make install

------
sudo scripts/config --disable SYSTEM_TRUSTED_KEYS
sudo scripts/config --disable SYSTEM_REVOCATION_KEYS
  • grep -c processor /proc/cpuinfo
    • 사용 가능한 cpu 수 확인
  • sudo make -j#
    • #에는 바로 위의 명령어로 확인한 '사용 가능한 cpu 수'를 넣어주면 됩니다.
    • 저의 경우, sudo make -j4
  • 컴파일 도중, make[1] : ***NO rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509~~~'. Stop. 이러한 에러가 발생하고 종료되었을 때, 아래와 같이 입력하고, 다시 sudo make -j4 입력
    • sudo scripts/config --disable SYSTEM_TRUSTED_KEYS
    • sudo scripts/config --disable SYSTEM_REVOCATION_KEYS
  • sudo make modules_install
  • sudo make install
  • 환경에 따라 오랜 시간이 소요될 수 있습니다.

 

 

6. 커널 설치

sudo make modules_install install

---
sudo vim /etc/default/grub

sudo update-grub
  • sudo make modules_install install
    • 커널 설치
    • 설치 완료 후, 재부팅이 필요합니다.
  • 만약 설치한 커널로 작동하지 않을 경우, ' sudo vim /etc/default/grub ' 명령어 입력하고, 아래의 부분을 수정해서 GRUB 설정을 변경해 줘야 합니다.
    • GRUB_TIMEOUT_STYLE=menu
      GRUB_TIMEOUT=10
      GRUB_TERMINAL=console
    • 이후 sudo update-grub 명령어 입력 후 재부팅 → Advanced option for ubuntu → 설치된 커널

 

 


참고

https://velog.io/@geniee1220/OS-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COperating-System%EC%99%80-%EC%BB%A4%EB%84%90Kernel

 

[OS] 운영체제(Operating System)와 커널(Kernel)

운영체제(Operating Ststem : OS)란 커널에 라이브러리, 어플리케이션이 추가된 상태를 이릅니다. 커널은 항상 메모리에 상주하는 운영체제의 핵심이 되는 부분입니다. 컴퓨터 자원을 관리하는 자원

velog.io

 

https://velog.io/@kjww0307/Ubuntu%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%BB%A4%EB%84%90-%EC%BB%B4%ED%8C%8C%EC%9D%BC

 

[Ubuntu]우분투 커널 컴파일

1.커널 컴파일 하는데 필요한 패키지 다운로드 > apt-get update sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 kernel-package libssl-dev bison flex

velog.io

 

https://www.servermon.kr/board/board.html?code=servermon_board2&page=1&type=v&num1=999943&num2=00000&lock=N

 

서버몬

HPE, LENOVO(=IBM), DELL, 슈퍼마이크로 서버, 기업용 PC, 스토리지 및 소프트웨어 (MS, 레드햇, 오라클), 문서보안솔루션(시큐어디스크, 인터넷디스크) 을 유통 판매하는 IT 통합솔루션 전문 회사입니다.

www.servermon.kr