관리 메뉴

드럼치는 프로그래머

[Linux] 커널의 개요와 컴파일하기 본문

★─Programing/☆─Linux

[Linux] 커널의 개요와 컴파일하기

드럼치는한동이 2007. 7. 31. 19:27

1. 커널(kernel)의 개요
(1) 커널: 리눅스에서 커널은 시스템 자원을 소유하고 관리하는 역할을 담당한다. 보통 하드웨어,
          메모리, 프로세스 스케줄링을 담당하고 프로그램이 하드웨어 자원을 간접적으로 접근할
          수 있도록 해준다.
(2) 커널버전
   1) 기본구성
     메이저.마이너.패치레벨
   2) 설명
     ㄱ. 메이저릴리즈: 메이저 릴리즈는 커널에 매우 큰 변화가 생겼을 경우를 나타낸다.
     ㄴ. 마이너릴리즈: 마이너 릴리즈는 중요한 기능상의 변화가 생기거나 추가된 경우를 나타내며
                      이것들을 한꺼번에 모아서 메이저릴리즈로 발표된다. 또한 마이너릴리즈는
                      두 가지로 나뉜다.
        a. 짝수번호 릴리즈: 짝수번호인 커널은 안정버전이다. (예 2.0, 2.2, 2.4, 2.6)
        b. 홀수번호 릴리즈: 홀수번호인 커널은 개발버전이다. (예 2.1, 2.3, 2.5) 주로 커널 개발
                           자들이 이용한다. 마이너 릴리즈의 개발 목표가 이루어지고 테스트 결과
                           안정성이 입증되면 짝수번호인 마이너릴리즈가 만들어진다.
     ㄷ. 패치레벨: 버그가 수정되고 새로운 기능의 계획이 추가되면 커널의 패치 레벨이 증가한다.
                  일반적으로 최근 버그가 수정된 가장 최신 버전의 커널을 사용하는 것이 안정적
                  이다.
(3) 필요한 도구: 자신만의 커널을 만들기 위해 C 컴파일러(리눅스에서는 GNU C컴파일러인 gcc), 어
                 셈블러, 링커, make유틸리티 등의 개발도구가 필요하다. 리눅스 설치시 개발옵션을
                 선택하면 기본적으로 설치된다.

2. 사용자 커널 컴파일
(1) 커널설정
   1) 설명: 커널을 만드는 첫번째 단계는 설정이다. 커널에는 파일시스템, SCSI, 네트워크 등 선택
           옵션이 있다. 이러한 많은 옵션들은 직접 포함되거나 모듈로 만들어져 커널의 기능이 된
           다. 설정 과정 중 원하는 옵션을 선택하면 된다.
   2) 설정규칙
     y: 커널에 컴파일(yes)
     m: 모듈로 컴파일(module)
     n: 기능을 사용하지 않음(no)
   3) 환경설정의 저장: 설정된 환경은 보통 /usr/src/linux/.config에 기록된다.
(2) 환경설정도구
   1) make config: 가장 기초적인 자동 설정도구로 시스템의 터미널 종류에 상관없이 실행가능하다.
                  이 명령을 실행하면 콘솔이나 윈도우에 각 옵션에 대한 질문이 나타난다. 사용자
                  는 질문에 대해 각각 y,m,n으로 대답한다. 이 도구는 상당히 장황하고 모든 옵션
                  에 대해 답을 해야한다.
   2) make menuconfig: 화살표키와 다른 키를 이용해 커널을 설정할 수 있는 텍스트 모드의 윈도우
                      환경을 제공한다. 이 때 터미널에서 커서를 제어할 수 있는 커스(curses)라이
                      브러리가 필요하다.
   3) make xconfig: X윈도우 기반하에서 사용한다. 라디오버튼으로 선택하는 방식이다.

3. 커널소스구하기
(1) 개요: 리눅스 커널은 리눅스의 창시자인 리누스 토발즈와 앨랜 콕스(Alan Cox)에 의해 개발되어
          발표되고 있다. 토발즈가 발표하는 커널은 두 가지형태로 배포된다. 하나는 안정버전과
          테스트가 필요한 개발버전으로 나뉘어 있다. 앨랜 콕스의 커널은 토발즈의 커널보다 새로
          운 기능의 커널을 패치하는 형태로 제공된다.
(2) 커널소스파일의 예
    linux-2.4.21.tar.gz
     => (설명)
        2 : 커널의 주 버전
        4 : 홀수면 개발버전을 나타내고, 짝수면 안정버전을 나타낸다.
       21 : 패치된 횟수이다.
(3) 커널 소스 구하기
   1) 설명: 관련사이트는 ftp.kernel.org 이므로 여기서 최신의 커널을 구할 수 있다.
   2) 참고: 최신 커널 버전 알아보기
     ㄱ. 설명: finger명령을 이용하여 최신의 커널버전을 알아볼 수 있다.
     ㄴ. 사용예
        [posein@www posein]# finger @ftp.kernel.org
        The latest stable version of the Linux kernel is:           2.4.21
        The latest prepatch for the stable Linux kernel tree is:    2.4.22-pre9
        The latest snapshot for the stable Linux kernel tree is:    2.4.21-bk23
        The latest beta version of the Linux kernel is:             2.6.0-test2
        The latest 2.2 version of the Linux kernel is:              2.2.25
        The latest 2.0 version of the Linux kernel is:              2.0.39
        The latest prepatch for the 2.0 Linux kernel tree is:       2.0.40-rc6
        The latest -ac patch to the stable Linux kernels is:        2.4.22-pre6-ac1

4. 커널소스풀기
(1) /usr/src 디렉토리로 이동한다.
(2) 관련사이트에 접속한다.
    ftp ftp.kernel.org    
(3) ID와 패스워드를 입력: 각각 anonymous/anonymous 라고 입력하거나 ftp/ftp라고 입력한다.
(4) cd /pub/linux/kernel/v2.4 로 이동한다.
(5) get 명령어를 이용하여 다운받는다.
   예) get linux-2.4.21.tar.gz
(6) tar 명령을 이용하여 압축을 푼다.
    tar zxvf linux-2.4.21.tar.gz
(7) 압축을 푼 디렉토리로 이동한다.
    cd linux-2.4.21 (예전의 경우에는 linux라는 디렉토리로 생성되는 경우도 있었음)

5. 커널컴파일(Kernel Compile)순서
make mrproper => make menuconfig => make dep => make clean => make bzImage => make install =>
make modules => make modules_install

(참고) make mrproper
       커널 컴파일시 make mrproper명령을 새로운 커널 설정을 위한 것으로, 기존에 설정되어 있는
      커널 설정값을 모두 초기화하고, 컴파일되어 있던 오브젝트(object, .o확장자를 가진 파일,
      이를 커널에서 모듈이라고 함)파일을 제거하여 커널 상태를 새로운 커널 설정에 맞도록 초기
      화해 주는 명령이다. 이 명령은 커널 컴파일시에 매번 실행할 필요는 없다. 기존 커널 설정을
      모두 무시하고 다시 설정하고자 할 때나 새로운 의존성을 설정하고자 할 때 요구되므로, 기존
      설정에 새로운 기능을 추가하는 경우에는 이 명령을 실행하지 않아도 된다.

6. 커널환경설정
(1) 환경설정 명령의 종류
   1) make config : 기본 텍스트명령으로 각 옵션을 선택한다.
   2) make xconfig : X윈도우 환경하에서 설정하는 명령이다.
   3) make menuconfig : 가장 많이 쓰이는 방법으로 ncurses를 이용한다.
(2) 커널 옵션 설정 규칙
   1) 기본규칙: 'y' 또는 '*'는 커널에 적재되도록 하는 것이며, 'm'은 모듈로 해당 기능을 사용함
               을 의미하고, 'n'은 커널에 해당기능을 사용하지 않겠다는 뜻이다.
   2) 참고: 불필요한 설정들은 시스템 자원을 많이 소모함으로 가능한 선택하지 않고, 기본적인 것
           들만 커널에 포함시키고 나머지들은 모듈로 작동될 수 있도록 한다.
(3) Menu
   1) Code maturity level options (N)
     ㄱ. 설명: 커널 코드의 성숙도를 선택하는 부분으로 '*'을 선택하면 개발 단계의 기능들을 사용
              한다는 의미이며, 'n'은 커널에서 안정적인 기능들만 사용하겠다는 설정이다. 기본적
              으로 'n'으로 한다.
     ㄴ. 메뉴
        Prompt for develpment and/or incomplete code/drivers
   2) Loadable module support
     ㄱ. 설명: 커널에서 모듈을 사용할 수 있도록 선택해주는 부분이다.
     ㄴ. 메뉴항목
        Enable loadable module support (Y)
         => 동적 모듈 기능을 가능하게 해주는 기능으로 원하는 기능을 메모리에 올려놓고 필요없는
           기능은 메모리에서 빼내는 것을 가능하게 해준다. 꼭 선택하도록 한다.
        Set version information on all module symbols (N)
         => 커널이 바뀌어도 기존의 모듈을 사용하게 해준다. 특별한 경우가 아니면 필요없지만
           가지고 있는 하드웨어 드라이버가 별도의 모듈로 제공되는 경우에는 선택해야 한다.
        Kernel module loader (Y)
         => 모듈에 대해 커널이 항상 대비해 주도록 설정하는 것이다. insmod나 modprobe등의
           명령을 사용하지 않고, kerneld라는 데몬이 자동적으로 모듈이 어느 기능을 수행하지
           않으면 자동적으로 모듈을 메모리에서 제거하는 기능을 갖는다. 유용하므로 반드시 선택
           하도록 한다.
   3) Processor type and features
     ㄱ. 설명: 자신의 컴퓨터에 맞는 CPU를 선택하는 부분이다. 컴파일후 재부팅시 일어나는 Panic
              현상의 대부분이 이곳 설정에서 발생한다. 만약 정확히 모른다면 386을 선택해도
              된다.
     ㄴ. 메뉴항목
       (Pentium-III/Celeron(Coppermine)) Processor family
         => 자신의 시스템에 맞는 CPU를 선택한다.
       [*] PGE extensions (not for Cyrix/Transmeta)
         => Pentium-II 계열선택시에 나타나는 메뉴로 PGE 지원여부이다. Cyrix나 Transmeta CPU가
           아니면 선택한다.
       [*] Machine Check Exception
        => 시스템에 문제점이 발생시에 프로세서가 커널에서 통지하는 것을 허락하는 옵션이다.
          선택하도록 한다. (Y)
       Toshiba Laptop support (N)
         => 도시바 랩톱인 경우에 선택한다.
       Dell laptop support (N)
         => 델의 랩톱인 경우에 선택한다.
       /dev/cpu/microcode - Intel IA32 CPU microcode support (N)
         => 펜티엄 프로, 펜티엄 II,III,IV등 IA32인텔계열의 프로세스에서 마이크로코드를
           업데이트할 수 있게 해주는 옵션이다. 그러나 리눅스커널에서 포함되어 있지 않는
           실제 마이크로코드 바이너리 데이터를 가지고 있어야 한다. File systems 항목에서
           "/dev 파일시스템 지원"이라는 옵션과 함께 설정해야 한다.
       /dev/cpu/*/msr - Model-specific register support (N)
         => 특권을 가진 프로세스들이 x86 Model-Specific Register(MSRs)에 접근할 수 있도록
           해주는 장치로 /dev/cpu/0/msr부터 /dev/cpu/21/msr디바이스에 주 장치번호 202와
           부장치번호 0~31을 가진다. 주로 멀티프로세스 시스템에서 적용된다.
       /dev/cpu/*/cpuid - CPU information support (N)
         => /dev/cpu/0/cpuid부터 /dev/cpu/31/cpuid에서 주장치번호 202와 부장치번호 0~31을
           가지는 디바이스로 프로세스들이 특정 프로세서에 실행될 수 있도록 지시하는 x86
           CPUID에 접근할 수 있도록 해준다. 역시 이것도 멀티프로세스 시스템에서 사용한다.
       (off) High Memory Support
         => x86리눅스 기반 시스템에서 물리적인 메모리를 최대 64기가 바이트까지 사용할 수
           있는데, 32비트 계열의 인텔 프로세스에서는 메모리주소 공간이 4기가 바이트까지만
           지원되어 그 이상의 물리적인 메모리를 가지고 있더라고 커널에서 모든 메모리가 영구
           적으로 매핑되지 못한다. 이 때 영구적으로 매핑되지 않는 메모리를 상위메모리(High
           Memory)라고 부르는데, 이 상위 메모리를 설정하는 옵션이다. 사용중인 시스템의 램이
           1GB 이하인 경우에는 off로 설정하고, 1~4GB인 경우에는 "4GB"로 설정하고 그 이상인
           경우에는 "64GB"로 설정한다.
       Math emulation (N)
        => 386이나 486SX에서는 수학 코프로세서(Math coprocessor)를 가지고 있지 않는 시스템에서
          에뮬레이터기능이 요구될 때 선택하는 옵션이다. 펜티엄급 CPU에서는 이 옵션이 필요없다.
       MTRR (Memory Type Range Register) support (N)
        => 인텔 펜티엄 프로와 펜티엄 II시스템에 있는 MTRR을 지원하는 것으로 프로세스가 메모리
          영역에 접근할 수 있도록 제어해 주는 기능을 한다. 이를 선택하면 PCI또는 AGP VGA카드의
          성능이 향상되며, X서버에서도 이 기능을 사용하므로 선택하도록 한다. 참고로 DVD-ROM을
          사용하는 경우에는 필히 선택한다.
       Symmetric multi-processing support (N)
        => 두 개이상의 CPU를 사용할 경우 선택한다. 최대 16개의 CPU를 지원한다. 이 옵션을 선택
          한 경우에는 Character devices  --->< > Enhanced Real Time Clock Support도 선택해야
          하며 General setup  --->< >   Advanced Power Management BIOS support는 'n'로 해야
          된다.
       Multi-node NUMA system support (NEW) (N)
        => 선택하지 않는다.
       Unsynced TSC support (NEW) (N)
        => 선택하지 않는다.
   4) General setup
     ㄱ. 설명: 일반적인 설정을 한다.
     ㄴ. 메뉴
        Networking support (Y)
         => 리눅스에서 네트워킹을 사용하게 해주는 옵션이다. 네트워크가 연결되어 있지 않더라고
           반드시 선택한다.
        PCI support (Y)
         => PCI 주변기기를 위하여 꼭 선택한다.
       (Any)   PCI access mode
         => PCI주변기기를 탐색하는 방법으로 "Bios"를 선택하면 바이오스가 이용되고, "Direct"를
           선택하면 바이오스가 이용되지 않는다. "Any"를 선택하면 커널이 직접 탐색하고 실패하는
           경우에는 바이오스에 의해서 실행하도록 한다.
        [*] ISA bus support
         => 메인보드에 ISA 슬롯이 있는 경우에 선택한다.
        PCI device name database (Y)
         => 커널에는 알려진 모든 PCI장치명에 대한 데이터베이스가 있어서 /proc/pci, /proc/iopor
           ts 그리고 유사한 파일명으로 사용자들이 이해할 수 있는 정보를 제공해준다. 이러한 데
           이터베이스는 대략 80KB정도의 커널 이미지크기이지만, 부팅될 때마다 제거되기 때문에
           커널 메모리를 차지하지 않으므로 선택한다.
        EISA support (N)
         => EISA(Extended Industry Standard Architecture)버스를 지원하는 경우에 선택한다.
           이것은 IBM마이크로채널 버스를 대체하기 위해 개발된 것으로 현재는 거의 사용하지
           않는다.
        MCA support (N)
         => MCA(MicroChannel Architecture)는 IBM ps/2기종과 랩톱에서 지원되는 것으로 PCI 또는
           ISA와 유사하다. 현재 거의 사용되지 않는다.
        Support for hot-pluggable devices (Y)
         => 이 기능은 주로 랩톱 컴퓨터나 노트북에서 PCMCIA카드와 같이 시스템이 동작되는 상태
           에서 장치를 끼워 바로 작동되도록 하고자 할 때 사용되는 기능으로 일반 데스크탑에서
           는 USB장치를 사용할 경우 선택한다.
       PCMCIA/CardBus support (N)
        => 노트북이나 랩톱컴퓨터에서 사용되는 기능이다.
       PCI Hotplug Support  --->
       System V IPC (Y)
        => 프로세스 사이에서 동기화와 정보교환을 위한 라이브러리 함수와 시스템 콜 모음이다.
          리눅스에서는 도스용 프로그램을 에뮬레이터를 통해서 실행시킬수 있다. 선택하도록 한다.
       BSD Process Accounting (Y)
        => 프로세스가 존재할 때에 사용자가 커널 프로세스의 정보를 알 수 있도록 해주는 옵션
          이다. 선택하도록 한다.
       Sysctl support (Y)
        => 시스템을 재부팅하지 않고 시행중인 커널 매개 변수를 동적으로 변경한다. /proc파일시스
          템이 설치되어 있으면 편집가능한 sysctl요소 트리는 /proc/sys에 생성된다. 커널의 크기
          가 8kb 늘어난다.
       (ELF) Kernel core (/proc/kcore) format
         => 커널 코어이미지(core image)를 담고 있는 /proc/kcore파일의 포맷 형태로 ELF 또는
           a.out로 설정한 것인가를 선택하는 옵션이다. 이 옵션을 사용하기 위해서는
           File systems  --->[*] /proc file system support를 같이 선택해야 한다. 커널해커가
           아니라면 ELF로 설정한다.
          Kernel support for a.out binaries (N)
          Kernel support for ELF binaries (Y)                                
          Kernel support for MISC binaries (N)
           => a.out(Assembler.Output)는 초창기 유닉스에서 쓰이던 방법이다. 슬랙웨어 바이너리
             파일 형태인 ELF가 나오기 전의 바이너리로 요즘은 사용되지 않으므로 선택하지 말고
             ELF는 리눅스 바이너리 포맷의 표준이므로 반드시 선택해야 한다. MISC는 선택하지
             않는다.
       Power Management support (Y)
         => 전원 관리 기능설정부분으로 시스템을 끄거나 사용하지 않을 경우에 절전모드로 전환
           하여 소비를 줄여주는 기능으로 APM(Advanced Power Management) 또는 ACPI(Advanced
           Configuration and Power Interface)에 의해서 작동될 수 있는데 이 기능을 사용하기
           위해서는 Advanced Power Management BIOS support [M]과 [*]     Use real mode APM
           BIOS call to power off (NEW) (Y)와 같이 사용한다.
   5) Memory Technology Devices (MTD) : 임베디드 시스템에 사용되는 메모리 장치 특히 플래시
                                       장치에 관련된 기능과 모듈들을 선택하는 옵션이다.
                                       선택하지 않도록 한다. (N)
   6) Parallel port support : 로컬시스템에서 로컬프린터를 사용할 경우에 이 옵션을 'y'로 설정
                             하거나 'm'으로 설정한다. 이 때 PC-style hardware (NEW)도 모듈로
                             설정하도록 한다.(Y or N or M)
   7) Plug and Play configuration: PNP기능을 사용하기 위해서는 반드시 이 옵션을 선택한다. ISA
                                  카드를 사용하지 않는 경우에는 ISA Plug and Play support는
                                  선택하지 않는다. (Y)
   8) Block devices
     Normal PC floppy disk support (Y)
      => 플로피 드라이브 지원여부이다. 선택하도록 한다.
     XT hard disk support (N)
      => 286컴퓨터에 사용되던 XT하드 디스크를 지원하는 옵션이다. 요즘은 이런 방식의 하드디스크
        는 사용하지 않으므로 선택하지 않는다.
     Compaq SMART2 support (N)
     Compaq Smart Array 5xxx support (N)
      => 컴팩 장치를 사용할 때 선택한다.
     Mylex DAC960/DAC1100 PCI RAID Controller suppor (N)
      => 해당회사의 RAID 컨트롤러를 사용하지 않는다면 선택하지 않는다.
     Loopback device support (M)
      => 파일 속에 파일시스템을 만들어 마운트하여 사용하도록 해준다. 블록 디바이스처럼 사용할
        수 있도록 해주는 기능이다. 특정한 파일시스템 테스트 또는 CD-ROM 이미지 테스트 등에
        유용하게 사용된다. 이 옵션을 모듈로 선택한다.
     Network block device support (N)
      => 네트워크로 연결된 서버의 파일 시스템을 마운트하여 블록 디바이스처럼 사용하고자할 때
        사용하는 옵션으로 이 옵션을 사용하지 않아도 NFS서비스를 이용할 수 있으므로 이 옵션은
        선택하지 않도록 한다.
     RAM disk support (N)
      => RAM을 하드디스크처럼 사용하고자 할 때 사용하는 옵션이다. 선택하지 않아도 된다.
     [*] Per partition statistics in /proc/partitions (NEW) (Y)
      => 파티션 상태를 /proc/partitions 라는 파일에 기록한다. 선택하도록 한다.
   9) Multi-device support (RAID and LVM) (Y)
     ㄱ. 설명: RAID장치를 사용할 수 있도록 커널에서 지원하는 소프트웨어 RAID를 사용하거나 LVM
              기능을 사용하기 위해서는 이 옵션을 선택한다.
     ㄴ. 메뉴
        Multiple devices driver support (RAID and LVM)
        RAID support (Y)
         => 이 드라이버는 여러 개의 하드 디스크 파티션을 하나의 논리적인 블록 디바이스로 통합
           시켜주는 기능을 한다. 단순히 하나의 파티션을 다른 하나의 파티션에 추가하거나 여러
           하드디스크들을 RAID/1/4/5디바이스로 연결시켜 주어 하드디스크에 이상이 생겼을 경우
           대처하고자 할 때 사용한다.
         Linear (append) mode (Y)
         RAID-0 (striping) mode (Y)
         RAID-1 (mirroring) mode (Y)
         RAID-4/RAID-5 mode (Y)
         Multipath I/O support (Y)
        Logical volume manager (LVM) support (Y)
         => 여러 개의 하드디스크, 여러 개의 파티션, 다중장치 혹은 루프 디바이스까지 하나의
           볼륨 그룹으로 묶어주는 역할을 하는 것으로 일종의 가상디스크 개념이다. 볼륨그룹내
           에서 가상 파티션이라 할 수 있는 논리 볼륨을 생성할 수 있으며, 용량에 따라서 볼륨
           그룹, 논리 볼륨의 크기를 조절할 수 있다. 논리 볼륨은 /dev/VolumeGroup/Name/Logical
           Name명을 가진 블록디바이스로 접근된다.
   10) Networking options
     ㄱ. 설명: 네트워크관련된 부분을 상세히 설정한다.
     ㄴ. 메뉴
        Packet socket (Y)
         => tcpdump와 같이 커널에서 실행중인 중간 네트워크 프로토콜없이 네트워크 디바이스와
           직접 통신할 수 있게 해준다. 이 옵션은 선택하도록 한다.(Y)
        Packet socket: mmapped IO
         => 패킷 프로토콜 드라이버가 IO매카니즘을 이용하게 되어 보다 빠른 통신이 가능하게 해준
           다. 선택하지 않아도 된다.(N)
        Netlink device emulation (NEW)
         => 커널의 어떤부분 또는 모듈과 사용자 프로세스들 사이에 쌍방향통신이 가능하도록 해주는
           옵션이다. 꼭 선택하도록 한다.(Y)
        Network packet filtering (replaces ipchains)
         => 리눅스 박스를 통과하는 패킷들을 필터링하는 설정에 관련된 옵션이다. ipchains는 커널
           2.2에서 사용하던 필터링기법이고, 2.4커널에서는 iptables를 사용한다. 방화벽을 설정
           하거나 마스커레이드를 사용한다면 선택한다.(Y)
         *Network packet filtering debugging (NEW)
            => 필터링관련 오류분석하는데 있어서 유용한 메시지를 줄 수 있으므로 디버깅 정보를
              필요로 하는 경우에 선택한다.(N)
        Socket Filtering
         => 사용자 공간 필터를 소켓에 연결할 수 있도록 해주고, 패킷 통과를 허용하거나 거부할
           수 있도록 해준다. 기본적으로는 선택하지 않는다.(N)
        Unix domain sockets
         => 소켓들은 네트워크 접속이 이루어지게 하고 접근될 수 있도록 하는 표준 유닉스 메카니
           즘으로 X윈도우나 syslog와 같은 프로그램들은 이 소켓을 이용하므로 선택한다.(Y)
        TCP/IP networking
         => 꼭 선택해야 하는 옵션이다. X윈도우 구동이나 로컬호스트의 핑과도 관련이 있다.(Y)
          * IP: multicasting
           => 네트워크상의 여러 컴퓨터에 동시에 같은 자료를 전송할 수 있도록 하는데 필요한
             옵션이다. 주로 인터넷방송국과 같은 스트리밍서비스하는 MBONE에 접속하기 위해 필요
             한 옵션이다. 기본적으로 선택하지 않는다.(N)
          * IP: advanced router
           => 시스템이 네트워크 패킷들은 포워드해주거나 재분배하는 기능을 갖는 라우터로 사용
             시에 필요한 옵션이다. IP 포워딩이나 마스커레이드를 사용할 경우에는 선택해야 한다.
             (Y)
          * IP: kernel level autoconfiguration
           => 커널이 부팅될 때 아이피와 라우팅테이블을 자동으로 설정할 수 있도록 해준다. 디스
             크가 없는 리눅스 시스템이 네트워크로 부팅될 수 있도록 하기 위해서는 이 옵션을
             선택해야 한다. 그러나 네트워크 이더넷 부팅을 하지 않는다면 사용하지 않도록 한다.
             만일 이 옵션을 선택하는 경우에 커널 부팅시 네트워크 부팅 설정을 하기 위해 오랜
             시간 동안 멈추는 현상이 있다.(N)
          * IP: tunneling
           => 하나의 프로토콜안에 다른 프로토콜 자료를 캡슐화하여 서로 다른 프로토콜 사이에서
             전송하는 기능으로 이 옵션을 Mobile쪽에서 사용되므로 선택하지 않는다.(N)
          * IP: GRE tunnels over IP
           => GRE(Generic Routing Encapsulation)는 시스코 라우터 사용시 유용하며, 멀티캐스트
             및 IPV6를 지원하지만 일반적으로 선택하지 않는다.(N)
          * IP: multicast routing
           => 멀티캐스팅 서비스를 할 경우에만 선택한다. 일반적으로 선택하지 않는다.(N)
          * IP: TCP Explicit Congestion Notification support (N)
           => ECN(Explicit Congestion Notification)는 라우터로 하여금 네트워크 폭주시 클라이
             언트에게 통보하게 하여 버려지는 패킷들이 감소되어 네트워크 성능을 향상시켜 주는
             데 이 옵션은 커널에 ECN기능을 추가해 주고, 실행도중 ECN기능이 꺼지도록 하는
             sysctl(/proc/sys/net/ipv4/tcp_ecn)도 추가해 준다. 일반적으로 선택하지 않는다.(N)
          * IP: TCP syncookie support (disabled per default) (Y)
           => TCP/IP의 결점을 이용하여 서버에 접속할 수 없도록 하는 SYN ATTACK을 막기 위해서는
             이 옵션을 반드시 선택해야 한다. 이 옵션을 사용하기 위해서는 File systems  --->
            /proc file system support와 General setup  --->[*] Sysctl support를 꼭 선택해야
            한다. 그리고나서 시스템이 부팅된 후 echo 1>/proc/sys/net/ipv4/tcp_syscookies 를
            실행시켜야 한다.
        IP: Netfilter Configuration : 필터링관련 프로그램사용허부를 설정한다. 2.4커널에서
                                     사용하는 iptables, 2.2커널에서 사용하는 ipchains, 2.0
                                     커널에서 사용하는 ipfwadm에 관련된 설정을 한다.
         * Connection tracking (required for masq/NAT) (NEW) (M)
          => 접속추적기능(Connection tracking)은 어떠한 패킷들이 리눅스 머신을 통과했는지
            기록하여 어떻게 접속되는지를 알 수 있도록 해준다. 이 옵션은 마스커레이드나 다른
            네트워크 주소변환(Network Address Translation, NAT)에 이용되며, 또한 패킷 필터링
            을 향상시키는데 사용될 수 있다.
           - FTP protocol support (NEW) (M)
            => FTP서비스에 대한 접속 추적기능을 사용하고자 할 때 사용한다.
           - Amanda protocol support (NEW) (N)
            => Amanda라는 백업패키지를 사용하는 경우에만 선택한다.
           -  TFTP protocol support (NEW) (N)
            => TFTP 를 사용하는 경우에만 선택한다.
           - IRC protocol support (NEW) (N)
            => 인터넷 채팅인 IRC에 대해서 접속 추적기능을 사용하고자 할 때 사용한다.
         * IP tables support (required for filtering/masq/NAT) (NEW) (Y)
          => iptables를 이용하여 패킷필터링, 마스커레이딩, 포트포워딩등 NAT기능을 사용할 때
            사용하는 옵션이다. 선택하도록 한다.(Y)
          - limit match support (NEW) (M)
           => 방화벽 규칙의 일치율을 조절할 수 있도록 해주는 옵션으로 "LOG target support"와
             함께 유용하게 쓰이며 일부 무차별 공격(DoS attack)을 막는데 유용하다.
          - MAC address match support (NEW) (M)
           => 이더넷카드의 맥주소를 패킷의 이더넷 주소에 따라서 패킷들과 일치시켜주는 기능을
            한다.
          - Packet type match support (NEW) (M)
           => 패킷이 BROADCAST, MULTICAST 등 주어진 조건과 매칭되는 것을 찾아주는 옵션이다.
          - netfilter MARK match support (NEW) (M)
           => Mark타겟에 의해서 설정되는데, 패킷 내에 있는 'ntmakr'값에 따라서 패킷들이 일치
             하는 값에 따라서 일치하도록 해주는 옵션이다.
          - Multiple port match support (NEW) (M)
           => 일련의 출발지 포트 또는 목적지 포트에 따라서 TCP 내지 UDP패킷들을 일치하도록 해
             주는 기능으로 일반적으로 하나의 규칙으로 단일 포트 범위만 일치해 줄 수 있다.(M)
          - TOS match support (NEW) (N)
           => IP패킷의 서비스 필드 유형에 따라서 패킷들을 일치시켜 준다.
          - ECN match support (NEW) (N)
           => TCP 헤더 필드의 ECN과 패킷들을 일치시켜준다.
          - AH/ESP match support (NEW) (N)
           => AH/ESP 패킷들을 일치시켜 준다.
          - LENGTH match support (NEW) (N)
          - TTL match support (NEW) (N)
          - tcpmss match support (NEW) (N)
           => TCP SYN 패킷의 MSS값을 검사할 수 있도록 해주며, 그러한 접속에 있어서 최대 패킷의
             크기를 조절해 주는 'tcpms  s'일치성을 부여한다.
          - Helper match support (NEW) (N)
          - Connection state match support (NEW) (M)
           => 추적된 접속과 관계에 따라 패킷들이 일치하도록 해주는 옵션으로 패킷 분류에 있어서
             매우 강력한 도구이다.
          - Connection tracking match support (NEW) (M)
           => 일반적인 conntrack 일치하도록 해주는 옵션이다.
          - Packet filtering (NEW) (M)
           => 패킷 필터링을 사용하고자한다면 선택한다.
             * REJECT target support (NEW) (M)
              => 거부 필터링 규칙이 들어오는 패킷에 응답하여 ICMP에러 메시지가 말없이 없어지지
                않고 나타나도록 지시하고자 할 때 사용한다.
          - Full NAT (NEW) (M)
           => 마스커레이딩, 포트포워딩, 또는 다른 형태의 완전한 네트워크 주소 포트변환기능을
             허용한다. 이는 iptables에서 'nat'테이블로 조절된다.
             * MASQUERADE target support (NEW) (M)
              => 마스커레이딩 환경에서 사용한다.
             * REDIRECT target support (NEW) (M)
              => 외부에서 들어오는 패킷들을 내부의 인터페이스 주소로 리다이렉트시키고자 할 때
               사용한다. 특히 포트 포워딩을 하고자 할 때 사용한다.
             * NAT of local connections (READ HELP) (NEW)
              => 로컬에서 접속하는 NAT를 가능하게 해주는 옵션이다.
          - Packet mangling (NEW) (M)
           => iptables에 패킷이 어떻게 라우트되는가에 영향을 주는 다양한 패킷 변환에 이용되는
             'mangle'테이블에 부여한다.
             * TOS target support (NEW) (M)
              => 'TOS'타겟을 부여하여 라우팅이 이뤄지기 전에 아이피 패킷에 대한 서비스 필드
                유형을 바꾸는 'mangle'테이블 내에서 생성할 수 있도록 해준다.
             * MARK target support (NEW) (M)
              => 'MARK'타겟을 부여하여 'mangle'테이블 내에서 라우팅이 이뤄지기 전에 패킷과
                연관된 넷필터 마크 필드를 변경하는 규칙을 만들 수 있다.
          - LOG target support (NEW) (M)
           => iptables내에서 패킷 헤더를 syslog에 기록하도록 하는 규칙을 만들 수 있도록 'LOG'
             타겟을 제공한다.
          - TCPMSS target support (NEW) (M)
           => TCP SYN패킷의 MSS값을 바꿀 수 있도록 해주고, 그러한 접속시 최대 크기를 조절할 수
             있도록 해주는 'TCPMSS'타겟을 사용하고자 할 때 쓰는 옵션이다.
          - ARP tables support (NEW) (M)
           => ARP 테이블 지원여부이다.
         * ipchains (2.2-style) support (NEW) (Y)
          => 커널 2.2대에서 사용하는 방화벽툴인 ipchains를 사용할 때 선택한다.
         * ipfwadm (2.0-style) support (NEW) (N)
          => 커널 2.0대에서 사용하는 방화벽툴인 ipfwadm를 사용할 때 선택한다.
        802.1Q VLAN Support (N)
         => 802.1Q VLAN 사용할 대 설정한다.
        The IPX protocol (N)
         => 노벨 네트워크 프로토콜을 사용할 때 설정한다.
        Applet!alk protocol support (N)
         => 애플 컴퓨터를 위한 네트워크 프로토콜을 사용할 때 설정한다.
        DECnet Support (N)
         => DEC사에서 개발한 프로토콜을 사용할 때 설정한다.
        802.1d Ethernet Bridging (N)
         => 리눅스 박스에서 하나의 이더넷을 브릿지로 하여 이더넷 네트워크를 연결하고자 할 때
           사용하는 옵션으로 이 기능이 필요할 때만 선택하도록 한다.
        QoS and/or fair queueing (N)
         => 패킷 스케줄에 따라 패킷을 제어할 때 사용되는 옵션으로 일반적으로 선택하지 않는다.
        Network testing   ---> (N)
         => Network 테스트관련 설정이다. 선택하지 않도록 한다.
   11) Telephony Support : 음성전화카드를 사용할 때만 선택한다. 보이스 모뎀과는 상관없으므로
                          선택하지 않는다. (N)
   12) ATA/IDE/MFM/RLL support
     Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (Y)
      => EIDE 하드디스크 및 CD-ROM등을 사용하기 위해서는 반드시 이 옵션을 선택해야 한다.
      * Use old disk-only driver on primary interface (N)
       => 선택이 필요없다.
      * Include IDE/ATA-2 DISK support (Y)
       => IDE 하드디스크 사용시 꼭 선택한다.
       - Use multi-mode by default : 멀티모드관련 부분으로 보통 아래와 같이 메시지가 나온다면
                                    꼭 선택해야 한다. (Y)
         hda: set_multimode: status=0x51 { DriveReady SeekComplete Error }
         hda: set_multimode: error=0x04 { DriveStatusError }
      * Auto-Geometry Resizing support (N)
       => HDD의 Geometry 조정 지원 여부를 지정한다.
      * PCMCIA IDE support (N)
       => PCMCIA 방식의 IDE를 사용할 경우 선택한다.
      * Include IDE/ATAPI CDROM support (Y)
       => EIDE CD-ROM을 사용할 경우 선택한다.
      * Include IDE/ATAPI TAPE support (N)
       => 백업테이프를 사용할 경우 선택한다.
      * Include IDE/ATAPI FLOPPY support (N)
       => IDE로 연결하여 사용하는 플로피 장치를 사용할 경우에 선택한다.
      * SCSI emulation support (M)
       => IDE CD-ROM과 같이 IDE주변기기를 SCSI장치처럼 사용할 수 있도록 에뮬레이트해주는 옵션
         으로 CD-RW을 사용한다면 설정해야 한다.
      * IDE Taskfile Access (N)
       => 선택하지 않는다.
      * CMD640 chipset bugfix/support (N)
       => CMD 640칩을 탑재한 마더보드를 사용할 경우 심각한 데이터를 상실시킬 수 있는 결함이
         있을 때 이러한 문제를 해결할 때 사용한다.
      * ISA-PNP EIDE support (N)
       => ISA타입 EIDE장치를 사용할 때 선택한다. 요즘은 잘 사용하지 않는다.
      PCI IDE chipset support
      * Generic PCI IDE chipset support (Y)
       => 마더보드의 IDE칩에 의해서 DMA기능을 사용하기 위해서는 이 기능을 선택한다. DMA33이상
         의 하드디스크를 사용하면 꼭 선택한다.
        - Sharing PCI IDE interrupts support
         => IDE칩이 다른 주변기기와 같은 IRQ를 사용할 수 있도록 허가할 때 사용하는 옵션이다.
           선택하도록 한다.(Y)
        - Generic PCI bus-master DMA support
         => DMA를 지원하는 하드디스크를 사용할 경우 선택하면 CPU의 부하를 줄일 수 있다.(Y)
        - Boot off-board chipsets first support
         => 마더보드에 내장되어 있는 IDE커넥터 외에 PCI카드 커넥터를 사용하는 경우 PCI카드의
           커넥터 인터페이스 ide0, ide1로 부여하는 옵션이다. ATA100 Controller Card등을 쓴다면
           이 옵션을 선택하고 그렇지 않은 경우에는 선택하지 않는다.(N)
        - Enable DMA only for disks
         => DMA 기능을 사용여부를 지정하는 옵션이다. (Y)
        - Pacific Digital ADMA-100 basic support (NEW) (N)
        - AEC62XX chipset support (N)
        - ALI M15x3 chipset suppor (N)
        - AMD Viper support (N)
        - CMD64X chipset support (N)
        - CY82C693 chipset support (N)
        - Cyrix CS5530 MediaGX chipset support (N)
        - HPT34X chipset support (N)
        - HPT366 chipset support (N)
        - Intel PIIXn chipsets support (N)
        - PIIXn Tuning support (N)
         => 인텔 칩셋 보드를 사용하는 경우에 선택한다. 보통 440BX, 440LX칩을 사용한 보드를
           지원하는 옵션이다.
        - NS87415 chipset support (N)
        - PROMISE PDC202{46|62|65|67} support (NEW) (N)
        - PROMISE PDC202{68|69|70|71|75|76|77} support (NEW) (N)
        - RZ1000 chipset bugfix/support (N)
        - SCx200 chipset support (NEW) (N)
        - ServerWorks OSB4/CSB5/CSB6 chipsets support (N)
        - SiS5513 chipset support (N)
        - SLC90E66 chipset support (N)
        - Tekram TRM290 chipset support (N)
        - VIA82CXXX chipset support (N)
      * Other IDE chipset support (N)
       => 그 외 기타 IDE관련 칩셋 지원이다. 해당 칩셋을 사용하는 보드라면 선택하도록 한다.
       - Generic 4 drives/port support (NEW) (N)
       - ALI M14xx support (NEW) (N)
       - DTC-2278 support (NEW) (N)
       - Holtek HT6560B support (NEW) (N)
       - QDI QD65xx support (NEW) (N)
       - UMC-8672 support (NEW) (N)
     Old hard disk (MFM/RLL/IDE) driver (NEW) (N)
      => 예전에 사용하던 MFM방식의 하드디스크를 장착했을 경우 사용한다. 현재는 거의 사용하지
        않으므로 선택할 필요가 없다.
     IGNORE word93 Validation BITS (N)
   13) SCSI support : 스카시장치를 사용하고자 하면 선택해야 한다. 또한 E-IDE CD-RW을 사용하기
                     위해서는  SCSI generic support를 사용해야 한다. 이 때 SCSI CD-ROM support
                     는 선택할 필요가 없다. (N)
   14) Fusion MPT device support : LSI 로직의 관련 장치를 사용할 때 선택한다. (N)
   15) I2O device support : Intelligent Input/Output(I20)은 전용 I/O프로세서를 가지고 있어 CPU
                           가 I/O처리를 잃지 않도록 해서 빠른 입출력 속도를 내고자 할 때 사용
                           한다. 이러한 아키텍쳐를 가진 인터페이스 어탭터 카드를 가지고 있는
                           경우에만 선택하도록 한다. (N)
   16) Network device support
      ㄱ. 설명: 네트워크장치를 선택하는 옵션이다. 맞는 장치를 선택하면 된다.
      ㄴ. 메뉴
         Ethernet (10 or 100Mbit) : 보통 사용하는 이더넷카드를 설정하는 옵션이다.
          * 정리: 일반적으로 사용하는 이더넷카드정리
           3COM cards : 유명한 3COM사의 네트워크카드이다.
           Other ISA cards : 예전에 사용하던 10MBPS용 이더넷카드를 선택할 수 있다. 예전의 ISA
                            랜카드를 사용하려면 NE2000/NE1000 support (NEW) 를 선택한다.
          * 참고: 하나로통신이나 한국통신의 ADSL 외장형모뎀을 사용하기 위해서는 PPP모듈에 대
                 해서 설정을 해주어야 한다. PPP(Point-to-Point Protocol) support항목에서 2가지
                 를 선택한다.
             PPP support for async serial ports (NEW)
             PPP support for sync tty ports (NEW)
   17) Amateur Radio support: 아마추어 햄통신을 할 경우에 선택한다. (N)
   18) IrDA (infrared) support: IrDA(무선 적외선 포트)장치가 있다면 선택한다. 이 기능을 사용
                               하려면 irmanager와 irattach와 같은 유틸리티가 필요하다. (N)
   19) ISDN subsystem: ISDN을 사용할 경우에만 선택한다. 현재는 거의 서비스를 하지 않고 있다.
   20) Old CD-ROM drivers (not SCSI, not IDE) : 2배속과 같은 구형의 CD-ROM을 사용할 때 선택
                                               한다. (N)
   21) Input core support: USB방식의 키보드와 마우스를 사용할 때 선택해야 한다. (Y or M)
   22) Character devices
      Virtual terminal: 리눅스에서 지원하는 가상 콘솔을 사용하기 위해서는 이 옵션을 선택해야
                       한다. CTRL+ALT+F1~F6키를 사용하는 콘솔이다.
       * Support for console on virtual terminal (Y)
        => 시스템콘솔은 모든 커널메시지와 경고메시지를 전달받고, 싱글 유저 모드로 로그인을
          할 수 있도록 해주는 디바이스로 이 옵션을 선택해 줌으로써 가상 콘솔을 "console=tty4"
          와 같은 명령을 사용하여 시스템 콘솔을 사용할 수 있다.
      Standard/generic (8250/16550 and compatible UARTs) serial support (N)
       => 시리얼포트에 장착된 디바이스(모뎀, 마우스)를 사용하고자 할 때 사용한다.
       * Support for console on serial port (N)
        => 시리얼 콘솔로 부팅할 경우처럼 시리얼포트를 시스템 콘솔로 사용할 수 있다.
      Non-standard serial port support (N)
       => 표준 시리얼포트가 아닌 멀티 포트를 지원할 때 사용한다.
      Unix98 PTY support (Y)
       => 가상 접속 터미널 디바이스의 /dev/pts파일 시스템 형태를 사용하고자할 때 사용하는 옵
         션으로 선택한다.
      (256) Maximum number of Unix98 PTYs in use (0-2048) (256)
       => 동시에 가상 터미널로 접속 가능한 디바이스 개수를 설정한다. 동시 접속자 수를 늘리려면
        값을 증가시키면 된다.
      I2C support (N)
       => I-Square-C라고 하면 많은 마이크로 컨트롤러에서 사용되는 느린 직렬버스 프로토콜로 필립
         스에서 개발된 것으로 하드웨어 센서 기능과 비디오지원시 이 기능을 필요로 한다.
      Mice (Y)
       => 시리얼 마우스가 아닌 PS/2마우스를 설정할 때 사용된다.
      Joysticks (N)
       => 조이스틱을 설정할 때 사용한다.
      QIC-02 tape support (N)
       => 비스카시 테입 드라이브를 가지고 있다면 선택한다.
      Watchdog Cards (N)
       => 시스템이 잠금 상태로 서비스를 제공할 수 없는 상태일 경우 시스템을 다시 시작할 수
        있도록 해주는 기능이다. 일반적으로 선택하지 않는다.
      Intel i8x0 Random Number Generator support (N)
       => 인텔 i8xx기반 마더보드에 있는 난수 발생기를 커널 차원에서 지원해주는 드라이버이다.
      /dev/nvram support (N)
       => 일반 PC바이오스라고 하고, 아타리에서는 NVRAM이라고 부르는데, 하드 디스크에 두기는
         위험한 데이터 또는 정전되었을 때 사라지면 안되는 데이터들을 저장하는데 사용된다.
      Enhanced Real Time Clock Support (Y)
       => PC에 내장된 실시간 클럭을 액세스 할 수 있도록 해주는 기능이다. 이러한 클럭정보는
         /proc/rtc파일을 통하여 볼 수 있으며, 멀티 프로세스를 사용하는 시스템이라면 이 옵션
         을 선택하도록 한다.
      Double Talk PC internal speech card support (N)
       => RC system사에 만든 음성합성장치인 Double Talk PC를 위한 기능이다.
      Ftape, the floppy tape device driver (N)
       => 플로피디스크 컨트롤러에 연결된 테이프 드라이브가 있다면 사용한다.
      /dev/agpgart (AGP Support) (M)
       => agpgart모듈은 3D 가속 비디오카드의 AGP기능을 사용할 수 있도록 해준다. 커널에 이
         모듈이 로딩되어 비디오 카드나 특수한 값을 전송하여 GART레지스터에 프로그래밍할 수
         있도록 해준다. AGP비디오 카드를 가지고 있어 이 기능을 사용하고자 한다면 모듈로 선
         택하고 자신의 마더보드에 있는 AGP지원 칩을 선택한다.
      Direct Rendering Manager (XFree86 DRI support)
       => XFree86 4.0이상부터 지원되는 DRI(Direct Rendering Infrastructure)를 커널에서 사용할
         수 있도록 해주는 기능이다. 이 모듈은 동기화 및 보안 그리고 DMA전송을 지원한다. 커널
         2.2대부터 지원해 즈는 비디오 카드 칩으로는 3DFX 부두계열, GMX200, ATI RAGE128, I810,
         MATROX의 G200/G400등이 있다.
   23) Multimedia devices: 멀티미디어관련 장치를 설정하는 부분이다. (N)
   24) File systems
     ㄱ. 설명: 파일시스템 여부를 설정하는 단계로 필요없는 파일시스템에 대해서는 설정하지
               않도록 한다.
     ㄴ. 메뉴
        Quota support (Y)
         => 사용자들에게 계정 용량을 제한하기 위하여 디스크 쿼타를 설정한다면 선택해야 한다.
        Kernel automounter support (N)
        Kernel automounter version 4 support (also supports v3) (Y)
         => 원격 호스트의 파일 시스템들은 유저들의 요구에 따라 자동으로 마운트해주는 기능으로
           NFS서버를 마운트하고자 한다면 선택해야 한다.
        Reiserfs support (Y)
         => 저널링 파일시스템(Journalling Filesystem)인 reiserfs파일시스템은 정전 또는 시스템
           장애로 인하여 생긴 파일시스템 문제를 리눅스 표준 파일 시스템인 ext2와 같이 시스템을
           체크하지 않고, 인덱스에 대한 로그를 기록하여 손상된 파일 시스템을 복구하는 파일시스
           템으로 이 파일시스템을 사용한다면 선택한다.
        DOS FAT fs support (Y)
         => 윈도우 95/98을 사용하여 이러한 운영체제의 파일 시스템을 리눅스에서 사용하고자 할
           때 필요한 옵션이다.
        Virtual memory file system support (former shm fs) (N)
         => 가상메모리에 있는 모든 파일들을 보존해주는 파일시스템을 지원하는 옵션이다. 이 기능
           을 사용하려면 /etc/fstab에 다음과 같이 설정해야 한다.
           tmpfs    /dev/shm    tmpfs    defaults   0 0
        Simple RAM-based file system support (N)
         => RAMfs는 램내에 있는 모든 파일들을 보존해주는 파일 시스템으로 읽고 쓰기가 가능한
           파일시스템이다. 이 기능을 사용한다면 /etc/fstab에 다음을 추가해야 한다.
           ramfs    /dev/ramfs    ramfs    defaults   0 0
        ISO 9660 CDROM file system support (Y)
         => CD-ROM을 마운트하기 위해서는 반드시 선택해야 한다.
          * Microsoft Joliet CDROM extensions
           => 마이크로소프트사의 CD-ROM형식이다.
        NTFS file system support (read only) (Y)
         => 리눅스와 Microsoft NT를 같이 사용한다면 선택해야 한다.
        /proc file system support (Y)
         => 커널과 프로세스 정보들을 가지는 /proc파일시스템 지원을 위한 옵션이다 .반드시 선택
          해야 한다.
        /dev/pts file system for Unix98 PTYs (Y)
         => 가상 터미널 포트로 /dev/pts를 사용할 수 있도록 해주는 옵션으로 반드시 선택해야
           한다.
        Second extended fs support (Y)
         => 리눅스 파일시스템인 ext2를 지원하는 옵션이므로 반드시 선택해야 한다.
        Network File Systems (Y)
         => 삼바와 NFS같은 네트워크 파일시스템을 지원하는 옵션이다.
         * NFS file system support (Y)
          => NFS 클라이언트로 사용하게 되면 필요하다.
         * NFS server support (Y)
          => NFS 서버로 사용시에 필요하다.
         * SMB file system support (to mount Windows shares etc.) (Y)
          => 삼바 윈도우 서버를 마운트할 때 필요하다. 삼바서버를 운영시에는 필요가 없다.
        Partition Types
          => 확장된 형태의 파티션 타입을 선택할 때 쓴다. 지정하지 않는다.
        Native Language Support
          => 추가로 사용할 언어를 지정할 때 쓴다.
            "Korean charset (CP949, EUC-KR) (NEW)" 찾아 선택하도록 한다.
   25) Console drivers
      ㄱ. 설명: 콘솔 드라이버에서 유용한 옵션으로 프레임버퍼(Frame Buffer)의 지원으로 커널
               부팅시 펭귄 그림을 화면 좌측 상단에 띄울 수 있고, 커널 메시지를 해상도에 따
               라 조절할 수 있도록 해준다.
      ㄴ. 메뉴
         VGA text console (Y)
         Video mode selection support (Y)
          => LILO에 "vga=옵션"을 설정하여 부팅시 VGA해상도를 선택할 수 있다.
            Color    640x480   800x600   1024x768   1280x1024   1600x1200
             8비트    0x301     0x303     0x305       0x317      0x31D
            16비트    0x311     0x314     0x317       0x31A      0x31E
            24비트    0x312     0x315     0x318       0x31B      0x31F
   26) Sound : 사운드 카드를 설정할 때 한다. (N)
   27) USB support
     ㄱ. 설명: UBS장치를 설정해 주는 옵션이다. 이 항목에서 USB마우스, USB키보드,스캐너,프린터
              화상카메라등을 설정할 수 있다.
     ㄴ. 메뉴
        Support for USB (Y)
         => 장치를 사용하려면 반드시 선택해야 한다.
        UHCI Alternate Driver (JE) support (Y)
         => 현재마더보드에서 사용하는 방식으로 꼭 선택해야 한다.
        Preliminary USB device filesystem (Y)
         => USB장치관련 파일시스템을 지원하도록 해준다 .선택하도록 한다.
        USB Human Interface Device (full HID) support (Y)
         => USB장치들을 커널에 탑재되도록 하거나 모듈화 해준다. 선택하도록 한다.
   28) Bluetooth support (N)
      => 블루투스를 사용하면 선택하도록 한다.
   29) Kernel hacking
      Kernel debugging (Y)
       => 커널 디버깅중에 시스템이 다운되었을 경우 Magic키를 사용하여 시스템을 제어할 수
         있도록 해준다. 선택하도록 한다. Magic키를 사용하는 방법은 sysRq+Alt+[명령키]를 조합
         하여 누른다. 대표적인 명령키로는 K는 현재의 가상 콘솔의 모든 프로그램을 죽이고자
         할 때 사용하며, B키는 하드디스크를 언마운트하지 않은 상태에서 바로 재부팅하고자 할 때
         사용한다. 그 외의 자세한 옵션은 /usr/src/linux/Documentation/sysrq.txt에 있다.
   30) Library routines (N)
      => zlib관련 루틴사용여부이다. 선택하지 않는다.
(4) 저장하고 빠져나오기: 커널옵션을 설정한 후에 EXIT버튼을 눌러 저장하고 빠져나온다.

7. 의존성검사 및 클리닝
(1) 커널 의존성 검사
   1) 설명: 커널의 이미지를 생성하기에 앞서 필요한 라이브러리나 헤더 파일 등이 시스템에 제대
           로 있는지의 의존성을 확인한다.
   2) 사용법
     make dep
(2) 크리닝
   1) 설명: 기존의 소스로 컴파일을 한번이라도 한 경우에 생겼을 오브젝트 파일이나 임시 파일,
           커널 이미지등의 잔여물을 없애기 위한 것으로 소스 파일이나 rpm파일을 새로 가져와서
           처음 할 경우에는 안 해도 별 상관없지만, 습관처럼 사용해도 된다.
   2) 사용법
     make clean

8. 커널이미지 만들기(컴파일단계)
(1) 설명: 컴파일 과정은 make bzImage명령을 실행하여 수행한다. 이 명령을 수행하게 되면 커널의
          이미지는 /usr/src/linux/arch/i386/boot디렉토리에 bzImage로 생성된다. 그러나 이렇게
          생성된 커널이미지는 /boot디렉토리로 자동 이동되지 않으므로 make install명령을 실행
          하여 /boot/vmlinuz-커널 버전파일로 복사하고, 바뀐 커널 이미지로 정보를 변경해야
          한다.
(2) 커널이미지의 종류
   1) make zImage: 커널의 이미지를 GNU zip형식으로 압축하여 만든다. 커널 사이즈가 크기않은
                  시절에 많이 사용하였다. 요즘에도 사용할 수 있지만 현재의 커널들이 상당히
                  많은 기능과 드라이버를 제공하기 때문에 이 컴파일 명령으로 만들어진 커널이
                  지는 크기가 너무 커져 커널에 올리기가 어렵다.
   2) make bzImage: 커널의 이미지를 압축률이 높은 .bz형식으로 압축하여 만든다. make zImage와
                   같지만, 큰 커널이미지를 만들 때 유용하다. 일반적으로 사용한다.
   3) make zlilo: 커널의 이미지를 만든 후에 LILO에 등록한다.
   4) make zdisk: 커널의 이미지를 만든 후에 플로피디스크에 복사
   5) make bzlilo: make bzImage와 lilo명령을 한번에 수행하는 결과를 보이게 된다. 따라서 make
                  bzImage에 의해서 생성된 커널이미지를 /boot디렉토리로 복사하고 바뀐 커널이미
                  지로 리로정보를 갱신하도록 lilo명령을 실행하도록 하는 일련의 컴파일명령이다.
(3) make install : 이 명령을 수행하기 위해서는 먼저 /sbin/installkernel파일이 존재해야 한다.
                   이 명령을 수행하면 커널이미지를 생성하고 생성한 이미지를 /boot디렉토리에
                   커널이미지를 복사하고, lilo명령을 수행하여 lilo정보를 변경하면 된다.
(4) 사용예
   make bzImage
   make install

9. 커널모듈 만들기(make modules)
(1) 설명: 커널 모듈은 make modules명령에 의해서 만들어지며 make modules_install명령에 의해
          /lib/modules/커널버전 디렉토리로 자동 복사하게 된다. 그리고 depmod -a 명령을 실행
          하여 컴파일된 모듈에게 의존성을 부여하게 된다. 이렇게 생긴 모듈은 커널에 적재되는
          것이 아니므로 커널에 적재하려면 modprobe 나 insmod명령으로 해당 모듈 드라이버를
          띄워야 한다.
(2) 사용예
   make modules
   make modules_install
   depmod -a

10. Boot Loader의 환경설정파일 편집
(1) lilo인 경우
   1) 설명: 커널 컴파일후에는 새로운 커널로 부트 로더 정보를 갱신해 주어야 하는데, 컴파일된
           커널 이미지의 경로를 /etc/lilo.conf에서 커널 이미지부분을 추가하거나 수정해야 한다.
   2) 사용예
     boot=/dev/hda
     map=/boot/map
     install=/boot/boot.b
     prompt
     timeout=50
     message=/boot/message
     lba32
     default=linux

     image=/boot/vmlinuz-2.4.2-3
       label=linux
       read-only
       root=/dev/hda7

     image=/boot/vmlinuz-2.4.18
       label=linux_new
       read-only
       root=/dev/hda7
        => 이렇게 새로운 커널 이미지를 리로설정파일에 추가하면 컴파일이 잘못되어 커널이미지에
          이상이 있어 부팅되지 못할 경우 기존의 커널이미지로 부팅하여 복구할 수 있도록 하기
          위해서이다.
(2) grub인 경우
   1) 설명: grub.conf에 커널이미지부분을 추가한다.
   2) 사용예
     default=0
     timeout=10
     splashimage=(hd0,0)/grub/splash.xpm.gz
     title Red Hat Linux (2.4.20-8)
             root (hd0,0)
             kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
             initrd /initrd-2.4.20-8.img

     title Red Hat Linux (2.4.21)
             root (hd0,0)
             kernel /vmlinuz-2.4.21
             initrd /initrd-2.4.21.img           // mkinitrd 명령으로 생성해야 한다.
(3) 참고: mkinitrd 명령을 통한 초기화 램디스크 이미지 생성
   1) 설명: 레드햇 8.0 버전부터는 본격적으로 ext3파일시스템을 사용한다. ext3 파일시스템에서는
           부팅시 필요한 모듈과 이미지를 초기화 램디스크 이미지로 부팅시에 부트로더가 읽어들이
           도록 되어 있다. 따라서 해당 이미지를 만들어 줘야 한다.
   2) 사용법
     mkinitrd /boot/initrd-커널버전.img 커널버전
   3) 사용예
     mkinitrd /boot/initrd-2.4.21.img 2.4.21

Comments