Wisdom’s Cloud

[LINUX] 15. 간단한 커널 컴파일 본문

LINUX/Beginner

[LINUX] 15. 간단한 커널 컴파일

지혜로운지혜쓰 2021. 1. 31. 11:31

모듈의 개념과 커널 컴파일의 필요성
  • 우선 커널의 가장 큰 역할은 '하드웨어 지원'이다. 커널에 들어 있는 하드웨어를 제어하는 코드 중 어떤 부분은 항상 사용하는 것이 아니라 필요할 때만 가끔씩 사용하는 부분이 많다.

  • 따라서 자주 사용하지 않고 가끔 사용하는 코드는 커널에 넣지 않고 별도로 보관했다가 필요할 때 호출해 사용하면 커널의 크기가 그렇게 커지지 않으면서 더 많은 하드웨어를 지원할 수 있게 되며, 이렇게 별도로 보관했다가 필요할 때마다 호출하여 사용하는 코드를 '모듈'이라고 부른다.

  • 하지만 커널에 넣어야 할 코드와 모듈로 분리해야 할 코드들이 내 컴퓨터의 하드웨어 맞게 원하는 대로 완전 분리되어 있지 않다.

  • 이럴 때는 커널을 최신 버전으로 업그레이드하지 않고, 커널에 포함될 것과 모듈로 분리할 것을 사용자가 원하는 대로 지정해 기존의 커널과 똑같은 버전을 다시 컴파일할 수 있으며, 이렇게 하면 같은 하드웨어 사양이라도 더 효율적인 성능을 발휘할 수 있게 된다.

  • 또한 최근 출시된 하드웨어를 장착했을 때 기존의 커널을 지원하지 않지만 최신 커널을 지원할 수 있기 때문에 이럴 때는 http://www.kernel.org에서 최신 커널 소스를 다운로드해서 커널을 업그레이드할 필요가 있으며, 그 외 보안 문제 때문에 커널을 업그레이드하는 경우도 있다.

 

 

커널 컴파일
  • 커널의 실체도 결국은 파일이므로, CentOS 8의 커널은 /boot/vmlinuz-4.18.0-80.el8.x86_64이며, 이번 실습에서 커널 컴파일 결과는 /boot/vmliuz-5.3.11 파일이 될 것이다.

  • 또한 기존 모듈은 /lib/modules/4.18.0-80.el8.x86_64/ 디렉터리에 들어 있으며, 새로 컴파일했을 때의 결과 모듈은 /lib/modules/5.3.11/ 디렉터리가 될 것이다.

 

 

[실습 1] CentOS 8의 커널을 최신 커널로 업그레이드하자.

  step 0 초기화한 Server를 실행하고 root 사용자로 접속하자.

 

  step 1 설치된 커널 버전과 현재 최신 커널 버전을 확인하자.

1. 터미널에서 "uname -r" 명령을 입력해 CentOS 8의 커널 버전을 확인한다.
2. Firefox 웹 브라우저를 실행해서 https://www.kernel.org/에 접속한 후 최신 커널 버전을 확인한다.

 

  step 2 커널 소스를 다운로드하자.

1. 커널의 전체 소스 파일을 다운로드한다. 오른쪽 노란색 아이콘을 클릭하여 Opening 화면이 나오면 아래쪽 [Save File]을 선택하고 [OK]를 클릭한다.
2. 다운로드가 완료되면 웹 브라우저를 닫는다.
3. /root/다운로드/ 디렉터리에서 다운로드한 파일을 확인한다.

 

  step 3 다운로드한 파일을 /usr/stc/ 디렉터리로 옮긴 후 압축을 풀자.

1. 다음 명령어를 입력하여 다운로드한 파일을 /usr/src/ 디렉터리로 옮긴 후 압축을 푼다.

mv /root/다운로드/linux-5.10.12.tar.xz /usr/src/
cd /usr/src/
tar xfJ linux-5.10.12.tar.xz
cd linux-5.10.12/
ls

 

  step 4 컴파일 환경을 설정하자.

1. 컴파일을 위한 관련 패키지를 먼저 설치한다. "dnf -y install make bison flex elfutils-libelf-devel openssl-devel" 명령으로 설치한다.
2. 관련 패키지 설치가 완료되면 "make mrproper" 명령으로 커널 설정을 초기화한다.
3. "make xconfig" 명령을 입력해 커널 환경을 설정한다. 간단히 두 곳 정도만 변경하겠다.
4. [Processor type and features]의 [processor family]에서 [자신의 CPU 타입]을 선택한다.
5. [File systems]의 [DOS/FAT/NT Filesystems]에서 [NTFS file system support] 부분과 그 하위를 모두 체크한다. 이 부분은 Windows NTFS 쓰기 기능까지 지원하도록 하는 것이다.
6. File 메뉴에서 [Save]를 선택해서 저장한 후 Kernel configuration 창을 닫는다.
7. 일부 버그로 인해 설정 파일을 편집해야 한다. "gedit .config" 명령으로 .config 파일을 열고 다음 2개 행을 찾는다. 그리고 앞에 # 표시를 붙여 주석처리한 후 저장하고 gedit을 종료한다.

# CONFIG_SYSTEM_TRUSTED_KEYRING=y
# CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"

 

  step 5 본격적으로 컴파일을 진행하자.

1. "make clean" 명령을 입력해 이전의 컴파일 정보를 삭제한다.
2. "make; make modules_install; make install" 명령을 차례로 실행해야 하는데, 이 명령들은 각각 실행 시간이 오래 걸리므로 세미콜론으로 구분지어서 세 명령을 한꺼번에 실행한다.

* make 명령은 커널 컴파일 환경 설정대로 소스 파일을 실제 컴파일하는 과정이며,

make modules_install 명령은 컴파일된 모듈을 /lib/moduels/ 디렉터리에 설치하는 과정이고,

make install 명령은 실제 컴파일된 커널을 /boot 디렉터리에 설치하는 과정이다. *

 

3. "Additional X.509 keys ~" 행에서 멈추면 Enter를 눌러 계속 컴파일을 진행한다. 컴퓨터의 성능에 따라 완료까지 최소 몇 십분에서 몇 시간 이상 걸릴 수 있다.
4. 정상적으로 컴파일 및 설치가 완료되면 다음과 같은 화면이 나온다.
5. /lib/modules/ 디렉터리와 /boot 디렉터리를 확인하면 새로운 커널 버전이 5.10.12로 설치된 것을 알 수 있다.

 

  step 6 새로운 커널로 부팅하자.

1. "reboot" 명령을 입력해 재부팅한다. 재부팅 후 GRUB 화면에서 새로 설치한 커널 5.10.12을 선택하고 Enter를 누른 다음 root 사용자로 접속한다.
2. "uname -r" 명령을 입력해 커널 버전을 확인해보면 새로운 커널인 5.10.12가 나올 것이다. 커널 업그레이드가 성공적으로 완료되었다.

'LINUX > Beginner' 카테고리의 다른 글

[LINUX] 17. X 윈도 응용 프로그램  (0) 2021.02.05
[LINUX] 16. 그놈 데스크톱 환경 설정  (0) 2021.02.04
[LINUX] 14. GRUB 부트로더  (0) 2021.01.30
[LINUX] 13. 응급 복구  (0) 2021.01.30
[LINUX] 12. 서비스, 소켓  (0) 2021.01.30