노무현 대통령 배너


2006. 3. 31. 17:21

[본문스크랩] 커널 2.6으로 업그레이드!「A to Z」

커널 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
Kernel support for a.out ECOFF binaries
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
/dev/cpu/microcode - Intel IA32 CPU microcode support
/dev/cpu/*/msr - Model-specific register support
/dev/cpu/*/cpuid - CPU information support
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 --->
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 장치를 쓸 수 있도록 하는 옵션이다. 리눅스 2.6에서는 480Mbps의 대역폭을 제공하는 USB 2.0 호스트 컨트롤러의 사용이 가능하며, 2.4와 마찬가지로 USB 1.0용 호스트 컨트롤러인 UHCI, OHCI 드라이버가 제공된다. 그리고 USB 장치의 종류(프로토콜)에 따라 모뎀(ACM), 프린터(usblp), 저장장치(usb-storage), 입력 장치(hid), 시리얼(usbtty) 등의 여러 가지 커널 드라이버가 제공된다.

리스트 2

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

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

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

리스트 3

리눅스에서 여러 문자 장치를 쓸 수 있도록 하는 옵션이다. 가상 터미널은 리눅스 콘솔에서 쓰이는 유용한 기능으로 하나의 콘솔을 여러 개의 터미널처럼 쓸 수 있도록 한다. 그리고 여러 가지 직렬 포트 장비와 병렬 포트 장비를 지원하며, 그래픽카드를 사용할 수 없는 환경에서도 쓸 수 있도록 직렬 및 병렬 포트로 콘솔 입출력을 지원하도록 하는 옵션이 포함되어 있다. 원격 터미널이나 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 --->
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 --->
Hotplug firmware loading support


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

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


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

Parallel port support --->
Parallel port support
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)
Loopback device support
Cryptoloop Support
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
Include IDE/ATAPI CDROM support
< >Include IDE/ATAPI TAPE support (EXPERIMENTAL)
< >Include IDE/ATAPI FLOPPY support
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 --->
SCSI device support
[*]legacy /proc/scsi/ support
---SCSI support type (disk, tape, CD-ROM)
SCSI disk support
< >SCSI tape support
< >SCSI OnStream SC-x0 tape support
SCSI CDROM support
[*] Enable vendor-specific extensions (for SCSI CDROM)
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) --->
IEEE 1394 (FireWire) support (EXPERIMENTAL)
---Subsystem Options
[ ]Excessive debugging output
[*]OUI Database built-in
---Device Drivers
< >Texas Instruments PCILynx support
OHCI-1394 support
---Protocol Drivers
OHCI-1394 Video support
SBP-2 support (Harddisks etc.)
[ ] Enable Phys DMA support for SBP2 (Debug)
Ethernet over 1394
OHCI-DV I/O support
Raw IEEE1394 I/O support
IEC61883-1 Plug support
IEC61883-6 (Audio transmission) support


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

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

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

리스트 4

리스트 5

네트워크의 여러 가지 논리적 계층을 지원하는 옵션이다. 특히 기존의 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
/proc/cpufreq interface (deprecated)
Default CPUFreq governor (performance) --->
--- ‘performance’ governor
‘powersave’ governor
‘userspace’ governor for userspace frequency scaling
[*] /proc/sys/cpu/ interface (2.4. / OLD)
CPU frequency table helpers
--- CPUFreq processor drivers
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

그리고 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 --->
ISO 9660 CDROM file system support
[*] Microsoft Joliet CDROM extensions
[*] Transparent decompression extension
UDF file system support


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

DOS/FAT/NT Filesystems --->
DOS FAT fs support
MSDOS fs support
VFAT (Windows-95) fs support
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) 장치에 대응한 데스크탑 환경이 구축되리라 생각된다.

'리눅스 일반' 카테고리의 다른 글

[본문스크랩] 리눅스 문자열 검색  (0) 2006.04.01
[본문스크랩] 리눅스 데몬의 종류와 정의  (0) 2006.04.01
리눅스의 파일 시스템과 디렉토리 구조  (0) 2006.03.31
유닉스 ,X-Window 환경설정 링크  (0) 2006.03.29
[본문스크랩] [펌]페도라 - 사용할때 유용했던 팁들  (0) 2006.03.29