Skip to content

커널 2.6으로 업그레이드!「A to Z」

조회 수 64402 추천 수 0 2009.08.08 02:58:44

커널 2.6으로 업그레이드!「A to Z」      차영호(미지리서치) 19/07/2004

 

리눅스 커널이면 다 똑같은 것이 아니냐고 반문하는 독자들도 있을지 모르겠지만 현재 여러 프로젝트 또는 커널 개발자들이 자신의 소스코드 트리를 가지고 있으며 자신만의 특징을 지니고 있다. 먼저 이 여러 패치 셋 중 자신에게 맞는 것을 선택하는 것 또한 중요하다.

◆ vanilla source : 리누스 토발즈가 릴리즈한다. 다른 패치 셋이 전혀 포함되지 않은 오리지널 리눅스 소스이다.
◆ bk snapshot : bk는 리눅스 소스 관리에 쓰이는 도구인 BitKeeper의 약자이다. 리눅스 2.6부터는 매일 리눅스 코드의 스냅샷을 배포한다.
◆ bk tree : 리눅스의 여러가지 서브 시스템별로 관리되는 소스이다.
◆ mm patchset : 리누스 토발즈와 함께 OSDL에서 커널을 개발하는 앤드류 모튼의 커널 패치이다. 여러 가지 실험적인 기능이 많이 포함되어 있다.
◆ mc patchset : mm patchset와 마찬가지로 앤드류 모튼이 관리하는 커널 트리이다. mm source의 패치 중 곧 vanilla에 포함될 패치만 들어 있다.
◆ ac patchset : 레드햇의 커널 개발자인 앨런 콕스가 관리하는 커널 트리이다. 최근에는 관리가 되고 있지 않다.
◆ ck patchset : Con Kolivas가 관리하는 패치 셋이다. 데스크탑에서 효율적인 여러 패치들이 포함되어 있다.
◆ wolk patchset : Work OverLoad 커널 프로젝트에서 관리하고 있으며 서버와 데스크탑에 필요한 여러 가지 유용한 패치들을 모아놓은 패치 셋이다.


입맛에 맞게 커널 설정하기
이제 필자가 보통 사용하는 커널 설정을 통해 자신에게 맞게 커널 2.6으로 업그레이드해 보자.

Code maturity level options --->

[*] Prompt for development and/or incomplete code/drivers
[ ] Select only drivers expected to compile cleanly
[ ]Select only drivers that don’t need compile-time external firmware


코드 성숙도에 대한 옵션이다. 여기를 선택하지 않으면 아직 불안정하다고 판단되는 기능을 선택할 수 없다. 여기서 컴파일 중 경고(warning)가 나지 않는 옵션만 선택 또는 컴파일할 때 외부 펌웨어가 필요 없는 드라이버만 선택해서 컴파일할 수 있다.

General Setup --->
[*] Support for paging of anonymous memory
[*] System V IPC
[*] BSD Process Accounting
[*] Sysctl support
(14) Kernel log buffer size (16 => 64KB, 17 => 128KB)
[*] Kernel .config support
[*] Enable access to .config through /proc/config.gz
[ ] Remove kernel features (for embedded systems) --->


커널의 일반 기능에 대한 설정이다. 여기서 리눅스 커널의 전반적으로 크게 적용되는 몇 가지 설정이 적용될 수 있다. 커널 2.6에서는 아예 스왑 기능을 사용하지 않는 임베디드 기기나 충분한 RAM을 가진 기기를 위해 커널에서 완전히 제거할 수 있다. 또한 중요한 커널 기능 중 소형기기에 적합하지 않거나 필요 없는 기능을 빼기 위한 설정 또한 제공된다. 그리고 프로세스의 통신을 위한 SystemV 유닉스에서 지원하는 IPC 형식을 여기서 선택할 수 있다. 공유 메모리(Shared Memory)도 여기서 지원한다. 또한 acct 함수로 프로세스에 대한 여러 가지 정보를 파일에 저장할 수 있는 설정이 제공된다.

sysctl 옵션을 켬으로써 특정 커널의 파라미터와 변수들을 동적으로 변경시킬 수 있도록 한다. Powertweak라는 도구를 쓰면 쉽게 바꿀 수 있다. 그 외에 현재 커널의 설정을 /proc/config.gz에 저장해 두었다가 나중에 커널을 빌드 할 때 사용할 수 있도록 한다.

Loadable module support --->

[*] Enable loadable module support
[*]   Module unloading
[ ]     Forced module unloading
[ ]   Module versioning support (EXPERIMENTAL)
[*] Automatic Kernel module loader


커널 모듈에 대한 설정이다. 모듈이란 커널에 포함되지 않고 커널이 운영되고 있는 상태에 모듈 파일을 읽어들여 커널의 기능을 더하는 것이다. 일반적으로 윈도우의 드라이버와 같다고 생각하면 된다. 커널 모듈 기능은 하드웨어가 완전히 고정되어 있다면 빼도 상관없다. 하지만 보통 쓰이는 시스템은 일부 장치가 더해지거나 빠질 수 있기 때문에 모듈 기능을 켜두는 것을 권장한다. 또한 시스템이 켜져 있는 상태에서 모듈을 교체할 수 있도록 모듈 제거 기능도 켜두는 것이 좋다.

단 커널 2.6에서는 현재 쓰이는 모듈의 기능이 작동하고 있더라도 강제로 모듈을 커널에서 지울 수 있도록 하는 옵션이 제공되는데, 아직은 사용하기에 불안정한 면이 많으므로 정상적인 시스템에서는 되도록이면 쓰지 않아야 하는 기능이다. 그리고 Module versioning이라는 것으로 기능(function) 이름에 부가정보를 더하는 기능이 제공되는데 이 기능을 켜면 바이너리로만 배포되는 커널 모듈이 작동하지 않을 수 있다. 마지막으로 /proc/sys/kernel/modprobe에 등록된 프로그램을 이용해 커널이 알아서 모듈을 적재하는 기능인 자동 모듈 적재기능이 있다.

Executable file formats --->
<*> Kernel support for ELF binaries
<M> Kernel support for a.out ECOFF binaries
<M> Kernel support for MISC binaries


실행 파일 로더에 대한 옵션이다. 일반적인 유닉스 시스템에서 많이 사용되는 ELF는 꼭 커널에 포함하도록 하자. 그리고 예전의 유닉스에서 사용되던 a.out 형식 지원은 호환성을 위해 모듈로 남겨두었다. 거의 쓰이지 않으므로 커널에서 제거해도 상관없다.

그 외 여러 가지 형식의 실행 파일을 실행할 수 있는 MISC binaries 기능으로 자바 VM(java), DOSEMU(dos), Wine(wind ows), dotgnu, mono(ECMA CLI) 등과 같은 해당 실행 파일을 해석할 수 있는 인터프리터와 실행 파일의 헤더 혹은 확장자를 등록한 후 그 파일에 실행 퍼미션을 주고 실행하면 해당 인터프리터가 파일을 읽어들인 후 해석할 수 있도록 한다.

CPU와 각종 디바이스 설정
리눅스는 각각 여러 가지 하드웨어 기기에서 동작하는데 하드웨어 기기의 특성마다 다른 옵션을 선택할 수 있다. 여기서는 x86 CPU를 쓰는 하드웨어에 대한 설정을 할 수 있다. 커널 2.6에서는 같은 CPU를 사용하더라도 세부적인 하드웨어까지 지원하도록 변경되었다. 우리는 PC에서 쓸 것이기 때문에 PC 호환으로 선택하면 된다. 그리고 사용할 시스템의 CPU를 설정한다.

Processor type and features --->
Subarchitecture Type (PC-compatible) --->
Processor family (Pentium-III/Celeron(Coppermine)/Pentium-III Xeon)
[*] Generic x86 support
[ ] HPET Timer Support
[ ] Symmetric multi-processing support
[*] Preemptible Kernel
[*] Local APIC support on uniprocessors
[*]   IO-APIC support on uniprocessors
[ ] Machine Check Exception
< > Toshiba Laptop suppor
< > Dell laptop support
<M> /dev/cpu/microcode - Intel IA32 CPU microcode support
<M> /dev/cpu/*/msr - Model-specific register support
<M> /dev/cpu/*/cpuid - CPU information support
<M> BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)
High Memory Support (off) --->
[ ] Math emulation
[*] MTRR (Memory Type Range Register) support


리눅스에서는 여러 개의 CPU를 쓸 수 있도록 하는 SMP 기능이 포함되어 있다. 만약 자신의 시스템에 CPU가 하나 이상 설치되어 있다면 이 옵션을 켜두는 것이 좋다. 하이퍼쓰레딩을 지원하는 펜티엄 4가 있으면 마찬가지로 SMP를 사용하는 것이 좋다(특히 mm 커널에서는 SMP용 CPU 스케쥴러를 제공한다).

Preemptible Kernel은 선점형 스케쥴러를 사용하는 옵션이다. 애플리케이션의 빠른 반응 속도를 원하면 사용하도록 한다. 서버로 사용할 생각이면 꺼두는 것이 좋다. 그리고 CPU에서 현재 시스템에 이상이 생겼을 때 알려주는 기능인 MCE을 사용할 수 있게 되었다. 각각의 CPU마다 P6 이상의 CPU에서 지원하는 마이크로 코드를 업데이트할 수 있는 microcode, Model-specific register를 지원하는 장치 파일을 만들어주는 msr, 지정한 CPU에 CPUID 명령을 수행할 수 있는 장치 파일을 만드는 기능을 사용할 수 있다.

또한 대형 메모리 지원 옵션으로 현재 시스템의 램 크기가 1GB 이상이면 크기에 알맞은 시스템의 메모리를 모두 쓸 수 있다. 그 외에 수치연산 프로세서가 없는 CPU를 대신해 수치연산 프로세서가 동작하는 것처럼 흉내 내는 기능을 포함하고 있으며, P6 이상의 프로세서에 있는 MTRR 레지스터 지원을 사용함으로써 그래픽카드에서 많은 양의 데이터를 전송할 때 속도 향상이 있다고 한다.

Graphics support --->
[*] Support for frame buffer devices
< > CyberPro 2000/2010/5000 support (NEW)
[ ]   IMS Twin Turbo display support (NEW)
< > VGA 16-color graphics support (NEW)
[ ]   VESA VGA graphics support (NEW)
< >     Hercules mono graphics support (NEW)
< >     nVidia Riva support (NEW)
< >     Intel 810/815 support (EXPERIMENTAL) (NEW)
< >     Matrox acceleration
< >     ATI Radeon display support (NEW)
< >     ATI Rage128 display support (NEW)
< >     ATI Mach64 display support (NEW)
< >     SIS acceleration (NEW)
< >     NeoMagic display support (NEW)
< >     3Dfx Banshee/Voodoo3 display support (NEW)
< >     3Dfx Voodoo Graphics (sst1) support (NEW)
< >     Trident support (NEW)
< > Virtual Frame Buffer support (ONLY FOR TESTING!) (NEW)
        Console display driver support --->
        Logo configuration --->


컴퓨터의 그래픽카드에 대한 옵션이다. 리눅스 커널에서 직접 그래픽카드를 다뤄야 할 때 필요한 옵션을 여기서 선택할 수 있다. 이러한 기능을 프레임 버퍼라고 부르는데 프레임 버퍼는 이 기능으로 리눅스 커널에서 그래픽카드에 직접 이미지를 뿌릴 수 있다. 자신의 컴퓨터에 부착된 그래픽카드에 알맞는 옵션을 선택하면 된다.

그리고 콘솔 화면의 드라이버를 선택하는 옵션이 여기에 포함되었는데, VGA text console은 꼭 선택해주는 것이 좋다. 그렇지 않으면 모니터 화면에 아무 것도 나오지 않을 것이다. 프레임 버퍼 장치를 콘솔로 쓰려면 Framebuffer Console support를 선택하면 된다. 또한 프레임 버퍼 콘솔로 부팅할 때 쓰이는 부팅 로고를 색상별로 설정할 수 있다.

Sound --->
<M> Sound card support
    Advanced Linux Sound Architecture --->
    Open Sound System --->


커널 2.6에서는 두 가지 사운드 서브 시스템이 제공된다. 한 가지는 이전부터 쓰이던 OSS(Open Sound System)이고 다른 한 가지는 새로 작성된 ALSA(Advanced Linux Sound Architecture)이다.

OSS는 이전의 애플리케이션과 호환을 위해 남겨져 있지만 곧 커널에서 제거될 예정이다. ALSA에서는 더 다양한 사운드카드가 지원되며, 대부분 Full-Duplex가 지원된다. 또한 alsa-lib라는 사용자 라이브러리를 통해 사운드 입출력 멀티플렉싱, 다중 믹서 지원, 사용자 영역 미디 시퀀서 지원 등의 여러 가지 향상된 기능을 제공한다. 또한 OSS 호환 계층을 통해 기존의 애플리케이션을 수정하지 않고 그대로 사용할 수 있다.

리스트 1
USB support  --->
<M> Support for USB
[ ]  USB verbose debug messages
---  Miscellaneous USB options
[*]  USB device filesystem
[*]  Enforce USB bandwidth allocation (EXPERIMENTAL)
[*]  Dynamic USB minor allocation (EXPERIMENTAL)
---  USB Host Controller Drivers
<M>  EHCI HCD (USB 2.0) support
< >  OHCI HCD support
<M>  UHCI HCD (most Intel and VIA) support
---  USB Device Class drivers
<M>  USB Audio support
---  USB Bluetooth TTY can only be used with disabled Bluetooth subs│ │
<M>  USB MIDI support
<M>  USB Modem (CDC ACM) support
<M>  USB Printer support
<M>  USB Mass Storage support
[ ]    USB Mass Storage verbose debug
[*]    Datafab Compact Flash Reader support (EXPERIMENTAL)
[*]    Freecom USB/ATAPI Bridge support
[*]    ISD-200 USB/ATA Bridge support
[*]    Microtech CompactFlash/SmartMedia support
[*]    HP CD-Writer 82xx support (EXPERIMENTAL)
[*]    SanDisk SDDR-09 (and other SmartMedia) support (EXPERIMENTAL)│ │
[*]    SanDisk SDDR-55 SmartMedia support (EXPERIMENTAL)
[*]    Lexar Jumpshot Compact Flash Reader (EXPERIMENTAL)
---  USB Human Interface Devices (HID)
<M>  USB Human Interface Device (full HID) support
[*] HID input layer support
[*]  Force feedback support (EXPERIMENTAL)
[*]    PID Devices (Microsoft Sidewinder Force Feedback 2)
[*]    Logitech WingMan *3D support
[*] /dev/hiddev raw HID device support
   USB HID Boot Protocol drivers  --->

리눅스에서 USB 장치를 쓸 수 있도록 하는 옵션이다. 리눅스 2.6에서는 480Mbps의 대역폭을 제공하는 USB 2.0 호스트 컨트롤러의 사용이 가능하며, 2.4와 마찬가지로 USB 1.0용 호스트 컨트롤러인 UHCI, OHCI 드라이버가 제공된다. 그리고 USB 장치의 종류(프로토콜)에 따라 모뎀(ACM), 프린터(usblp), 저장장치(usb-storage), 입력 장치(hid), 시리얼(usbtty) 등의 여러 가지 커널 드라이버가 제공된다.

리스트 2
Input device
--- Userland interfaces
--- Mouse interface
(1024) Horizontal screen resolution
(768) Vertical screen resolution
<M> Joystick interface
<M> Touchscreen interface
(240) Horizontal screen resolution
(320) Vertical screen resolution
<M> Event interface
< > Event debugging
--- Input I/O drivers
<M> Gameport support
<M> Classic ISA and PnP gameport support
< > PDPI Lightning 4 gamecard support
<M> SB Live and Audigy gameport support
< > Aureal Vortex, Vortex 2 gameport support
< > ForteMedia FM801 gameport support
< > Crystal SoundFusion gameport support
--- Serial i/o support
<*> i8042 PC Keyboard controller
<M> Serial port line discipline
< > ct82c710 Aux port controller
< > Parallel port keyboard adapter
<M> PCI PS/2 keyboard and PS/2 mouse controller
--- Input Device Drivers
--- Keyboards
< >  Sun Type 4 and Type 5 keyboard support
< >  XT Keyboard support
< >  Newton keyboard
[*] Mice
<M>  PS/2 mouse
[ ]   Synaptics TouchPad
<M>  Serial mouse
[*] Joysticks
<M>  Gameport data dumper
[*] Touchscreens
<M>  Gunze AHL-51S touchscreen
[*] Misc
<M>  PC Speaker support
<M>  User level driver support

커널 2.6의 Input Subsystem은 완전히 새로 작성됐다. 키보드 드라이버는 더 이상 콘솔 드라이버에 포함되지 않으며 완전히 분리되었다. 현재 시스템에 등록된 입력 장치에 대한 정보를 보려면 /proc/bus/input에 있는 파일들을 참조하면 된다.

리눅스의 마우스 인터페이스에서 모든 마우스는 기본적으로 /dev/input/mice라는 장치로 접근이 가능하게 되고 각각의 마우스는 /dev/input/mouseX라는 장치로 접근이 가능하게 되었다. 하지만 이전의 리눅스 커널과의 호환성을 위해 /dev/psaux 장치를 만들도록 하는 옵션도 포함되었다.

리눅스의 조이스틱 인터페이스에 대한 옵션도 여기에서 설정할 수 있다. 조이스틱 장치를 쓰려면 이 옵션과 함께 조이스틱 포트 옵션과 조이스틱 옵션을 켜줘야 한다. 조이스틱은 /dev/input/jsX라는 장치로 접근이 가능하다.

리스트 3
Character devices --->
[*] Virtual terminal
[*]  Support for console on virtual terminal
[ ] Non-standard serial port support
   Serial drivers --->
[*] Unix98 PTY support
(256) Maximum number of Unix98 PTYs in use (0-2048)
<M> Parallel printer support
[ ]  Support for console on line printer
<M> Support for user-space parallel port device drivers
< > Texas Instruments parallel link cable support
   I2C support --->
   Mice --->
< > QIC-02 tape support
   IPMI --->
   Watchdog Cards --->
<M> Intel/AMD/VIA HW Random Number Generator support
<M> /dev/nvram support
<*> Enhanced Real Time Clock Support
< > Double Talk PC internal speech card support
< > Siemens R3964 line discipline
< > Applicom intelligent fieldbus card support
< > Sony Vaio Programmable I/O Control Device support (EXPERIMENTAL)
   Ftape, the floppy tape device driver --->
<M> /dev/agpgart (AGP Support)
< >  ALI chipset support
< >  ATI chipset support
< >  AMD Irongate, 761, and 762 chipset support
< >  AMD Opteron/Athlon64 on-CPU GART support
<M>  Intel 440LX/BX/GX, I8xx and E7x05 chipset support
< >  NVIDIA nForce/nForce2 chipset support
< >  SiS chipset support
< >  Serverworks LE/HE chipset support
< >  VIA chipset support
[*] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
< >  3dfx Banshee/Voodoo3+
< >  3dlabs GMX 2000
< >  ATI Rage 128
< >  ATI Radeon
< >  Intel I810
< >  Intel 830M, 845G, 852GM, 855GM, 865G
<M>  Matrox g200/g400
< >  SiS video cards
< > ACP Modem (Mwave) support
<M> RAW driver (/dev/raw/rawN)
(256) Maximum number of RAW devices to support (1-8192)
<M> Hangcheck timer

리눅스에서 여러 문자 장치를 쓸 수 있도록 하는 옵션이다. 가상 터미널은 리눅스 콘솔에서 쓰이는 유용한 기능으로 하나의 콘솔을 여러 개의 터미널처럼 쓸 수 있도록 한다. 그리고 여러 가지 직렬 포트 장비와 병렬 포트 장비를 지원하며, 그래픽카드를 사용할 수 없는 환경에서도 쓸 수 있도록 직렬 및 병렬 포트로 콘솔 입출력을 지원하도록 하는 옵션이 포함되어 있다. 원격 터미널이나 xterm 같은 기기에서 사용되는 PTY 출력 장치의 최대 개수를 정할 수 있다. I2C는 필립스에서 개발한 마이크로 컨트롤러용 저속 직력 버스 프로토콜인데 컴퓨터에 있는 온도 센서, 혹은 비디오 캡처 장치(TV 카드) 등을 사용하려면 이 옵션을 켜야 한다.

리눅스 핫플러그  
시스템이 켜져 있는 상태에서 주변기기를 붙였다 떼었다 할 수 있는 기능을 핫플러그(Hotplug)라고 한다. 이것은 핫플러그를 지원하는 하드웨어와 OS를 필요로 한다. 최근의 많은 주변기기들이 핫플러그를 지원하고 있으며, 최신 OS들도 마찬가지로 핫플러그를 지원한다. 당연히 리눅스에서는 커널 2.4부터 제한적이기는 하지만 핫플러그를 지원하고 있다. 여기서는 리눅스에서 핫플러그가 어떻게 동작하는지 간단하게 살펴보겠다.

핫플러그를 사용하려면 리눅스 커널 2.4 이상에서 커널 설정의 General setup -> Support for hot-pluggable devices 옵션이 켜져 있어야 한다. 그리고 대부분의 리눅스 배포판에는 설치되어 있지만 만약 그렇지 않다면 리눅스 핫플러그 프로젝트에서 다운받아 설치한다. 기본적으로 리눅스 핫플러그는 장치가 연결되면 해당 장치의 호스트 모듈에서 /proc/sys/kernel/hotplug에 등록된 실행파일을 실행하도록 되어 있다. 해당 장치에 대한 정보는 환경변수에 기록된다.

대표적인 리눅스 핫 플러그 활용 예가 gphoto2이다. gphoto2는 여러 유닉스 시스템에서 쓸 수 있는 디지털카메라 관리 프로그램이다. 그런데 gphoto2를 설치하면 /etc/hotplug/usb/usbcam 스크립트가 같이 설치되는데 이것은 gphoto2에서 지원하는 카메라가 연결되었을 때 현재 콘솔을 쓰는 사용자에게 디지털카메라에 접근할 수 있는 허가권을 줘 데스크탑 사용자에게 디지털카메라를 조작할 수 있도록 하는 역할을 한다.

커널 2.6에서는 최근에 나오는 메인보드의 하드웨어 난수 발생기를 지원하는 옵션이 포함되어 있으며, AGP 장치 드라이버는 커널 2.6에서는 각 벤더별로 모듈이 분리되어 있다. 또한 AGP 3.0 지원이 포함되어 있다. 그리고 그래픽카드의 3D 가속 기능을 쓸 수 있도록 하는 커널 측의 DRM 드라이버가 포함되어 있는데 XFree86의 dri를 쓰려면 이 옵션을 켜야 한다.

Multimedia devices --->
<M> Video For Linux
    Video For Linux --->
    Radio Adapters --->
  Digital Video Broadcasting Devices --->


리눅스에서 각종 방송장비로부터 데이터를 가져올 수 있는 기능을 선택할 수 있다. 현재 리눅스 2.6에서는 일반 TV 및 라디오 장비로부터 오디오, 비디오 데이터를 캡처하는 Video4Linux, 그리고 디지털 TV 장비에서 오디오, 비디오 데이터를 캡처하는 DVB(Digital Video Broadcasting)가 지원된다. 시스템에 TV카드가 부착되어 있다면 이 기능을 켜두면 된다.

Bus options (PCI, PCMCIA, EISA, MCA, ISA) --->
[*] PCI support
PCI access mode (Any) --->
[*]    Legacy /proc/pci interface
[*]    PCI device name database
[ ] ISA support
[ ] MCA support
< > NatSemi SCx200 support
[*] Support for hot-pluggable devices
PCMCIA/CardBus support --->
PCI Hotplug Support --->


시스템에서 쓰이는 각종 버스 지원 설정이다. 최근 주변장치들의 대부분은 PCI 형식이므로 PCI 지원은 꼭 넣어야 할 것이다. 그 외에 ISA, MCA 등은 쓰이지 않으므로 빼두어도 상관없다.

리눅스 2.6에서는 sysfs로 시스템에 장착된 하드웨어의 정보에 접근할 수 있으므로 /proc에서 제공되던 여러 가지 정보 파일을 제거할 수 있다. /proc/pci 파일 또한 여기에 해당된다. /proc/pci 파일은 현재 시스템에 장착된 PCI 장치들을 살펴볼 수 있다. 커널 2.6에서는 sysfs 덕분에 필요성이 줄어들었지만 기존의 프로그램 중에서 사용될 수 있으므로 옵션에 넣는 것이 좋을 것이다.

또한 /proc/pci, /proc/ioports 등에서 나오는 PCI 기기 정보를 단순히 pciid 숫자로만이 아니라 실제 장치 이름으로 보여주는 기능 또한 사용하기에 편하기 때문에 넣어주는 것이 좋다. 그리고 리눅스 2.4부터 지원되던 리눅스 핫플러그 기능 또한 여전히 지원된다. /proc/ sys/kernel/hotplug에 프로그램을 등록해서 시스템이 구동되는 도중에 주변장치를 붙이고 뗄 수 있도록 한다. 등록되는 프로그램은 핫플러그 에이전트(hotplug agent)라고 부르며 현재 http://linux-hotplug.sourceforge.net에서 받을 수 있다. 커널 2.6에서는 hotplug와 udev를 쓸 수 있다. 그 외 노트북에서 사용되는 PCMCIA/ CardBus 장치, 그리고 대형 장비에서 쓰이는 핫플러그?되는 PCI 장치를 위한 옵션이 제공된다.

Device Drivers --->


각종 주변장치 드라이버를 선택할 수 있다.

Generic Driver Options --->
<M> Hotplug firmware loading support


모듈이 커널에 포함되지 않은 핫플러그 펌웨어를 읽을 수 있도록 한다. sysfs를 통해서 일관적인 인터페이스로 펌웨어를 올릴 수 있다.

Memory Technology Devices (MTD) --->
< > Memory Technology Device (MTD) support


소형 기기에서 쓰이는 여러 가지 저장장치를 지원한다. 일반 PC에서는 연결되지 않는 장치이므로 꺼두는 것이 좋다.

Parallel port support --->
<M> Parallel port support
<M>   PC-style hardware
< >     Multi-IO cards (parallel and serial)
[*]     Use FIFO/DMA if available (EXPERIMENTAL)
[ ]     SuperIO chipset support (EXPERIMENTAL)
[*] Support foreign hardware
[*] IEEE 1284 transfer modes


병렬 포트를 지원한다. 만약 프린터를 쓰거나 플레이스테이션용 조이스틱, 구형 Zip 드라이브, 그리고 plip을 이용해서 네트워크를 구성하려 하면 해당 옵션을 켜 두는 것이 좋다.

Plug and Play support --->
[*] Plug and Play support
[ ]    PnP Debug Messages --- Protocols
[ ]    ISA Plug and Play support (EXPERIMENTAL)
[*]    Plug and Play BIOS support (EXPERIMENTAL)


시스템에 부착되면 자동으로 시스템의 리소스를 할당하는 PnP(Plug and Play) 장치를 지원하는 옵션이다.

Block devices --->
< > Parallel port IDE device support
< > Compaq SMART2 support
< > Compaq Smart Array 5xxx support
< > Mylex DAC960/DAC1100 PCI RAID Controller support
< > Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)
<M> Loopback device support
<M>     Cryptoloop Support
<M> Network block device support
<*> RAM disk support
(4096) Default RAM disk size
[*] Initial RAM disk (initrd) support
[*] Support for Large Block Devices


리눅스에서 쓰이는 각종 블럭 장치에 대한 옵션이다. loop 장치는 보통 파일을 블럭 장치처럼 쓰려고 할 때 필요하다. losetup이나 mount의 loop 옵션을 사용해서 쓸 수 있다. 커널 2.6에서는 loop 장치를 암호화시킬 수 있는 기능도 제공된다. 그리고 RAM을 블럭 장치처럼 쓰려고 할 때 필요한 RAM 디스크 지원도 제공된다.

특히 initrd는 부트로더에서 로딩할 수 있는 RAM 디스크 이미지(주로 root 파일 시스템을 마운트하기 위해)를 쓰기 위한 옵션이다(모듈 소스를 제공하지 않는 블럭 디바이스를 쓰는 경우 같은). 부득이한 이유로 모듈을 써야 한다면 이 기능을 사용하는 것이 좋다.

ATA/ATAPI/MFM/RLL support --->
<*> ATA/ATAPI/MFM/RLL support
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
---  Please see Documentation/ide.txt for help/info on IDE drives
[ ]  Use old disk-only driver on primary interface
<*>  Include IDE/ATA-2 DISK support
[*]   Use multi-mode by default
[*]   Auto-Geometry Resizing support
<M>  Include IDE/ATAPI CDROM support
< >  Include IDE/ATAPI TAPE support (EXPERIMENTAL)
< >  Include IDE/ATAPI FLOPPY support
<M>  SCSI emulation support
[*]  IDE Taskfile Access
[*]  IDE Taskfile IO (EXPERIMENTAL)
---  IDE chipset support/bugfixes
[*]  PNP EIDE support
[*]  PCI IDE chipset support
[*]   Sharing PCI IDE interrupts support
[ ]   Boot off-board chipsets first support
[*]   Generic PCI IDE Chipset Support
[*]   Generic PCI bus-master DMA support
[ ]    ATA tagged command queueing (EXPERIMENTAL)
[ ]     Force enable legacy 2.0.X HOSTS to use DMA
[*]    Use PCI DMA by default when available
[ ]      Enable DMA only for disks


ATA/ATAPI(AT Attachment/Packet Interface, 흔히 IDE라는 단어와 혼용된다) 장치와 구식의 MFM/RLL 장치를 위한 옵션이다. 현재 PC에 부착된 대부분의 디스크 장치가 ATA/ATAPI 형식의 장치이므로 커널에 꼭 포함시키자.

udev  
커널 2.4에서 쓰이던 devfs가 여러 가지 이유로 퇴출(?)당하고 그 대신 커널 영역이 아니라 사용자 영역에서 자동으로 장치 파일을 관리하는 도구가 커널 2.6에서 소개되고 있는데 그것이 바로 udev이다. udev는 devfs보다 더 유연하고 확장성 있는 장치 파일 관리가 가능한데, 이것은 바로 리눅스 2.6의 핫플러그와 sysfs 덕분이다.

udev에서는 핫플러그 이벤트가 발생하면 hotplug에서 전달되는 sysfs의 엔트리를 검색해서 udev.rules에 해당하는 장치 이름을 만들도록 한다. 즉 하드디스크의 예를 들어보자면 이전에는 먼저 연결된 이동식 하드디스크 장치부터 /dev/sda, /dev/sdb 순서로 배정되던 것을 하드디스크의 제조회사, 모델, 디스크의 크기, 파티션 구조 등을 이용해서 사용자가 원하는 장치 이름을 배정할 수 있게 된다. 이외에도 이전의 커널 메일링 리스트에서는 audio cd가 들어왔을 때 장치 이름을 artist - album 형식의 이름을 부여했다는 에피소드가 소개된 적도 있었다.

장치의 형식에 따라 ide-floppy, ide-disk, ide-cd, ide-tape 등의 여러 가지 커널 모듈이 지원되며, IDE 칩셋에 따라 각각 지원되는 모듈 모두 제공된다. 또한 IDE 장치를 리눅스 SCSI 장치로 흉내 내도록 하는 SCSI 에뮬레이션 기능을 제공하고 있으며 혹시 리눅스에서 CD/DVD 미디어를 작성하려고 한다면 이 기능을 켜두도록 하는 것이 좋다. 또한 EDE 장치에 대해 인터럽트를 공유, 시스템 외부에 연결된 IDE 장비로 부팅, DMA 기능 사용 등의 설정이 제공된다.

그리고 일부 장비의 오동작에 대한 대비로 CD-ROM에서 DMA를 활성화하면 데이터 전송에 실패할 때를 대비해 디스크 장치만 DMA를 켜두도록 하는 옵션도 제공된다.

SCSI device support --->
<M> SCSI device support
[*]   legacy /proc/scsi/ support
---   SCSI support type (disk, tape, CD-ROM)
<M>   SCSI disk support
< >   SCSI tape support
< >   SCSI OnStream SC-x0 tape support
<M>   SCSI CDROM support
[*]    Enable vendor-specific extensions (for SCSI CDROM)
<M>   SCSI generic support
---   Some SCSI devices (e.g. CD jukebox) support multiple LUNs
[*]   Probe all LUNs on each SCSI device
[*]   Build with SCSI REPORT LUNS support
[*]   Verbose SCSI error reporting (kernel size +=12K)
[ ]   SCSI logging facility


여러 SCSI 장치를 지원할 때 쓴다. 자신이 실제 SCSI 장치를 가지고 있지 않더라도 SATA 장치, USB 스토리지, IEEE1394 디스크(SBP2), 그리고 IDE 형식의 CD/DVD 레코더를 사용한다면 scsi의 disk, cdrom 등의 모듈을 켜야 한다.

IEEE 1394 (FireWire) support (EXPERIMENTAL) --->
<M> IEEE 1394 (FireWire) support (EXPERIMENTAL)
---   Subsystem Options
[ ]   Excessive debugging output
[*]   OUI Database built-in
---   Device Drivers
< >   Texas Instruments PCILynx support
<M>   OHCI-1394 support
---   Protocol Drivers
<M>   OHCI-1394 Video support
<M>   SBP-2 support (Harddisks etc.)
[ ]    Enable Phys DMA support for SBP2 (Debug)
<M>   Ethernet over 1394
<M>   OHCI-DV I/O support
<M>   Raw IEEE1394 I/O support
<M>   IEC61883-1 Plug support
<M>    IEC61883-6 (Audio transmission) support


고속 전송을 지원하는 IEEE1394(iLink 혹은 파이어와이어라고 불리기도 한다)를 지원하는 옵션이다. IEEE1394 호스트 드라이버 및 IEEE1394 포트에 부착되는 기기의 종류에 따라서 여러 가지 모듈이 지원된다.

먼저 호스트 드라이버는 대부분 OHCI 호환이므로 만약에 시스템에 IEEE1394 장비를 연결하려 하면 꼭 커널에 포함시키도록 한다. 그리고 IEEE1394 장비(프로토콜)의 종류에 따라 비디오 장비를 위한 video1394, 저장장치를 위한 SBP2, 이더넷처럼 사용하도록 하는 eth1394, 디지털 비디오 스트림을 교환할 수 있는 dv1394, 그리고 장비와는 상관없이 입출력되는 데이터를 그대로 처리하도록 하는 raw1394 등을 지원한다.

네트워크 관련 설정
리눅스에서 제공하는 물리적인 네트워크 장치에 대한 여러 가지 드라이버를 제공한다. 일반적으로는 이더넷으로 연결이 가능하지만 환경에 따라 PPP, SLIP, 와이어리스, 토큰 링, WAN, ATM 등의 여러 장치를 사용할 수 있도록 한다. 특히 커널 2.6에서는 블루투스 장비도 지원된다.

리스트 4
Networking support --->
[*] Networking support
    Networking options --->
[*]  Network device support
      ARCnet devices --->
<M>   Dummy net driver support
< >   Bonding driver support
< >   EQL (serial line load balancing) support
< >   Universal TUN/TAP device driver support
< >   Ethertap network tap
< >   General Instruments Surfboard 1000
      Ethernet (10 or 100Mbit) --->
      Ethernet (1000 Mbit) --->
      Ethernet (10000 Mbit) --->
[ ]   FDDI driver support
[ ]   HIPPI driver support (EXPERIMENTAL)
< >   PLIP (parallel port) support
<M>   PPP (point-to-point protocol) support
[ ]     PPP multilink support (EXPERIMENTAL)
[ ]     PPP filtering
<M>     PPP support for async serial ports
<M>     PPP support for sync tty ports
<M>     PPP Deflate compression
<M>     PPP BSD-Compress compression
<M>     PPP over Ethernet (EXPERIMENTAL)
<M>     PPP over ATM
< >   SLIP (serial line) support
      Wireless LAN (non-hamradio) --->
      Token Ring devices --->
[ ]   Fibre Channel driver support
< >   Red Creek Hardware VPN (EXPERIMENTAL)
<M>   Traffic Shaper (EXPERIMENTAL)
      Wan interfaces --->
      ATM drivers --->
   Amateur Radio support --->
   IrDA (infrared) support --->
   Bluetooth support --->

리스트 5
Networking options --->
<*> Packet socket
[*]  Packet socket: mmapped IO
<M> Netlink device emulation
<*> Unix domain sockets
<M> PF_KEY sockets [*]
TCP/IP networking
[*]  IP: multicasting
[ ]  IP: advanced router
[ ]  IP: kernel level autoconfiguration
< >  IP: tunneling
< >  IP: GRE tunnels over IP
[ ] IP: multicast routing
[ ] IP: ARP daemon support (EXPERIMENTAL)
[*] IP: TCP Explicit Congestion Notification support
[*] IP: TCP syncookie support (disabled per default)
<M> IP: AH transformation
<M> IP: ESP transformation
<M> IP: IPComp transformation
    IP: Virtual Server Configuration --->
<M> The IPv6 protocol (EXPERIMENTAL)
[*]  IPv6: Privacy Extensions (RFC 3041) support
<M>  IPv6: AH transformation
<M>  IPv6: ESP transformation
<M>  IPv6: IPComp transformation
<M>  IPv6: IPv6-in-IPv6 tunnel
< > DECnet Support
<M> 802.1d Ethernet Bridging
[*] Network packet filtering (replaces ipchains) --->
<M> IPsec user configuration interface
    SCTP Configuration (EXPERIMENTAL) --->
<M> Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)
<M>  Classical IP over ATM (EXPERIMENTAL)
[ ]     Do NOT send ICMP if no neighbour (EXPERIMENTAL)
<M>  LAN Emulation (LANE) support (EXPERIMENTAL)
<M>     Multi-Protocol Over ATM (MPOA) support (EXPERIMENTAL)
< >  RFC1483/2684 Bridged protocols
<M> 802.1Q VLAN Support
< > ANSI/IEEE 802.2 LLC type 2 Support
<M> The IPX protocol
[*]  IPX: Full internal IPX network
< > Appletalk protocol support
< > CCITT X.25 Packet Layer (EXPERIMENTAL)
< > LAPB Data Link Driver (EXPERIMENTAL)
[ ] Frame Diverter (EXPERIMENTAL)
< > Acorn Econet/AUN protocols (EXPERIMENTAL)
< > WAN router
[ ] Fast switching (read help!)
[ ] Forwarding between high speed interfaces
    QoS and/or fair queueing --->
    Network testing --->

네트워크의 여러 가지 논리적 계층을 지원하는 옵션이다. 특히 기존의 IP 계층에서 보안 기능을 제공하는 IPSec, 그리고 네트워크 부하를 배분시키는 IPVS 기능이 리눅스 2.6에 새로 추가되었다.

ISDN subsystem --->
[ ] ISDN support


ISDN 장비에 대한 옵션이다. 국내에는 거의 쓰이지 않지만 만약 ISDN 가입자라면 해당 옵션을 켜서 사용할 수 있다.

Telephony Support --->
< > Linux telephony support


만약 VoIP 장비를 쓰고 있다면 이 옵션을 켜서 해당 장비를 사용할 수 있다.

sysfs  
커널 2.6에서는 새로운 가상 파일 시스템 몇 가지가 더해졌는데, 그중 sysfs는 하드웨어의 정보를 일반화시켜서 볼 수 있게 해준다. 이전 커널에서는 커널의 각 서브 시스템별로 각자 /proc 디렉토리 밑에서 일관되지 않게 각자의 정보를 보여줬지만 sysfs에서는 단일하고 일반적인 방식으로 각각의 하드웨어에 대한 정보를 얻어낼 수 있다. 또한 하나의 하드웨어에 대해서 물리적인 구조 및 논리적인 구조로 찾아볼 수 있는 방법을 제공한다.

전원 관리 관련 설정

Power management options (ACPI, APM) --->
[*] Power Management support
[*]   Software Suspend (EXPERIMENTAL)
[*]   Suspend-to-Disk Support
()     Default resume partition
ACPI (Advanced Configuration and Power Interface) Support --->
APM (Advanced Power Management) BIOS Support --->
CPU Frequency scaling --->


리눅스의 전원 관리 옵션을 선택할 수 있다. 현재 리눅스에서는 APM과 ACPI라는 두 가지 방식 중 하나를 전원 관리 기능으로 쓸 수 있다. 그리고 윈도우의 하이버네이션 기능과 동일하게 시스템의 메모리를 하드디스크에 저장시켰다가 다음 부팅 때 읽어들여 이전 상태로 되돌리는 기능을 제공한다.

ACPI (Advanced Configuration and Power Interface) Support --->


ACPI는 전원 관리와 하드웨어 설정을 OS와 유기적으로 하기 위한 표준이다. acpi 기능을 쓰고 싶다면 이 옵션을 켜고 acpi daemon을 쓰도록 하자.

APM (Advanced Power Management) BIOS Support --->


APM은 BIOS에서 전원 관리를 하기 위한 표준이다. apm 기능을 쓰고 싶다면 이 옵션을 켜고 apmd를 설치하는 것이 좋다. ACPI와 APM은 동시에 사용할 수 없다. 만약 두 기능을 동시에 켜놨다면 ACPI가 동작할 것이다.

CPU Frequency scaling --->
[*] CPU Frequency scaling
<M> /proc/cpufreq interface (deprecated)
Default CPUFreq governor (performance) --->
--- ‘performance’ governor
<M> ‘powersave’ governor
<M> ‘userspace’ governor for userspace frequency scaling
[*] /proc/sys/cpu/ interface (2.4. / OLD)
<M> CPU frequency table helpers
--- CPUFreq processor drivers
<M> ACPI Processor P-States driver
[*] /proc/acpi/processor/../performance interface (deprecated)
< > AMD Mobile K6-2/K6-3 PowerNow!
< > AMD Mobile Athlon/Duron PowerNow!
< > AMD Opteron/Athlon64 PowerNow!
< > Cyrix MediaGX/NatSemi Geode Suspend Modulation
< > Intel Enhanced SpeedStep
< > Intel Speedstep on ICH-M chipsets (ioport interface)
< > Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
< > Intel Pentium 4 clock modulation
< > Transmeta LongRun
< > VIA Cyrix III Longhaul


CPU Frequency scaling은 각종 모바일 및 임베디드 CPU의 소비전력을 절약하기 위한 기능을 쓸 수 있게 해준다. 자신이 가지고 있는 컴퓨터가 노트북과 같이 모바일 CPU를 사용하고 있다면 해당 기능을 켜둔다. 커널 2.4에서는 cpufreqd라는 별도의 데몬으로 cpu clock을 관리했지만 커널 2.6에서는 sysfs에 직접 값을 쓰는 것으로 관리된다.

파일 시스템 관련 설정
리눅스에서 일반적으로 많이 쓰이는 파일 시스템에 대한 설정을 할 수 있다. 특히 커널 2.6에서는 각각의 파일에 여러 가지 속성을 기록할 수 있게 하는 attr 옵션이 포함되어 있는데, 레드햇 리눅스 8에서 잠시 소개된 기능이다. attr 패키지에 포함된 lsattr, getfattr, setfattr 명령으로 각 파일에 대해 설정할 수 있다.

리스트 6
File systems  --->
<*> Second extended fs support
[*]   Ext2 extended attributes
[*]      Ext2 POSIX Access Control Lists
[*]      Ext2 Security Labels
<M> Ext3 journalling file system support
[*]   Ext3 extended attributes
[*]      Ext3 POSIX Access Control Lists
[*]      Ext3 Security Labels
[ ] JBD (ext3) debugging support
<*> Reiserfs support
[ ]   Enable reiserfs debug mode
[*]   Stats in /proc/fs/reiserfs
<M> JFS filesystem support
[*]   JFS POSIX Access Control Lists
[ ]   JFS debugging
[*]   JFS statistics
<M> XFS filesystem support
[ ]   Realtime support (EXPERIMENTAL)
[*]   Quota support
[*]   ACL support
< > Minix fs support
< > ROM file system support
[*] Quota support
<M>   Old quota format support
<M>   Quota format v2 support
< > Kernel automounter support
< > Kernel automounter version 4 support (also supports v3)
    CD-ROM/DVD Filesystems  --->
    DOS/FAT/NT Filesystems  --->
    Pseudo filesystems  --->
    Miscellaneous filesystems  --->
    Network File Systems  --->

그리고 attr을 확장시켜서 각 파일 시스템에서 파일에 사용자별, 그룹별로 권한을 기록할 수 있게 하는 acl 옵션 또한 포함되었다. acl 패키지에 포함된 chacl, getfacl, setfacl 명령으로 각 파일에 대해 설정할 수 있다. 그리고 파일 시스템에서 SELinux 같은 확장 보안 모델을 쓸 때 사용할 수 있는 security label 기능도 포함되어 있다. 또한 사용자별 디스크 사용량을 제한할 수 있도록 하는 기능인 Quota에서 플러그인 형식으로 커널 2.4 이전의 Quota 형식과 32비트 UID/GID를 지원하는 Quota 형식을 지원할 수 있게 되었다. 이것은 Ext2/Ext3/ ReiserFS에서만 적용된다. XFS에서 Quota 기능이 별도로 구현되어 있으므로 따로 Quota 설정을 켜줘야 한다.

CD-ROM/DVD Filesystems --->
<M> ISO 9660 CDROM file system support
[*] Microsoft Joliet CDROM extensions
[*] Transparent decompression extension
<M> UDF file system support


CD-ROM/DVD에서 쓰이는 파일 시스템들을 포함하는 옵션이다. iso9660 파일 시스템 지원은 CD/DVD 미디어에서 많이 쓰이는 파일 시스템이다. 여기에 MS가 만든 긴 파일 이름과 유니코드를 지원하는 iso9660의 확장인 Joliet, 그리고 리눅스에서만 쓸 수 있는 압축 isofs 지원 기능을 포함시킬 수 있다. 이러한 파일 시스템을 만들려면 zisofs를 이용하면 된다. 그리고 DVD 미디어에서 쓰이는 UDF 파일 시스템 지원 옵션이 포함될 수 있다.

DOS/FAT/NT Filesystems --->
<M> DOS FAT fs support
<M> MSDOS fs support
<M> VFAT (Windows-95) fs support
<M> NTFS file system support
[ ] NTFS debugging support
[*] NTFS write support


윈도우 계열 운영체제에서 사용되는 여러 가지 파일 시스템을 리눅스에서 쓸 수 있도록 하는 옵션이 제공된다. 이전 8.3 형식의 파일 이름을 지원하는 FAT 지원, 긴 이름 파일이 지원되는 VFAT 또는 FAT32 파일 시스템을 지원하는 옵션, 그리고 윈도우 2000 이상에서 지원되는 NTFS 지원이 포함되어 있다. 특히 커널 2.6에서는 NTFS-NG가 포함되었다. 여기서는 이전 NTFS에서 지원하지 못하던 몇몇 속성을 사용할 수 있다.

Pseudo filesystems --->
[*] /proc file system support
[ ] /dev file system support (OBSOLETE)
[*] /dev/pts file system for Unix98 PTYs
[*]   /dev/pts Extended Attributes
[*]      /dev/pts Security Labels
[*] Virtual memory file system support (former shm fs)
[*] HugeTLB file system support


리눅스에서 쓰이는 여러 가상 파일 시스템을 쓸 수 있는 옵션이다. proc 가상 파일 시스템은 특히 각종 시스템 도구에서 쓰이기 때문에 꼭 커널에 포함시켜야 한다. 그리고 리눅스 2.4에서 소개되었던 디바이스를 자동으로 관리해주는 devfs는 커널 2.4와는 달리 /dev/pts를 지원하지 않는다. 최근에는 코드가 관리되지 않고 그 외 여러 이유 때문에 곧 udev로 교체될 예정이다. 그리고 가상 터미널 장치를 자동으로 관리해 주는 pts 파일 시스템은 커널에 포함하도록 하자.

프로젝트 유토피아  
리눅스 데스크탑의 선두기업인 지미안에서 커널 해커로 일하고 있는 로버트 러브가 진행하고 있는 프로젝트이다. 그는 리눅스 커널의 VM과 스케쥴러를 해킹해오고 있으며 커널 2.6에 추가된 preemptive 스케쥴러는 그가 몬타비스타에 재직 중일 때 만들어서 포함된 것이다.

프로젝트 유토피아의 목적은 리눅스 데스크탑 환경에서 연결/제거 가능한 장치를 자동으로 구성하도록 하는 데 있으며 이것은 앞에서 설명한 리눅스 2.6, 리눅스 핫플러그, udev, 그리고 freedesktop.org의 dbus와 hal, 마지막으로 GNOME 데스크탑이 함께 자연스럽고 유기적으로 동작하도록 하는 것이다. 여기서 dbus와 hal은 최근 freedesktop.org에서 개발하고 있는 프로젝트로 dbus는 데스크탑 프로그램들 사이의 데이터를 주고받을 수 있도록 하는 IPC 시스템이고 HAL은 유닉스 OS들의 하드웨어 관리를 추상화시켜서 어떠한 OS에서도 단일한 방식으로 하드웨어의 정보를 알 수 있도록 하는 것이다. 현재 프로젝트 유토피아는 CD-ROM에 대한 동작만 되고 있지만, 곧 다른 OS와 같이 완벽하게 이동 가능한(removable) 장치에 대응한 데스크탑 환경이 구축되리라 생각된다.

그외 동적으로 영역을 할당해주는 램 파일 시스템인 가상 메모리 파일 시스템은 /dev/shm 또는 /tmp에 주로 마운트하여 많이 사용된다. 그 외에도 유용하게 쓰이는 곳이 많으므로 커널에 포함시키는 것이 좋다.

Miscellaneous filesystems --->
< > ADFS file system support (EXPERIMENTAL)
< > Amiga FFS file system support (EXPERIMENTAL)
< > Apple Macintosh file system support (EXPERIMENTAL)
< > BeOS file systemv(BeFS) support (read only) (EXPERIMENTAL)
< > BFS file system support (EXPERIMENTAL)
< > EFS file system support (read only) (EXPERIMENTAL)
<M> Compressed ROM file system support
< > FreeVxFS file system support (VERITAS VxFS(TM) compatible)
< > OS/2 HPFS file system support
< > QNX4 file system support (read only)
< > System V/Xenix/V7/Coherent file system support
<M> UFS file system support (read only)
[*] UFS file system write support (DANGEROUS)


여러 가지 다른 OS에서 사용되는 파일 시스템 지원 옵션이다. 만약 해당 파일 시스템이 시스템에 존재한다면 해당 파일 시스템에 대한 지원을 켜두자.

보안 및 기타 설정

Multi-device support (RAID and LVM) --->
[*] Multiple devices driver support (RAID and LVM)
<M>  RAID support
<M>    Linear (append) mode
<M>    RAID-0 (striping) mode
<M>    RAID-1 (mirroring) mode
<M>    RAID-4/RAID-5 mode
<M>    Multipath I/O support
<M>  Device mapper support
[*]    ioctl interface version 4


소프트웨어 RAID 및 LVM 옵션이다. 여러 개의 하드디스크를 하나처럼 쓰려고 할 때 사용된다. Device mapper는 LVM의 새로운 이름이다. 이 기능들을 쓰려면 raidtools와 lvm2 tools를 설치해야 한다. 이외에 커널 2.6에 포함되지 않았지만 evms로 여러 가지 기능을 쓸 수 있다.

Partition Types --->
[*] Advanced partition selection
[ ]   Acorn partition support
[ ]   Alpha OSF partition support
[ ]   Amiga partition table support
[ ]   Atari partition table support
[ ]   Macintosh partition map support
[*]   PC BIOS (MSDOS partition tables) support
[ ]      BSD disklabel (FreeBSD partition tables) support
[ ]      Minix subpartition support
[ ]      Solaris (x86) partition table support
[ ]      Unixware slices support
[ ]   Windows Logical Disk Manager (Dynamic Disk) support
[ ]   NEC PC-9800 partition table support
[ ]   SGI partition support
[ ]   Ultrix partition table support
[ ]   Sun partition tables support
[ ]   EFI GUID Partition support


여러 가지 OS에서 쓰이는 파티션 형식을 지원한다. 만약 해당하는 파티션 형식이 시스템에 존재한다면 해당 파티션 형식 지원을 켜두자.

Native Language Support --->
(cp949) Default NLS Option
<M> Codepage 437 (United States, Canada)
<M> Korean charset (CP949, EUC-KR)
<M> NLS ISO 8859-1 (Latin 1; Western European Languages)
<M> NLS UTF8


파일 이름의 문자셋을 커널 내에서 처리할 수 있도록 하는 기능인 nls 모듈을 설정한다. nls를 지원하는 파일 시스템(fat, vfat, ntfs, isofs, udf, smbfs, cifs, jfs 등)에서 mount에 옵션을 넣어서 원래 파일 이름의 문자셋을 현재 리눅스에서 쓰이는 문자셋으로 변경할 수 있다. 영문 글자셋인 CP437과 ISO8859-1, 그리고 한국에서 쓰이는 CP949, EUC-KR 그리고 유니코드 환경에서 쓰일 UTF8 정도는 모듈로 만들어 두는 것이 좋다.

Profiling support --->
[*] Profiling support (EXPERIMENTAL)
< > OProfile system profiling (EXPERIMENTAL)


커널의 프로파일링을 위한 옵션이다. 커널 개발자가 아니라면 꺼두는 것이 좋다.

Kernel hacking --->
[*] Kernel debugging
[ ]   Check for stack overflows
[ ]   Debug memory allocations
[ ]   Memory mapped I/O debugging
[*]   Magic SysRq key
[ ]   Spinlock debugging
[ ]   Page alloc debugging
[ ]   Compile the kernel with debug info
[ ] Sleep-inside-spinlock checking
[ ] Compile the kernel with frame pointers


커널을 디버깅할 때 필요한 여러 옵션들이다. Magic SysRq Key를 제외하고는 꺼두는 편이 좋다.

Security options --->
[*] Enable different security models
[*]   Socket and Networking Security Hooks
<M>   Default Linux Capabilities
<M>   Root Plug Support
[*]   NSA SELinux Support
[ ]      NSA SELinux boot parameter (NEW)
[ ]      NSA SELinux Development Support
[ ]      NSA SELinux MLS policy (EXPERIMENTAL) (NEW)


리눅스의 기본 보안 모델 대신 다른 보안 모델을 적용시키려 할 때 필요한 옵션이다. 특히 NSA에서 개발한 SELinux를 적용시키려면 이 옵션을 이용해야 한다.

Cryptographic options --->
--- Cryptographic API
--- HMAC support
<M> Null algorithms
<M> MD4 digest algorithm
<M> MD5 digest algorithm
<M> SHA1 digest algorithm
<M> SHA256 digest algorithm
<M> SHA384 and SHA512 digest algorithms
<M> DES and Triple DES EDE cipher algorithms
<M> Blowfish cipher algorithm
<M> Twofish cipher algorithm
<M> Serpent cipher algorithm
<M> AES cipher algorithms
<M> CAST5 (CAST-128) cipher algorithm
<M> CAST6 (CAST-256) cipher algorithm
<M> Deflate compression algorithm
<M> Testing module


커널 내에서 제공되는 여러 가지 암호화 알고리즘 라이브러리 묶음인 Crypto API이다. 네트워크 프로토콜 및 파일 시스템 암호화 등에서 사용된다.

Library routines --->
<M> CRC32 function


여러 가지 모듈에서 공통으로 사용되는 기능들을 선택할 수 있게 하는 옵션이다.

컴파일하기
커널 컴파일 자체는 커널 2.4와 달라진 점이 별로 없다. 단 make dep가 커널 2.6에서는 무의미해졌다. 커널 2.6에서는 커널 소스간 의존성을 자동적으로 계산해주기 때문에 별도로 make dep을 할 필요가 없어졌다. 그리고 커널을 컴파일하기 시작하면 커널 2.4에서는 복잡한 컴파일러 옵션이 화면에 뿌려졌지만, 커널 2.6에서는 특별히 옵션을 주지 않으면 현재 컴파일 상황을 다음과 같이 아주 간단하게 표현한다.

ganadist linux # make modules
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/split-include
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/sumversion.o
  HOSTLD  scripts/modpost
  HOSTCC  scripts/pnmtologo
make[1]: `arch/i386/kernel/asm-offsets.s’ is up to date.
  CC [M]  drivers/acpi/processor.o
  CC [M]  drivers/char/hw_random.o
  CC [M]  drivers/char/agp/backend.o


그리고 앞의 Kconfig에서 설명했다시피 make help 명령을 내리면 make 뒤에 붙일 수 있는 Rule들이 소개된다. 여기에는 미리 정해진 설정 값을 넣을 수도 있고 make oldconfig를 이용해서 이전 커널에서 사용했던 커널 설정을 불러들여서 적용할 수 있다. 그런 다음 커널 이미지와 모듈을 만들고 설치하면 간단하게 설치가 완료된다.

ganadist linux # make oldconfig modules install modules_install
 
컴파일이 끝나고 해야할 일
자 컴파일이 끝났으면 새로 만든 커널이 부팅할 수 있도록 하는 작업들이 필요하다. 몇 가지 짚고 넘어가도록 해보자.

부트로더
최근 많이 쓰이고 있는 grub 같은 경우에는 특별히 해줄 것은 없다. 만약 아직까지 lilo를 쓰고 있다면 lilo 명령을 실행해서 lilo의 메뉴 엔트리를 업데이트해줘야 할 것이다. 그리고 혹시 부트로더를 이용하지 않고 플로피디스크를 이용해서 부팅하려는 사람은 주의해야 한다. 커널 2.6에서는 플로피로 직접 부팅하는 코드가 제거되어 버렸기 때문이다. 플로피에서 부팅을 하려면 무조건 부트로더의 도움을 받아야 한다.

fstab
devfs는 아직 선택이 가능하지만 추천은 하지 않는다. 만약에 devfs를 쓰던 시스템이라면 이제는 devpts를 다시 켜야 한다. 리눅스 2.6의 devfs에서는 pts를 지원하지 않기 때문이다. 그리고 sysfs를 사용하려면 /sys 디렉토리를 만들어 두고 fstab에 등록해야 할 것이다. 마지막으로 usbdevfs가 usbfs로 이름이 바뀌었다. 아직까지는 호환성 문제 때문에 alias가 걸려 있지만 되도록이면 변경해주는 것이 좋다.

modprobe.conf
커널 2.6에서는 modutils 대신 module-init-tools를 사용한다. 그리고 modprobe는 이제 /etc/modules.conf 대신 /etc/modprobe.conf를 참조해서 커널 모듈을 읽어들인다. modprobe.conf의 형식이 modules.conf와는 약간 다르기 때문에 module-init-tools에서는 modules.conf를 modprobe.conf로 변환시켜 주는 generate-modprobe.conf라는 스크립트를 제공한다. 일반적으로 module-init-tools를 패키지로 설치하면 자동으로 만들어주기는 하지만 혹시 파일이 없다든가 다른 이유로 수동으로 만들어야 한다면 generate-modprobe.conf로 만들어 주자.

몇 가지 문제 해결
지금까지 리눅스 커널 2.6을 사용하기 위한 여러 설정 사항과 컴파일에 대해 살펴보았다. 마지막으로 커널 2.6으로 업그레드할 때 발생할 수 있는 몇 가지 에러에 대한 해결책을 살펴보자.

◆ 화면에 아무 것도 안나올 때 : 리눅스 커널에서는 console을 완전히 제거할 수 있기 때문에(실제로는 더미 콘솔이다) 만약에 console driver에서 아무 것도 선택하지 않았다면 화면에 아무 것도 안 나올 수 있다. 이전 커널로 부팅한 후 console driver를 하나 이상 선택한 후(VGA Text Console이 제일 무난하다.) 다시 컴파일해서 부팅하도록 하자.

◆ PS/2 마우스를 쓰는 시스템에서 X윈도우가 실행이 안될 때 : 마우스 설정에서 장치 파일을 /dev/psaux 대신 /dev/input/mice로 변경시키자. 커널 2.6에서는 시스템의 모든 마우스를 /dev/input/mice를 통해서 접근할 수 있다.

◆ 엔비디아 그래픽 드라이버를 쓰고 있는데 X윈도우가 실행이 안될 때 : 얼마 전 커널 2.6 기반의 배포판인 페도라 코어 2가 발표되었다. 필자도 엔비디아의 그래픽카드 제품을 사용 중인데 우려했던(?) 대로 엔비디아의 3D 가속 드라이버를 커널에 적재하면 커널이 죽는 경우가 발생했다. 이것은 커널 2.6.5-mm 시리즈부터 커널의 스택 크기를 8KB에서 4KB로 조정하면서 발생된 것이다. 페도라의 경우도 마찬가지로 이 패치가 적용되어 있다. kernel.org의 앤트류 모튼이 관리하는 디렉토리에 있는 make-4k-stacks-mermanet.patch를 리버스 패치한후 사용해야 한다.

한 여름 밤을 리눅스 커널 2.6과 함께
이상으로 리눅스 커널 2.6으로 업그레이드할 때 알아둬야 할 것들을 살펴보았다. 이와 같이 리눅스 2.6에서는 대형 컴퓨터부터 데스크탑, 임베디드 기기까지 각각에 대해 알맞게 적용이 가능하다. 그리고 새로운 하드웨어 환경과 컴퓨터 패러다임을 그대로 녹여서 사용자들에게 많은 매력을 주고 있다. 이제 독자들도 환골탈태한 새로운 리눅스와 함께 다가오는 한 여름 밤을 뜨겁게 달구어 보는 것은 어떨까?
 
profile

일요일은 짜빠게뤼~ 먹는날~^^

엮인글 :
http://adminplay.com/2273/796/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
367 linux daemon (리눅스 데몬 설명) ADMINPLAY 2014-02-26 647817
366 대용량 HDD 파티셔닝(Mass storage Partitioning) (GPT 파... ADMINPLAY 2010-04-14 73625
365 FFMPEG를 가장쉽게 설치하는 방법(ffmpeg-php 등) ADMINPLAY 2010-05-03 66397
364 rrdtool 컴파일시 에러 configure: error: Please fix the... ADMINPLAY 2009-08-08 64753
» 커널 2.6으로 업그레이드!「A to Z」 ADMINPLAY 2009-08-08 64402
362 e2fsck - 파일 시스템 복구 및 검사. - fsck file ADMINPLAY 2010-09-12 60903
361 배치파일을 이용한 백업방법 l2zeo 2010-03-31 59533
360 Maskrading ADMIN 2008-11-11 58770
359 시스템 백업과 응급 복구 ADMINPLAY 2009-05-11 58732
358 리눅스 전원부터 부팅이 되기까지의 과정이해 ADMIN 2008-11-11 57607
357 리눅스 디렉토리 구조와 파티션 관리의 기본 ADMINPLAY 2009-05-22 57556
356 hdparm 세부옵션 ADMINPLAY 2012-01-16 55119
355 CentOS 설치 - VMware 상에서 CentOS 설치하기 file l2zeo 2010-02-24 52101
354 Red Hat Linux 9 ADMINPLAY 2009-09-24 51551
353 Dell OMSA 설치 및 이용방법 ADMINPLAY 2014-08-13 49792
352 2TB이상의 Disk를 사용한 Raid6 구성 ADMINPLAY 2015-08-08 46197
351 sulinux 1.0. 서버 패키지 리스트 ADMINPLAY 2011-04-30 45622
350 ORA-01031: insufficient privileges 오류 ADMINPLAY 2010-02-24 41013
349 [APM] 리눅스에서 Apache, PHP, MySQL 등 제거 방법 ADMINPLAY 2009-06-29 39388
348 AIX 필수 명령어 ADMINPLAY 2009-12-10 39118

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234