Embeded Study/Linux Kernel2009. 8. 24. 18:39
운영체제에 있어서 핵심이라 불릴수 있는 부분이 바로 Kernel이다.
가장 많이 사용되는 윈도우에도 커널이 있으며 오픈소스로 유명한 리눅스에도 커널이 있다.

커널이란 하드웨어와 직접 통신 하는 부분으로 시스템 서비스나 사용자간의 매개체 역할을 하게 된다.
커널을 공부하기 위해선 소스가 공개되어있으면서도 높은 완성도를 보이는 리눅스를 고르는 것이 좋은데
대부분의 리눅스 커널 도서들은 레드햇 기반으로 작성 되어있다.

물론 레드햇 계열인 레드햇 리눅스나 페도라로 공부해도 좋겠지만,
필자는 이미 우분투의 매력에 흠뻑 젖었을 뿐 아니라 그나마 익숙해진 상태라
조금더 이해하면서 공부해 보고자 레드햇 책을 보면서 이것을 우분투에 적용시켜가면서 공부해볼 생각이다.

이 글은 그 내용을 정리한 것으로 강좌도 아니며 그저 개인적인 노트 정도로 보면 되겠다.

현재 환경은 우분투 9.04를 노트북에서 작동시키도 있으며, 커널 버전은 2.6.28 이다.

우분투는 앞서 말한바와 같이 데비안 계열의 리눅스로 패키지 관리가 잘된다는 점이 장점이다.
이것은 커널 컴파일시 차이점을 보이는데 여타 리눅스는 커널 이미지를 만들어 부트로더에 이미지를 불러 오도록함으로서 부팅이 되도록 했으나 우분투는 deb패키지로 결과물이 나오며 이것을 설치함으로써 커널이 시스템에 적재되게 된다.

커널을 컴파일 하기 위해서 몇가지 도구가 필요하다.

터미널을 열어 다음을 입력하여 패키지를 설치한다. 참고로, 터미널 상의 작업은 모두 슈퍼유저(su)에서 이루어진다.

 apt-get install build-essential kernel-package
이들은 커널 컴파일에 필요한 헤더와 패키지 파일 생성에 필요한 것들이다.

 apt-get install libncurses5-dev libqt3-mt-dev
이것은 커널 설정을 하기위한 것으로 각각 menuconfig와 xconfig를 사용하기 위함이다.

설치전에 현재 커널 버전을 알 필요가 있는데
 uname -r
위 명령으로 커널 버전 확인이 가능하다.

다음으로 커널 소스를 받아야 하는데 보통은 http://kernel.org에서 다운 받지만
우분투의 호환이 잘 되기 위해선 다음과 같이 apt-get이나 시냅틱으로 다운 받도록 한다.
 apt-get install linux-source

설치가 완료되면 압축을 풀어주어야하는데 통상적으로 커널 소스는 '/usr/src/'에 위치하고 있다.
 cd /etc/src
 ls -al
 tar xvfj linux-2.6.28.tar.bz2

압축이 풀리면 일단 소스 디렉터리를 심볼릭링크를 걸고 그 디렉터리로 이동한다.
 ln -s linux-source-2.6.28 linux
 cd linux

이미 컴파일된 바이너리 파일들을 초기화 하려면 다음을 입력하면된다.
 make-kpkg clean

컴파일을 하기 전에 설정을 먼저 해주어야 하는데 이미 설치된 커널의 설정을 그대로 유지하려면 '/boot/config-버전'의 파일을 복사한 뒤 설정 화면으로 이동하면 된다. 'config-'뒤의 버전은 'uname -r'명령으로 나온 내용을 입력하면 된다.
 cp /boot/config-2.6.28-15-generic ./.config
 make menuconfig

설정화면에서 추가할 기능과 제거할 기능을 고른 뒤 화면을 빠져나온다.

컴파일을 하려면 다음을 입력한다.
 make-kpkg --initrd kernel_image kernel_headers modules_image -append-to-version=.test
'-append-to-version'은 기본 버전 뒤에 붙는 문자를 지정하는 것이다.

상위 디렉터리로 이동하면 새로 생성된 image 패키지와 header 패키지를 확인 할수 있다.
'dpkg -i [패키지명]'명령을 이용하여 두 패키지를 설치한 뒤 재부팅하면 grub메뉴에서 새로 설치된 커널을 확인할 수있으며
부팅이 가능하다.


Posted by Hugh.Kim