2010년 4월 5일 월요일

Linux Kernel Compile

Linux System에서 가장 중요한 Kernel을 직접 컴파일하고 실행시켜 봄으로써 익숙해지도록 해보자..
Linux Kernel은 여러가지 버전이 있으며 가장 최신 것을 사용하되,
내가 접한 문서에서는 "2.4.16"을 바탕으로 설명하고 있음..

1. LXR (Linux Cross Reference).
-리눅스 소스코드의 모든 함수/변수/정의 등에 대한 cross ref를 온라인으로 제공(http://lxr.linux.no)
 예를 들면, visual studio에서 특정 변수를 click하면 그 변수가 정의된 소스코드를 보여주는 것과
   비슷한 것 같다.
 소스코드를 분석할때, 보통은 grep을 사용해 찾아본다고 함.
 하지만 너무 힘들고 일이 많아지는 단점이 있으므로 LXR을 사용하는 것이 유익하다.
2. 소스코드 얻기
-Linux Kernel Source Code는 http://www.kernel.org 에서 구할 수 있음.
 각 버전별로 구분되어 있으며, 이중 원하는 버전의 완전한 코드를 받는다.
 gz, bz2 의 두가지 타입으로 압축되어 제공되며, 둘중 어느것을 사용해도 무방.
3. 소스코드 풀기
-Kernel Compile을 위해서는 root권한을 가져야함. (root 혹은 su로 login)
-보통 kernel은 /usr/src 밑에 위치
-압축된 kernel의 소스코드는 모두 linux란 이름의 directory로 시작하므로
   usr/src에 linux란 link나 directory가 있을시 덮어쓰게 되므로 주의.
>>cd /usr/src
   rm -f linux
   tar xvjf somewhere/linux-2.4.16.tar.bz2 // 압축풀기
   mv linux linux-2.4.16.tar.bz2 // A를 B로 옮김(혹은 rename)
   ln -s linux-2.4.16 linux // symbolic link. 심볼만(파일의 경로) 가리킴
// windows의 단축아이콘과 같은 개념
// -s 옵션이 없으면 hard link
// link [링크할대상] [링크파일명]
4. Compile 준비 (tool version확인)
>>make mrproper //소스코드를 처음 깔았을 때와 같은 상태로 돌려주는..
    cd /usr/src/linux/Documentation
    vi Changes //이 document에는 현재 kernel을 compile하기 위해 필요한 tool들의
           //version정보가 들어있음.
//각 tool들의 버전을 확인하는 방법은 [명령어] --version이라 치면됨.
//ex) gcc --version
make --version
5. Kernel 설정
-다음과 같은 방법이 있음
  1)고전적인 방법
  2)text 기반의 menu를 이용하는 방법
  3)x-window상에서 GUI를 이용하는 방법
-menuconfig 방법
 >>make config
     make menuconfig
     make xconfig
-kernel 설정이 끝나면 /usr/src/linux/.config 이 만들어 진다.
6. Kernel Compile
-다음의 순서대로 진행
>>make dep  //source file과 header와의 의존성을 검사
    make modules //설정에서 module로 선택한 것들을 *.o 의 형태로 만들어 준다.
    make bzImage //kernel자체를 만들어준다.
    make modules_install //만들어진 module을 /lib/modules/2.4.16에 설치
            //설치와 함께 depmod를 실행해 module간의 의존성도 만들어주는 역할
7. Kernel test 및 설치
-Compile이 끝났으면 Kernel이 제대로 동작하는지 확인한 후 기본 커널로 설치해 사용.
-2가지 test방법:
  1) 플로피 디스크 사용
make zdisk를 사용해 만들어진 kernel을 floppy에 담는다.
복사가 끝난 후 floppy를 이용해 부팅해 보고 정상동작하는지 확인.
  2) LILO 사용(LInux LOader: Linux를 위한 boot loader)
/etc/lilo.conf 를 수정(문서 참조)
새로 부팅 후 LILO에 test라고 입력하여 새로 만든 커널을 실험한다.
-Kernel의 설치
  Kernel image와 map file을 복사하고 lilo.conf를 수정하면 된다.
  복사할 file: ~ means '/usr/src/linux'
  1) ~arch/i386/boot/bzImage
  2) ~/system.map


댓글 없음:

댓글 쓰기