카테고리 없음2013. 6. 18. 09:32

 

30장. 커널 (커널 컴파일)

 

학습목표


- 커널에 대한 개념과 커널을 컴파일하는 방법에 대해서 알아보자.

 

 

 

 

● 커널 컴파일을 해야 할 때
- 장치나 시스템의 기능과 관련된 변화가 있을 때
- 커널 자체에 보안문제가 발생시 -> 업그레이드
- 그 외에는 꼭 해야할 필요는 없음

 

 

● 커널 컴파일, 커널 업그레이드
- 단순히 커널 컴파일이란 현재버전의 커널을 다시 컴파일하는 것을 의미하며,
  커널 업그레이드란 새로운 버전의 커널을 커널 컴파일과정을 통해 추가 설치하는 것을 의미

 

 

● 커널 업그레이드의 주요 결과
- /boot/vmlinuz-x.y.z 파일 생성 (커널파일)
- /lib/modules/x.y.z/ 디렉토리 생성 (모듈파일)

 

 

● 커널 버전의 의미
- linuz-x.y.z.tar.gz -> /boot/vmlinuz-x.y.z
   → x : 주 버전
   → y : 짝수(안정버전), 홀수(개발버전)
   → z : 패치 레벨

 

 

 


[실습]
● 커널 업그레이드(컴파일) 실습 (linux-2.4.24로)

● 실습 환경
- VMware상에 IDE 하드디스크에 설치
- Redhat 9 전체설치

 

 

 

 

< 새로운 리눅스 설치 >

 

 


 

기본적으로 SCSI 하드가 설정되어있다 이것을 삭제

 



 

IDE 0:0 하드디스크를 새로 추가하자.

 



 

리눅스를 설치하고 나면 처음에 2.4.20-8버전의 커널이 뜬다.

일단 이걸로 부팅

 

 

 

 

현 커널 버전 확인 >



 

root 사용자로 로그인해서 터미널 창을 띄우고

 

uname -r

 

현 커널 버전인 2.4.20-8 을 확인할 수 있다.

 

cd /usr/src 로 /usr/src/에 이동해서

 

ls -l 명령으로 보면 linux-2.4.20-8 커널의 파일들이 있다.

이제 우리는 2.4.24 버전의 커널을 새로 설치 할 것이다.

 

 

 

 

< 커널소스 다운로드 >

 

나같은 경우는 http://www.kernel.org/pub/linux/kernel/v2.4/ 

여기서 해당 커널(linux-2.4.24.tar.bz2)을 다운받아 ftp로 파일을 전송했다.

 



 

linux-2.4.24.tar.bz2 파일을 개인 ftp서버로부터 가져왔다.

 

 

 

 

< 커널 소스 압축풀기 >



 

이제 받은 커널파일의 압축을 풀자.

 

tar xvfj linux-2.4.24.tar.bz2

 



 

압축이 잘 풀리고 있다.

 

 

 

커널설정 초기화 >



 

linux-2.4.24 폴더가 생겼다 cd linux-2.4.24 명령을 내려 해당 폴더로 이동하자.

 

이제 커널설정 초기화를 한다.

 

make mrproper

 

 

 

 

< 기존 환경 파일 재사용 >

 

커널 환경 설정은 아주 복잡하기도 하고 조심해야 할 부분이 많기도 하다.

그래서 우리는 기존 환경 파일을 재사용 함으로써 우리가 굳이 하나하나 세세한 부분까지 설정하지 않는다.

 



 

ls /usr/src/linux-2.4.20-8/configs

 

/usr/src/linux-2.4.20-8/configs 의 목록 중에서

우리는 기존의 kernel-2.4.20-i686-smp.config 환경설정 파일을 복사해서 사용하자.

 

cp /usr/src/linux-2.4.20-8/configs/kernel-2.4.20-i686-smp.config .

 

/usr/src/linux-2.4.20-8/configs/kernel-2.4.20-i686-smp.config 파일을 현재의 디렉토리로 복사

 



 

환경설정 파일을 잘 복사해왔다.

이제 이 파일의 설정을 로딩할 것이다.

 

 

 

 

< 기존 환경 파일 재사용 >

 

커널 환경설정을 해보자.



 

make xconfig

 

make xconfig 명령은 X 윈도우에서 사용할 시에 내리는 명령이다.

 



 

그럼 이러한 창이 나오는데

여기서 각각의 세부적인 사항들을 설정해 줄 수 있다.

(커널에 포함시킬지 모듈로 놔둘지 설치하지 않을지)

 

우리는 하나하나 설정하기 힘들기 때문에 아까 복사한 기존의 환경설정 파일을 로딩해오자.

 

Load Configuration from File 을 누른다.

 



 

[Enter filename] 란에 kernel-2.4.20-i686-smp.config 환경설정 파일의 이름을 입력하고 OK

쓰기가 힘들면 복사해서 붙여넣기 해도 된다.

 

 

그리고 목록중에서 [File systems]를 클릭하자.

 



 

여기서

Kernel automounter support

Kernel automounter version 4 support (also supports v3)

이 두 목록을 'y' (커널에 포함시킴)로 바꿔준다.

 



 

그리고 아래로 목록을 내려서

Ext3 journalling file system support

역시 'y'로 바꿔준다.

 

그리고 Main Menu를 클릭하고 Save and Exit를 클릭해서 저장하고 나오자.

 



 

그리고 ls -a를 해보면

.config 파일이 생성되었다.

 

우리가 설정했던 것들이 바로 저 파일에 저장이 되는 것이다.

 

 

 

 

 

< 의존성 부여 >

  



 

make dep

 

서로간에 의존성 부여를 하는데 시간이 좀 걸린다.

 

 

 

 

 

크리닝 >

 

이전에 컴파일과정에서 남아있던 파일들을 깨끗하게 처리해줄 필요가 있다.


 

 

make clean

 

 

 

 

 

< 커널 컴파일 및 설치 >

 

이제 실질적으로 부트 이미지 파일을 만들어야 한다.



 

make bzImage

 

'I'는 꼭 대문자로 써야 한다.

시간이 약간 걸린다.

 



 

커널 컴파일이 완료가 되면

 

make install

 

명령을 내려 현재 컴파일 된 이미지 파일을 /boot 폴더로 복사해주는 역할을 한다.

여기서 오류가 나올 수 있으나 별로 중요하지 않기 때문에 넘어가도 무방하다.

 



 

커널이 제대로 부트영역에 복사 되었는지 확인해보면

 

ls -l /boot

 

vmlinuz-2.4.24 라는 파일이 제대로 생긴 것을 확인할 수 있다.

이제는 이 파일로 나중에 부팅을 할 수 있도록 설정할 것이다.

 

 

 

 

 

< 커널 컴파일 및 설치 >

 



 

make modules

 

모듈을 컴파일 하는 작업을 상당시간 하게 된다.

 



 

make modules_install

 

/lib/modules/2.4.24 커널 버전의 디렉토리에 모듈을 설치하는 과정이다.

 

 

 

ls -l /lib/modules 로 확인해보면

2.4.24 버전의 모듈이 잘 설치가 되었음을 확인할 수 있다.

 

 

 

 

 

< 모듈 컴파일 및 설치 >

 



 

depmod -ae -F System.map 2.4.24

 

새로 컴파일된 커널과 모듈간에 의존성을 갖게 하였다.

 

cp System.map /boot

'y'

 

System.map이라는 파일을 부트영역에 카피를 한다.

 

이제 커널 컴파일이 완료가 되고 커널이 완전히 준비되었다.

 

 

 

 

 

< 부트로더에 추가 >



 

vi /etc/grub.conf

 

/etc/grub.conf 파일을 편집함으로써

새 커널로 부팅할지 기존 커널로 부팅할지 부트로더를 편집한다.

 



 

기존의 목록에서 저 세 줄을 복사한다.

title 줄에서 '3'을 누르고 'yy'를 누르면 세줄 복사.

 



 

맨 아래칸으로 내려와서 'p'를 누르면 세줄이 붙여넣기된다.

'i'를 눌러 입력모드로 들어가 직접 수정

 



 

title Red Hat Linux (2.4.24)                     

root (hd0,0)                   

                    kernel /vmlinuz-2.4.24 ro root=/dev/hda2

 

위와 같이 수정하고 저장 후 빠져나오자.

 

이제 설정이 완전히 완료되었다.

 



 

reboot

 

시스템을 재부팅 한다.

 



 

그럼 GRUB 부트로더에서 우리가 만든 2.4.24 커널버전의 부팅목록이 뜬다.

2.4.24 버전으로 부팅을 해 보자.

 



 

중간에 부팅과정도 무리 없이 잘 된다.

 



 

root 사용자로 로그인 해서

 



 

터미널 창을 띄우고

 

uname -r

 

2.4.24 버전의 커널이 잘 구동되고 있음을 확인할 수 있다.

 


 


[정리]

● 커널 컴파일


 

Posted by 아이맥스