Contents

System/OS
2003.04.23 10:31

[linux] 커널 컴파일, 설정

조회 수 17845 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
1173 System/OS 해커스랩 깨기.. 후후.. ㅋㅋ file hooni 2013.04.23 18413
1172 Etc 플라스터(Plaster) 수업 내용 secret hooni 2016.05.24 0
1171 Develop 프로그램 문서 관리 (Doxygen) hooni 2013.04.23 16385
1170 Develop 프로그래밍에서 foo, bar 함수의 유래 file hooni 2013.06.25 21247
1169 Develop 프로그래밍 소스 관련 사이트.. hooni 2013.04.23 16485
1168 Develop 페이팔에서 돈 찾기 (Paypal withdraw) file hooni 2014.02.20 11369
1167 Etc 티스토리 테이블 html,css 구문 hooni 2013.11.03 15946
1166 System/OS 콘솔에서 패스워드 걸린 zip 압축하는 명령 hooni 2018.03.02 931
1165 System/OS 컴파일러 수업 자료(교재 : 컴파일러 입문) file hooni 2003.04.23 21966
1164 Develop 캘리포니아 운전면허 족보 file hooni 2017.06.12 728
1163 Etc 캘리포니아 운전면허 문제 file hooni 2017.07.22 970
1162 Develop 최근 논문 자료 (2011/01/03, 만현형한테 보낸거..) secret hooni 2013.04.23 10366
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 98 Next
/ 98