Contents

System/OS
2003.04.23 10:31

[linux] 커널 컴파일, 설정

조회 수 18185 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
  전체과정: 
  $ cd /usr/src/linux
  $ (make mrproper)        # 이전 정보 삭제, 이전에 설정된 컴파일환경을 재사용한다면 건너뛴다
  $ make menuconfig
  $ make dep; make clean; make bzImage; make modules; make modules_install


1. 소스 구하기 

   사이트:         ftp.kr.kernel.org, ftp.kernel.org
                http://www.kr.kernel.org/pub/linux/kernel/
   id:                 anonymous 
   pw:                 639@netian.com
   Dir:         /pub/linux/kernel/vX.Y
   안정버젼:         가운데 숫자가 짝수로 끝나는 것
   개발버젼:         가운데 숫자가 홀수로 끝나는 것 
   커널파일:         linux-x.y.z.tar.gz (여기서 x.y.z는 버젼)

2. 커널소스풀기(root로 작업)

   $ cd /usr/src
   $ uname -r                                # 구커널 버전 알아내기
     2.2.12   
   $ mv linux linux-2.2.12                # 구커널 백업, 소스를 풀기 전에 /usr/src/linux가 반드시 없어야 한다
   또는 $ tar zcvf  linux-2.2.12.tgz  linux         # 압축 백업
   $ tar xvzfp linux-2.2.15.tar.gz        # 새 커널 소스 풀기, 새 linux 디렉토리가 생긴다
   $ mv linux linux-2.2.15                # 새 커널 백업
   $ ln -s linux-2.2.15 linux                # 새 커널 링크
   $ cat ./linux/README                        # `INSTALLING the kernel' 글을 반드시 점검

3. 커널 설정(make config)

   $ cd /usr/src/linux
   $ cp /usr/src/linux/arch/i386/config.in config.in.old        # 디폴트 컴파일 환경설정을 복사 해둔다
   $ make menuconfig                # 메뉴 방식, 권장
   혹은 $ make config                 # 텍스드모드 설정
   혹은 $ make xconfig                # X윈도우에서 설정
   # 자세한 설정은 다른 파일 'Doc/커널설정.htm'을 참조한다        

4. 커널 컴파일(커널 이미지 생성) 및 커널의 설치

   $ make dep                 # 의존성, 파일들이 제대로 되어 있는지 확인
   $ make clean         # 오브젝트 파일과 구버전이 남겨논 것을 제거
   4.1 일반적인 방법(권장, bz는 압축을 의미, 옛날식 make zImage는 최대 1/2MB 크기, bzImage는 최대 2MB 크기)
       $ make bzImage                 # 새로 압축된 커널 bzImage 파일을 /usr/src/linux/arch/i386/boot 에 남긴다
       $ mv(cp) /usr/src/linux/System.map /boot/System.map-2.2.14
       $ mv(cp) /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.14
       $ cd /boot
       $ rm -f System.map; rm -f vmlinuz
       $ ln -s System.map-2.2.14 System.map
       $ ln -s vmlinuz-2.2.14 vmlinuz
   4.2 일괄처리 방법(비권장, 새 이미지 생성, "/boot/" 로 이미지와 System.map을 복사, lilo 등록, lilo 실행까지)
       $ make bzlilo        # /usr/src/linux/Makefile 중 INSTALL_PATH 부분의 주석을 없애주어야 boot 디렉토리에 저장된다
       $ cd /                 # 위에 안하면 / 에 vmlinuz, System.map 파일이 생긴다 
       $ cp vmlinuz /boot/vmlinuz-2.2.14
       $ cp System.map /boot/System.map-2.2.14
       $ cd /boot 
       $ rm vmlinuz; rm System.map
       $ ln -s vmlinuz-2.2.14 vmlinuz
       $ ln -s System.map-2.2.14 System.map
   4.3 플로피 부팅 디스크로 만들어 테스팅(부팅이 되면 정상)
       $ cd /usr/src/linux
       $ cat /usr/src/linux/arch/i386/boot/bzImage > /dev/fd0 
       혹은 $ dd if=arch/i386/boot/zImage of=/dev/fd0 
       혹은 $ make bzdisk

5. 모듈 컴파일

   $ cd /usr/src/linux
   $ make modules                # 커널 옵션에서 모듈(M)으로 선택한것을 컴파일
   $ make modules_install           # 위와같이 하면 '/lib/modules/커널버전' 디렉에 모듈들이 위치한다
                                # _ 주의
   $ depmod -a 2.2.15                 # 모듈 사이의 의존성을 검사하여 /lib/modules/2.2.15/modules.dep 파일을 만든다 

6. 부트 관리자 lilo.conf 편집
   $ vi /etc/lilo.conf                # 새 커널을 /etc/lilo.conf 파일에 등록

     boot=/dev/hda
     map=/boot/map
     install=/boot/boot.b
     prompt
     timeout=50
     message=/boot/boot.msg        # 부팅 메시지, 인사말과 부트 메뉴 목록 표시, [Tab]키와 같다

     image = /boot/vmlinuz        # 현재 설치된 커널을 나타낸다
     label = linux                # 부팅하게 될 커널이나 운영체제
     root = /dev/hda1                # 운영체제의 /
     read-only  

     image=/boot/vmlinuz-2.2.12-4        # 혹시나 모를 커널 패닉에 대비하여          
     label= linux.old                          # 예전 커널을 linux.old란 레이블로 해놓는다.
     root=/dev/hda1                        # (예전 버전이 2.2.12-4 일때) 
     read-only

7. $ lilo        # 꼭 lilo를 실행해줘야 한다
   $ reboot

8. 새 커널로의 부팅이 성공하면 다음을 해준다
   $ depmod -a
   $ modprobe -a *
  
9. 팁
   7.1 두번째 컴파일부터 간단히 하는 방법
       일단 컴파일을 하기위해 한번은 make menuconfig를 하십시오.. 
       그러면 /usr/src/linux에 .config가 생깁니다. 이걸 백업하십시오.. 
       그리고 나서 새로운 버전의 커널을 컴파일하려고 한다면 
       백업해 놓은 .config를 /usr/src/linux 에 카피해서 
       make oldconfig를 실행하십시오... 
       새로운 부분이 있다면 물어 볼 것입니다. 간딴하게 답하면 됩니다. 
---------------------------------------------------------------------

[ 심플 커널 컴파일 ]
$ cd /usr/src
$ rm -f linux
$ mkdir linux-2.3.8
$ ln -s linux-2.3.8 linux
$ tar xvzf linux-2.3.8.tar.gz
$ cd /usr/include
$ ll asm linux scsi
$ rm -rf asm
$ ln -s /usr/src/linux/include/asm-i386 /usr/include/asm
$ cd /usr/src/linux
$ make mrproper
$ make menuconfig
$ make dep
$ make clean
$ make bzImage
$ make modules
$ make modules_install
$ cd arch/i386/boot
$ cp bzImage /boot/mykernel-2.3.8
$ cd /etc
$ vi lilo.conf
  image=/boot/vmlinuz-2.0.36-3kr
             label=linux
             root=/dev/hda6
             read-only
  image=/boot/mykernel-2.3.8
             label=mykernel
             root=/dev/hda6
             read-only
$ lilo
$ reboot

-----------------------------------------------------------------------

[ 커널 패치 ]
  패치는 버전 순서대로 모두 적용해야만 한다
  커널 2.2.9에서 커널 2.2.12로 업그레이드하기 위해서 
  patch-2.2.10.gz, patch-2.2. 11.gz 모두를 순서대로 적용해야 한다

1. 백업하기
   $ cd /usr/src
   $ make clean
   $ tar zcvf '백업할커널이름.tar.gz' linux

2. 패치의 적용
   $ cd /usr/src
   $ ls
     linux linux-2.2.9 patch-2.2.10.gz patch-2.2.11.gzpatch-2.2.12.gz
   $ gzip -cd patch-2.2.10.gz | patch -p0    또는 $ zcat patch-2.2.10.gz | patch -p0
   $ gzip -cd patch-2.2.11.gz | patch -p0
   $ gzip -cd patch-2.2.12.gz | patch -p0

   또는 쉘의 for 명령을 이용해 자동화하려면
   $ for LeveL in 10 11 12 ; do
     > gzip -cd patch-2.2.$[LeveL].gz | patch -p0
     > done

   또는 자동실행하는 스크립트 이용하려면
   $ /usr/src/linux/scripts/patch-kernel

   또는 패치가 압축되어있지 않다면 $ patch -p0 < patch-2.2.10
   단지 에러 메세지만을 나오게 하려면 patch -s 플래그를 사용
   

3. 커널 컴파일
   패치된 커널 소스 디렉토리 이름을 패치레벨 번호로 바꾸고 링크를 다시 설정합 니다. 
   $ cd /usr/src
   $ rm -f linux; mv linux-2.2.9 linux-2.2.12; ln -s linux-2.2.12 linux
   $ cd /usr/src/linux
   $ (make mrproper); make menuconfig; make dep; make clean; make bzImage
   $ rm -rf /lib/modules/2.0.36; make modules; make modules_install; depmod -a 2.2.12
   $ cp /usr/src/linux/arch/i386/bzImage /boot/bzImage-2.2.12 
   $ vi /etc/lilo.conf
     boot=/dev/hda
     ...
     image=/boot/vmlinuz
                label=linux
                root=/dev/hdb1
     image=/boot/bzImage-2.2.12
                label=new
                root=/dev/hdb1
     other=/dev/hda1
                ...
   $ lilo; reboot
   ... new linux booting        # 성공 하였다면
   $ cd /boot
   $ rm -f vmlinuz
   $ ln -s zImage-2.2.12 vmlinuz


4. 에러 대처하기
   $ find /usr/src/linux/ -name '*.rej' -print
   $ vi *.rej
   $ vi config.in.rej
     # 고쳐진것은 보통 그 행의 처음에 `+'와 `-'로 표시가 된다. 'y'나 'n'를 적절히 바꾼다
   $ patch -p0 < config.in.rej
     실패가 없으면, 구성과 컴파일을 계속하고, 남아있는 config.in.rej 파일은 지워도 된다
     만일 `previously applied patch detected: Assume -R?'라고 나오고, `y'라고 답하면, 소스를 낮은 버전으로 되돌리는 것이다 
   패치를 되돌리려면, 원래 패치에서 `patch -R'을 사용하라. 

5. 원본 백업 파일 .orig의 삭제 
   $ find /usr/src/linux/ -name '*.orig' -exec rm -f {} ';'(;)
   혹은 더 좋은 방법  $ find . -name '*.orig' | xargs rm
   또는 확실하나 화면출력이 많은 방법 $ find . -name '*.orig' -print0 | xargs --null rm --
--------------------------------------------------------------------------

[ 심플 패치 ]

  $ cd /usr/src
  $ ls
    patch-2.3.9.gz  patch-2.3.10.gz
  $ linux/scripts/patch-kernel
  $ cd linux
  $ find . -name "*.rej"                        # 무소식이 희소식
  $ find . -name "*.orig" -exec rm -f {} ;
  $ cd /usr/src
  $ rm -f linux
  $ mv linux-2.3.8 linux.2.3.10
  $ ln -s linux-2.3.10  linux


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
48 System/OS [linux] ipfwadm를 이용한 패킷필터링(구버전) hooni 2003.04.23 13338
47 System/OS [linux] ipchains 사용예(패킷 필터링) hooni 2003.04.23 14505
46 System/OS [linux] ipchains 옵션 hooni 2003.04.23 13967
45 System/OS [linux] Xwindow/Xmanager 사용 hooni 2003.04.23 13800
44 System/OS [linux] 최소한의 커널 설정(커널설치 전체과정) hooni 2003.04.23 17770
43 System/OS [linux] 네트워크 커널 설정.. hooni 2003.04.23 16793
» System/OS [linux] 커널 컴파일, 설정 hooni 2003.04.23 18185
41 System/OS [linux] 네트웍 트래픽 모니터링(MRTG) hooni 2003.04.23 43853
40 System/OS [linux] DHCP(Dynamic Host Configuration Protocol) 서버 hooni 2003.04.23 13323
39 System/OS [linux] Masquerade 가상 ip분할기법 hooni 2003.04.23 48363
38 System/OS [linux] DNS(Domain Name System) 설치, 설정 hooni 2003.04.23 12748
37 System/OS [linux] sendmail 설정/사용 hooni 2003.04.23 14883
Board Pagination Prev 1 ... 8 9 10 11 12 13 14 15 16 17 Next
/ 17