본문 바로가기

*집필*/*집필* Linux

리눅스 커널 컴파일 (Fedora9 2.6.25-14 --> 2.6.29)


*****************************************************************************************
** 본 정리는 페도라9의 커널 2.6.25버전에서 2.6.28버전의 커널을 컴파일하는 과정을 설명합니다.
** 본 정리는 WindowsXP환경에서 VMware를 통해 리눅스를 사용합니다.
** 본 정리의 자료출처는 google.com , 네이버 등과 같이 검색하여 찾은 자료를 바탕으로 작성했습니다.
*****************************************************************************************
리눅스 커널 소스를 얻기 위해 www.kerner.org 홈페이지에서 linux-2.6.29.tar.gz 파일을 다운로드 합니다. ( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.tar.gz )

부가 설명 :
일반적으로 /usr/src/ 디렉토리에 소스 파일을 저장하고 압축을 풀어 컴파일을 합니다. 정석대로 src디렉토리에서 작업하시는것을 추천합니다.


리눅스 커널 컴파일을 하기이전에 필요한 몇몇의 도구들이 필요합니다.

1) Gnu C         2.91.66      # gcc --version
2) Gnu make    3.77          # make --version
3) binutils        2.9.1.0.25  # ld -v
4) util-linux      2.10o        # fdformat --version
5) modutils       2.4.0        # insmod -V
6) e2fsprogs    1.19          # tune2fs --version
7) pcmcia-cs   3.1.21       # cardmgr -V
8) PPP             2.4.0        # pppd --version
9) isdn4k-utils  3.1beta7   # isdnctrl 2>&1|grep version

위의 도구들을 확인합니다. (출처 : http://www.linuxlab.co.kr/docs/01-02-1.htm )
부가 설명 : 위의 도구들은 리눅스의 컴파일에 필요한 도구 일 뿐 아니라 개발 도구로서 쓰이니 리눅스 프로그래밍에 필요한 도구들도 포함되어 있습니다. 몇몇 도구들은 설치되어 있지 않을 수도 있습니다. 글을 쓰면서 사용하고 있는 리눅스 패도라9에서 확인해보니 cardmgr -V는 실행이 되지 않습니다. cardmgr에 관해 알아본 결과 PCMCIA관련 도구이며, 커널 2.4 버전대까지 이 도구를 이용하여 ide장치로 마운트 시켜 사용했습니다. 현재 사용하고 있는 커널은 2.6 버전이기 때문에 이번 커널 컴파일에는 크게 관계되지 않는 도구입니다.
(출처로 가져온 정보가 오래된 글이다 보니 커널 버전간의 차이가 많으므로 이 점을 유의하시길 바랍니다.)

커널 컴파일을 하기위한 전체적인 순서는 다음과 같습니다.

#cd /usr/src
#wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.tar.gz
#tar xvfz linux-2.6.29.tar.gz
#cd linux-2-6-29
#make menuconfig
#make && make modules

#make menuconfig                  

위의 명령어를 입렵하면 아래 그림과 같이 모듈을 설정하는 페이지를 볼 수 있습니다.
(명령어를 입력하더라도 아래 그림과 같이 나오지 않고 에러 메시지가 나오는 상황에는 부가설명에 적어 두었습니다.)

자신 리눅스 환경에 맞게 질문에 Y,N,M을 설정해 주고, Y는 커널에 포함, N은 제외, M은 모듈을 의미합니다. 해당 라인으로 키보드 방향키로 이동후 스페이스 바를 이용하여 Y,N,M을 선택하거나 해당 라인에서 키보드 y,n,m을 직접 눌러 설정해 주시면 됩니다.
"-->"모양이 있는 라인은 하위 설정값이 있기 때문에 <Enter> 또는 <Space bar>를 이용하여 하위 설정 화면으로 전환할 수 있습니다. 반대로 상위 설정화면으로 전환하기 위해선 <Esc>키를 두번 누르거나 설정화면의 아래 <Exit>를 선택하면 상위 화면으로 전환할 수 있습니다.

설정관련 설명:
아래 설정 부분은 커널 2.6.29버전에서 볼 수 있는 목록입니다.
혹시 다른 버전은 다른지 확인해 본 결과 커널 2.6.0 버전에서는  좀더 간결한 설정 화면이 나오는것을 확인했습니다.
------------------------------------------------------------------------------
General setup  --->

Enable loadable module support  --->
Enable the block layer  --->
Processor type and features  --->
Power management and ACPI options  --->
Bus options (PCI etc.)  --->
Executable file formats / Emulations  --->
Networking support  --->
Device Drivers  --->
Firmware Drivers  --->
File systems  --->
Kernel hacking  --->
Security options  --->
Cryptographic API  --->
Virtualization  --->
Library routines  --->
Load an Alternate Configuration File
Save an Alternate Configuration File
------------------------------------------------------------------------------

General setup  --->
:네트워킹과 버스 프로토콜, 절전기능 등 시스템에 전반적으로 영향을 주는 설정입니다.

Enable loadable module support  --->
:자주 쓰이지 않는 장치 드라이버나 기능들을 커널 바깥에 모듈로 만들어 두었다가 필요할 때에만 동적으로 메모리에 적재할 수 있는 설정값입니다. 좀더 메모리 사용을 효율적으로 사용할 수 있습니다.

Enable the block layer  --->
:블럭 레이어 활성화에 관한 옵션입니다.
:임베디드 디바이스에 유용하게 사용할 수 있는 옵션입니다.

Processor type and features  --->
:다양한 프로세서에 대한 유현한 동작을 설정할 수 있는 옵션입니다.
:프로세서의 모델을 설정함으로써 프로세서에 맞는 동작 방식을 제공합니다.

Power management and ACPI options  --->
:컴퓨터의 전력 관리에 관한 옵션입니다.
:APM과 ACPI와 같이 두가지 표준을 사용할 수 있으며 일반 랩탑과 같이 전원 관리가 필요한 리눅스라면 사용을 권합니다. 또한 서버로써 사용한다면 사용하지 않는것을 권합니다.
(전원관리로 시스템이 슬립상태에서 깨어나는동안의 시스템 부하량를 줄이기 위해서 입니다.)

Bus options (PCI etc.)  --->
:시스템에서 사용하는 각종 Bus 설정입니다.

Executable file formats / Emulations  --->
:파일 포맷 실행과 에뮬레이션(다른 컴퓨터의 기계어 명령대로 실행할 수 있는 기능)을 설정합니다.

Networking support  --->
:각종 네트워킹 설정을 합니다.

Device Drivers  --->
:각종 드라이버와 포트,플러그 엔 플레이 등과 같은 설정을 합니다.

Firmware Drivers  --->
:방화벽에 관한 설정을 합니다.

Kernel hacking  --->
:커널 해킹에 관한 설정입니다. 커널 디버깅과 메모리 디버그와 같은 각종 시스템의 에러를 점검하는 기능을 활성화 시킬 수 있습니다.

Security options  --->
:시스템의 보안 관련 옵션입니다.
:Security options에 대해서는 따로 보안 파트로 작성 예정입니다.

Cryptographic API  --->
:암호화 API 관련 설정입니다. 각종 암호 알고리즘과 모듈들을 설정합니다.

Virtualization  --->
:가상머신 (KVM : Kernel-based Virtual Machine)관련 설정합니다.

Library routines  --->
:CRC관련 설정을 합니다. CRC7, CRC16, CRC32의 함수와 그 모듈을 설정합니다.

Load an Alternate Configuration File
:이전 저장한 설정값을 불러들입니다.

Save an Alternate Configuration File
:지금껏 설정한 값을 저장합니다. (file : .config )

설정이 끝나면 그림의 가장 아래 라인의 Save an Alternate Configuration File 을 선택하여 파일로 저장합니다.

부가 설명:
make menuconfig 명령어가 실행되지 않을시에는 ncurses 라이브러리를 설치
해주어야 합니다.

레드햇 계열 중 CentOs, Fedora인 경우에는
#yum install ncurses*

레드햇 엔터프라이즈 급인 경우에는
#up2date install ncurses*

데비안계열인 경우에는
#apt-get install ncurses*

위를 참고하여 입력하여 ncurses 라이브러리 관련 패키지들을 설치후
make menuconfig를 실행합니다.

#make        

make menuconfig를 실행하고 난 이후 저장한 설정값을 이용하여 make를 실행하면 해당 옵션에 맞게 컴파일이 진행합니다. 하드웨어 사양에 맞게 커널을 컴파일합니다.
(Add: 하드웨어 사양에 따라 컴파일 시간이 다소 차이가 납니다. 블로깅할 때의 VMware에서는 지루할 만큼 오래걸렸습니다.)
(Add: #make 를 수행하고 나면 소스 디렉토리에 vmlinux파일과 vmlinux.o 파일이 생성됩니다.)

#make modules        

이전 #make menuconfig에서 설정시 (M)으로 선택한 모듈부분을 커널 내부에서 사용할 수 있도록 적용합니다.
(Add: make와 마찬가지로 하드웨어 사양에 따라 시간이 다소 차이가 납니다. 역시 시간이 오래 걸렸습니다.)
(Add: 차례대로 #make  #make modules 를 하는것 보다 #make && make modules 로 한번에 해결하는것이 정신 건강에 좋다고 생각합니다.)

#make modules_install       

make 옵션 그대로 모듈을 설치 합니다.


#make install           

자동으로 /boot 디렉토리에 부팅 파일을 생성하고 이동시킵니다.
grup.conf,  menu.list 파일을 자동으로 변경해 주므로 따로 부트로더를 설정할 필요가 없습니다.