본문 바로가기

학부_대학원/대학원_학과공부정리

Linux Kernel Build

SMALL

항상 커널 만들 때, 아무 생각없이 명령어만 따라 쳤는데, 정리하려고 한다.


리눅스 커널을 만드는 과정은 크게 3단계로 나뉘어진다.


1. 커널 구성 : Kernel Configuration

2. 커널 컴파일 : Kernel Compile

3. 커널 인스톨 : Kernel Installation


사전에 linux kernel을 다운로드하여 /usr/src/ 디렉토리에 압축 해체한다.



1. 커널 구성이란?

커널 이미지를 만들 때, 주변의 기기나 네트워크 상태 등을 고려하지 않고 만들면 분명 문제가 생길 것이다.

예를들면, 어떤 커널 이미지는 무선 전용 네트워크인데 설치되는 호스트는 무선 카드가 없으면 동작 하지 않을 것이다. --> 예가 맞는지는...

그래서 이러한 구성을 해줘야 하는데, 아무런 지식없이 하는건 하기 힘들다고 한다.

그래서 현재 우리가 사용하고 있는 시스템에서 config 구성 정보를 그대로 사용한다.

--> 현재 사용하고 있는 기기, 하드웨어, 네트워크를 모두 고려한 상태의 구성이니까.

$make config

$make menuconfig

ps:  sudo apt-get install libncurses5-dev [menuconfig 하려면 해당 패키지 필요]

$make xconfig


위의 명령은 같은 명령어이다. 

그러면 .config 파일은 어디있는지가 중요한데...

우리가 사용하는 배포판의 nix일 경우에는 /boot 디렉토리에 .confg-xxx에 존재한다. --> 현재 사용하고 있는 /boot에서 가져오자.

$cp /boot/config-4.8.0-36-generic .config --> 구성파일 복사

해당 파일을 커널 소스파일로 복사한다.


2. 커널 컴파일

좀 익숙한 단계이다. 바이너리를 컴파일 하듯이 컴파일 하는 단계이다.

$make 명령어만 사용하면 Makefile을 참조해서 잘 빌드 된다.

커널 컴파일이 완료되고 나서 Target파일 즉, 커널 이미지는 kernel/arch/x86/boot/ 디렉토리에 생성된다

정확한 위치는 kernel source directroy/arch/$(ARCH)/boot/ 위치에 zImage or bzImage 이다.


3. 커널 인스톨

컴파일된, 즉 생성된 커널을 시스템이 부팅 했을때 사용되록 만들어야 한다.

그냥 컴파일된 상태로 나두면 그냥 파일일 뿐이다. 그렇기 때문에 이제 이걸 사용할 수 있게 만드는 단계가 커널 인스톨이다


$make modules --> 해당 명령어는 모듈로 구성된 커널 내부 구성 요소를 알려줌

$make modules_install --> 구성 요소들이 사용될 때 자동으로 커널에 적재될 수 있도록 설정하는 것

$make install --> boot strap 루틴에서 새로운 커널의 위치를 조정해서 부팅하게 해준다.

 --> 예전에는 lilo.conf 나 grub.conf 파일을 직접 수정했다고 한다.


위와 같이 하고 재부팅하면된다.

$reboot 


그리고 커널 버전을 확인한다.

richong@ubuntu:~$ uname -r

3.16.43


[출처] : 리눅스 커널 내부 구조

LIST

'학부_대학원 > 대학원_학과공부정리' 카테고리의 다른 글

[*nix] 자가 삭제(unlink), 프로세스 이름 변경(prctl)  (0) 2017.04.15
리눅스 커널 디렉토리 구조  (0) 2017.04.13
Memo  (0) 2017.03.20
PGP[Pretty-Good Privacy]  (0) 2017.03.09
GIT  (0) 2017.03.09