Linux Kernel Compile





sudo -i         (루트 계정으로 전환한다)

cd /usr/src     (반드시 이 디렉토리일 필요는 없지만 관용적으로 많이 쓰인다)

wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.3.2.tar.bz2

                (kernel.org에서 원하는 리눅스 커널 소스 코드 다운로드)

tar xvfj linux-3.3.2.tar.bz2    (압축 풀기)



cd linux-3.3.2

make mrproper           (의존성 제거)

make clean    (mrproper와 clean 단계는 특별한 이유가 없는 한

 두 번째 컴파일부터 생략 가능하다)

make menuconfig

make localmodconfig    (현 시스템의 모듈 인식, usb 쓸려면 꼽고 돌려라)

커널을 컴파일 해보자. 컴파일 순서는 다음과 같다.
  • make dep
  • make modules
  • make bzImage
  • make modules_install
make dep로 소스 파일과 헤더와의 의존성을 검사해 /usr/src/linux/.depend를 만든다.
make modules는 설정에서 module로 선택한 것들을 *.o의 형태로 만들어 준다.
make bzImage는 커널 자체를 만들어 준다. make zImage를 하는 경우 커널의 크기가 너무 커서 에러가 날 수도 있다. 이 경우엔 더 많은 부분을 모듈로 만들거나 bzImage를 사용해야한다.
make modules_install은 만들어진 module을 /lib/modules/2.4.16에 설치해 준다. 설치와 함께 depmod를 실행해 module 간의 의존성도 만들준다.



커널 테스트 및 설치

커널 컴파일이 끝난 후 만들어진 커널이 제대로 동작하는지 확인해본 후 기본 커널로 설치해 사용해야한다. 그렇지 않고 무턱대고 원래의 잘돌아가던 커널을 대체해버리면 혹시라도 에러있는 커널인 경우엔 부팅이 안되는 위급한 사태가 발생하게 된다. 그러므로 만들어진 커널을 먼저 테스트 후 사용하기 바란다.
테스트 방법엔 2가지 정도를 추천한다. 하나는 플로피를 사용하는 것이고 나머지 하나는 LILO를 사용하는 것이다.

플로피를 사용하는 방법
플로피를 사용하기 위해 make zdisk를 사용해 만들어진 커널을 플로피에 담는다. 복사가 끝나면 플로피를 사용해 부팅해 정상적으로 동작하는지 확인한다. 가장 안전한 방법 중 하나로 생각되고 문제가 있으면 플로피를 제거하고 다시 부팅해 커널 설정 등을 다시 하고 테스트를 하면 된다.
LILO를 사용하는 방법
LILO를 사용해 하는 방법은 아래와 같이 /etc/lilo.conf를 우선 수정한다. 먼저 염두에 둬야할 것은 만들어진 커널 이미지를 어디에 무슨 이름으로 복사할 것인지 결정해 두고 일을 진행해야한다는 것이다. 필자의 경우 보통은 $(TOPDIR)/arch/i386/boot/bzImage[1]를 /boot/test_img로 복사하고 테스트 한다.
아래는 필자의 lilo.conf다. 기본 부팅용 항목을 그대로 복사하고 image와 label 만을 바꿔 하나더 등록해 부팅한다. 부팅 후엔 LILO에 test라 입력해 새로 만든 테스트 커널을 실험해 보면 된다.

prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
#message=/boot/message
lba32
vga=0x030a

image=/boot/bzImage-2.4.16
label=linux
initrd=/boot/initrd-2.4.16.img
read-only
root=/dev/hda1
append="mem=nopentium hdd=ide-scsi"

image=/boot/test_img
label=test
initrd=/boot/initrd-2.4.16.img
read-only
root=/dev/hda1
append="mem=nopentium hdd=ide-scsi"
커널의 설치는 간단하다. 커널 이미지와 맵 파일을 복사하고 lilo.conf를 수정해주면 된다. 복사할 파일은 $(TOPDIR)/arch/i386/boot/bzImage와 $(TOPDIR)/System.map 두 개다.
필자는 bzImage를 /boot/bzImage-2.4.16과 같이 버전 이름을 사용해 복사하고 System.map을 /boot/Sysstem.map-2.4.16과 같이 복사한다. 그리고 /boot/System.map-2.4.16을 /boot/System.map 으로 심볼릭 링크를 만들어 준다. 커널은 /boot/System.map을 찾아 사용하기 때문이다.

주석

$(TOPDIR)은 커널 소스 디렉토리를 가리킨다. 즉 /usr/src/linux.



출처 : https://wiki.kldp.org/KoreanDoc/html/EmbeddedKernel-KLDP/



Linux Kernel Compile


1. Linux Kernel Download - http://kernel.org 
2. Essential package install (ubuntu )
- sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 kernel-package -y
2-1. build-essential 
2-2. libncurses5
2-3. libcurses5-dev
2-4. bin86
2-5. kernel-package
위에 것을 하나 하나 설치 해도 되고 한번에 설치 하려면 위에 붉은 색의 라인을 터미널에서 설치하면된다
 

3. unpacking download kernel source

4. change directory unpacking source holder

4-1. example ~/Downloads/linux-3.14.1

... ~/Downloads/linux-3.14.1 $

5.  Compile (실제로 컴파일 하는 과정) 필수
   5-1. sudo make mrproper
   5-2. sudo make distclean
   5-3. sudo make menuconfig
   5-4. sudo make-kpkg --initrd --revision=1.0 kernel_image
   5-5. sudo dpkg -i  linux-image-3.14.1_1.0_amd64 (해당 컴파일 버전 이미지)
   5-6. sudo reboot
   5-7. $uname -a (all) version view

          *  select menuconfig and menuconfig save and exit
          *  /boot/config-3.11.0-12-generic -- old config
          menuconfig - load config (/boot/old config file ) and save .config
          and exit

          메뉴구성에서 기존의 자신의 설정 구성파일을 가져다 사용하는것도 특별한 추가
          변경 사항이 없다면 /boot/old-config 파일을 로드하여 다시 .config 로 저장하면
          된다.
        
   
         mrproper  는 이전에 설정한 정보를 지우거나 새로운 커널 소스를 가져다
              컴파일 할 때에 사용합니다.
           이전 커널을 컴파일할 때 만들어진 오브젝트 파일(*.o)과 의존성 설정,
           컴파일 환경 설정값, 버전 정보 등 새로 시작하는 컴파일에 영향을 주는 이전
           정보들을 삭제합니다.

           이전에 설정된 컴파일환경을 재사용한다면 이 명령을 수행할 필요는 없습니다.
 
         distclean은 리눅스 커널소스인 .tar.gz 를 풀었을 때와 같은
             상태로 만들어 주는 겁니다.

댓글

이 블로그의 인기 게시물

jquery css

Struts2의 작동 원리

JSP/Servlet 한글 깨짐 처리 ?