[OS]/Embedded

kernel compile

하늘을닮은호수M 2005. 11. 16. 17:24
반응형

출처 : www.kernel.pe.kr

Kernel Compile

배경지식

  • 기본적으로 커널 소스의 디렉토리는 /usr/src/linux 이다.
  • 커널 컴파일 방법에는 3가지가 있다
    1. make config -> 옵션을 잘못 선택하면 처음부터 다시해야하는 단점이 있다.
    2. make menuconfig -> 가장 추천하는 방법(단, ncurses가 있어야 한다.)
    3. make xconfig -> X에서 볼수 있다.( 화려하다. 그냥 구경한번 해보길...)
  • 시스템 사양을 잘 알아야 한다.(이더넷 카드, 사운드 카드, CPU가 몇개(?)인지등...)
  • 어떠한 환경에서 사용할건지 결정하여야 한다.(커널의 최적화를 위해...)
  • Kernel Compile Option
    • 꼭 주의깊게 살펴볼것!!(나에게 어떤 옵션이 필요한지 볼것)
    • 제 2회 리눅스 공동체 세미나 자료에서 추출(이규호님께 감사)
  • 커널 2.4 Intro중 커널옵션설정
    • 일반적인 데스크탑 PC사양에서 필요로하는 커널옵션들을 설명하고있다.
따라하기
  1. 커널 소스를 받는다.( http://www.kr.kernel.org/pub/linux/kernel/)
  2. 소스를 /usr/src 방으로 옮긴다.(예: mv linux-2.2.12.tar.gz /usr/src )
  3. 전에 있던 커널소스 /usr/src/linux 디렉은 다른이름으로 바꾸던지 지워라.(예: mv linux linux-2.2.11)
  4. 만약 linux라는 이름으로 심벌릭 링크되어있다면 링크만 해제하라.(예: rm linux)
  5. 커널 소스를 푼다.(예: tar xvvzf 커널버전.tar.gz 또는 tar xvvIf 커널버전.tar.bz2)
  6. linux라는 디렉토리가 생겼을 것이다. 그 디렉으로 들어간다.( cd linux )
  7. # make menuconfig ( 현재 위치 /usr/src/linux )
  8. 커널 컴파일 옵션을 보고 시스템에 맞는걸 선택한다.(중요하다!)
  9. # make clean (예전 오브젝트 파일 제거)
  10. # make dep (의존성을 검사)
  11. # make bzImage (커널 이미지를 압축생성한다.)
  12. # mv arch/i386/boot/bzImage /boot/vmlinuz-커널버전 (예: mv arch/i386/boot/bzImage /boot/vmlinuz-2.2.12)
  13. # mv System.map /boot/System.map-커널버전 (예: mv System.map /boot/System.map-2.2.12)
  14. # vi /etc/lilo.conf ( 리로를 편집한다 )
         boot=/dev/hda     map=/boot/map     install=/boot/boot.b     prompt     timeout=50     image=/boot/vmlinuz-2.2.12 -> 새로운 커널이미지를 linux라는      label=linux              ?   레이블로 한다.     root=/dev/hda1     read-only     image=/boot/vmlinuz-2.2.11 -> 혹시나 모를 커널 패닉에 대비하여  	     label=old                     예전 커널을 old란 레이블로 해놓는다.     root=/dev/hda1                (예전 버전이 2.2.11일때)      read-only
  15. # /sbin/lilo ( lilo.conf의 내용을 인식시켜 주기위해 )
  16. 여기까지 커널 컴파일은 과정은 끝.
모듈 인스톨 하기
  • 커널 옵션에서 모듈(M)으로 선택한것을 컴파일 하기위해
  • # cd /usr/src/linux
  • # make modules
  • # make modules_install
  • 위와같이 하면 '/lib/modules/커널버전' 디렉에 모듈들이 위치한다.


Kernel Patch

  • 패치란 매번 커널이 바뀔때 마다 13MB가 넘는 커널 소스를 다시 받을 필요없이 바뀐 차이점만 담고있는 작은 용량의 파일로 커널을 업하는걸 말한다.
  • 장점 : 적은용량으로 패치파일로 커널을 금방 업 할 수 있다.
  • 단점 : 중간의 한 단계를 건너 뛸 수 없다. 예를들어 현재 커널 버전이 2.2.10 인데 바로 2.2.12로 패치 할 순없다.(꼭 2.2.11을 패치하고 나야 된다)
따라하기
  1. 패치 파일을 다운받아 bzip2이든 gzip으로 압축되어있던지 간에 압축을 푼다.
  2. 압축을 푼후 /usr/src/linux 방으로 옮긴다.
  3. # patch -p1 < 패치파일?
  4. 에러 없이 넘어가면 다음은 커널 컴파일 과정과 같다.
  • 만약 압축을 풀지않고 패치하려면 gzip 또는 bzip2에 따라 다음과 같이한다.
  • # gzip -cd 패치파일.gz | patch -p1(물론 패치파일의 위치는 /usr/src/linux)
  • # bzip2 -cd 패치파일.bz2 | patch -p1
반응형

'[OS] > Embedded' 카테고리의 다른 글

[펌] gprof를 사용한 프로파일링  (0) 2005.09.09
[펌] gcc 이야기(5)  (0) 2005.09.06
[펌] gcc 이야기(6)  (0) 2005.09.06
[펌] gcc 이야기(4)  (0) 2005.09.06
[펌] gcc 이야기(3)  (0) 2005.09.06