다음 이전 차례

3. 실제로 커널을 설정하는 방법

3.1 소스 구하기

여러분은 소스를 anonymous ftp인 ftp.kernel.org 의 디렉토리인 /pub/linux/kernel/vX.Y에서 구할수 있다 (여기서 끝에 X.Y는 버젼이다 - 예: 2.2). 아까 말한것처럼 짝수로 끝나는 것은 안정버젼이고 (2.0, 2.2, ...), 홀수로 끝나는 것은 안정적이지 못할수 있는 개발버젼이다 (1.3, 2.3, ...). 커넬은 보통 linux-x.y.z.tar.gz (여기서 x.y.z는 버젼)이다. 보통 사이트들은 .bz2로 끝나는 것들도 가지고 있는데 이는 bzip2로 압축된 것이다 (이들은 크기가 조금 작아서 조금 빨리 받을 수 있다)

가장 좋은 곳은 ftp.xx.kernel.org - 여기서 xx는 당신이 있는 국가 약칭이다. 예를 들면, ftp.at.kernel.org는 오스트리아, ftp.us.kernel.org는 미국, ftp.kr.kernel.org는 한국이다.

3.2 소스 압축 풀기

루트로 로그인 하거나 su를 사용하여 루트가 된 후 /usr/srccd하라. 만약 여러분이 처음 리눅스를 설치했을 때 커널 소스를 설치했다면, 이전의 전체 소스를 포함하는 linux라는 디렉토리가 있을 것이다. 여러분이 디스크 공간이 충분히 있고 안전하게 사용하기를 원한다면, 그 디렉토리는 가지고 있는 것이 좋다. 현재 여러분의 시스템에서 실행되고 있는 버전을 알기 위해서는 그 디렉토리의 이름을 알맞게 바꾸는 것이 좋다. uname -r명령은 현재 커널 버전을 표시해 준다. 그러므로 uname -r의 결과가 1.0.9라면, linux디렉토리를 linux-1.0.9로 (mv를 사용해서) 이름을 바꿔라. 만약 별로 개의치 않는다면 그 디렉토리 전체를 지워라. 어떠한 경우든지, 전체 소스 코드를 풀기 전에 /usr/src 디렉토리 안에 linux라는 것이 없음을 꼭 확인해야 한다.

이제, /usr/src에서, `tar zxpvf linux-x.y.z.tar.gz'명령으로 소스를 풀자. (만일 여러분이 끝이 .gz 이 아닌 .tar로 된 파일을 가지고 있다면 `tar xpvf linux-x.y.z.tar'를 사용해도 된다.). 소스 안의 내용이 빠르게 지나갈 것이다. 모두 풀리면, /usr/src 안에 새로운 `linux' 디렉토리가 생겼을 것이다. linux 로 들어가서 README 파일을 읽어보아라. `INSTALLING the kernel' 이라는 제목이 붙은 부분이 있을 것이다. 그곳에 쓰여진대로 실행하라. 심볼릭 링크가 제자리 에 올바로 되어 있는지 확인하고, 쓸모없는 .o 파일들을 삭제한다든지 하는 등등의 것들을 적절히 행하라.

만약 .bz2로 된 파일과 bzip2라는 프로그램이 있다면 다음을 하라 (이것에 관해서는 http://www.muraroa.demon.co.uk/에서 더 읽을 수 있다):

     bz2cat linux-x.y.z.tar.bz2 | tar xvf -

3.3 커널 설정

이 글중의 약간은 Linus의 README 파일내의 비슷한 장의 반복/해설 이다

/usr/src/linux 내에서의 `make config'명령은 여러분에게 수많은 질문을 하는 설정 스크립트를 실행한다. 이것은 bash가 필요하므로, /bin/bash/bin/sh, 또$BASH를 확인하라.

'make config'외에 더 편한 방법들도 있다. 아마 `make menuconfig' 이 가장 많이 쓰이는 것일 것이다. 당신이 무엇을 선택하든 그 방법과 친해지는 것이 중요하다 - 왜냐하면 조만간 그것을 쓰고 또 쓸것 이기 때문이다. X를 쓰고 있고, Tk가 설치 되어 있으면 'make xconfig' 을 쓸 수 있다. 'make menuconfig'은 (n)curses가 설치 되어 있거나, 택스트로 된 매뉴를 쓰고 싶을 때 쓸 수 있다. 이들은 한가지 명확한 장점이 있다 : 만약 실수로 잘못된 값을 입력했을때, 언제라도 고칠수가 있다.

`make menuconfig' 과 `make xconfig' 에서 설정 옵션은 계급형태로 나타난다 (좀 큰 기능을 고르면 새로운 작은 기능들을 고를수 있다).

여러분이 질문에 답할 준비가 되면, 보통 `y' (yes) 또는 `n' (no) 로 대답한다. 장치 드라이버들은 보통 `m'옵션을 가지고 있다. 이것은 ``module''을 뜻하며, 시스템이 컴파일할 때 직접 커널에 집어넣지 않고 적재 가능 모듈로 만드는 것을 말한다. 그것을 좀더 우습게 설명하자면, ``maybe'' 라고 할 수 있다. 여기서는 더 명확하고 필요하지 않은 몇몇 옵션들에 대해서는 설명하지 않는다. 다른 것들에 대해서는 ``다른 구성 선택 사항들'' 을 읽어보기 바란다. `make menuconfig'은 스페이스 키로 기능을 선택한다.

2.0.x나 그 이후에서는, `?'옵션이 있다. 이 옵션을 쓰면 구성 파라매터에 대한 정확한 설명을 보여준다. 이 정보는 최신의 것일 것이다. 여기에는 중요한 기능, 이것이 무엇의 일부분인지, 그리고 간단한 설명이 들어있다.

Kernel math emulation (Processor type and features)

만일 여러분이 수치 연산 보조 프로세서를 가지고 있지 않다면 (여러분이 386하 나만이나 486SX를 가지고 있다면) 여러분은 `y'라고 해야 한다. 여러분이 보조 프로세서를 가지고 있는데 `y'라고 했더라도 너무 걱정하지 말라. 이 경우에는 보조 프로세서가 사용되고 에뮬레이션은 무시된다. 단지 중요한 것은 커널이 더 커진다는 것이다(RAM을 소비한다). 나는 수학 에뮬레이션이 느리다고 말한적이 있다. 비록 이것이 이 장에서는 별로 상관없을지라도, 느린 X 윈도우 시스템 실행을 할 때에는 꼭 염두에 두어야 할 것이다.

Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block Devices)

여러분은 아마 이것을 지원해야 할 것이다. 이것은 커널이 대부분의 사람들이 가지고 있는 표준 PC 하드 디스크를 지원한다는 것이다. 이 드라이버는 SCSI 드라이브는 포함하지 않는다. 그것은 구성의 나중에 나온다.

여러분은 ``old disk-only''와 ``new IDE'' 드라이버에 해서 질문을 받을 것이다. 여러분이 그들중 하나를 고르고자 한다면, 그 둘사이의 주된 차이점은 구 드라이버는 하나의 인터페이스에 오직 두개의 디스크만을 지원하는데 비해, 새것은 두번째 인터페이스와 IDE/ATAPI 시디롬 드라이브를 지원한다. 새 드라이버는 그 이전것 보다 4k 더 크고 또한 ``개선된'', 즉 가지고 있는 버그의 수가 다른 것을 뜻한다. 이것은 여러분의 디스크의 실행을 ,특히 여러분이 새 (EIDE 타입) 하드웨어를 가지고 있다면, 개선시켜 줄 것이다.

Networking support (General Setup)

여러분의 머신이 인터넷과 같은 네트워크와 연결되어 있거나, 전화를 걸어서 인터넷에 접근하기 위해 SLIP, PPP, 터미날 등을 사용하고자 한다면 `y'라고 대답해야 한다. 그러나, 많은 패키지들( X 윈도우 시스템 같은)이 여러분의 머신이 진짜 네트워크에 연결되어 있지 않더라도 네트워크 지원을 요구하므로 여러분은 `y'라고 답해야만 한다. 나중에 TCP/IP 네트워킹을 지원하기를 원하는지 물을 것이다. 다시 말하지만, 여러분이 정말로 확신하지 않는다면, 여기에 `y'라고 답하라.

System V IPC (General Setup)

IPC(Interprocess Communication: 내부 프로세스간 통신)에 대한 가장 좋은 정의 중의 하나가 Perl 책의 용어 풀이에 있다. 놀랄 것도 없이, 몇몇 Perl 프로그래머들은 이것을 다른 패키지들처럼(가장 주목할 만하게도, DOOM같은 것) 프로세스들이 서로 대화하게 하는데 사용한다. 그러므로 여러분이 무엇을 하는지 정확히 알지 못하면 `n'라고 답하는 것은 좋은 생각이 아니다.

Processor family (Processor type and features)

(이전의 커널에서는 486에 대한 최적화를 위해서 -m486 플래그를 사용한다.)

예전부터, 이것은 특정 프로세서를 최적화하여 컴파일하였다. 커널은 다른 칩 들에서도 잘 작동하지만, 커널은 약간 커졌다. 그러나 새 커널에서는, 더이상 사실이 아니다. 그래서 여러분은 커널을 컴파일하는 프로세서를 입력해야 한다. ``386'' 커널은 모든 머신에서 작동한다.

SCSI support

만약 여러분이 SCSI 장치를 가지고 있다면 `y'라고 답하라. 여러분은 더 많은 정보들을 보게 될 것이다. 시디롬, 디스크, 그리고 여러분이 가진 SCSI 아답터가 무엇인지 또 지원하는지 같은것들 말이다. 더 자세한 것을 알기 위해서 는 SCSI-HOWTO를 보기 바란다.

Network device support

여러분이 네트워크 카드를 가지고 있거나, 인터넷에 접속하기 위해 SLIP, PPP, 또는 패러렐 포트 아답터를 사용하고자 한다면 `y'로 답하라. 설정 스크립트는 여러분이 가지고 있는 카드가 어느 것인지, 어떤 프로토콜을 사용할 것인지를 보여줄 것이다.

Filesystems

그리고 나서, 설정 스크립트는 여러분에게 다음의 파일 시스템을 지원하기를 원하는지에 대해서 물어볼 것이다.

Standard (minix) - 새로운 배포판에서는 미닉스 파일 시스템을 만들지 않고 또 많은 사람들이 그것을 사용하지 않는다. 그러나 아직은 넣는 것이 좋다. 몇몇 ``구조 디스크'' 프로그램들이 그것을 사용하고, 플로피에 사용하기에는 미닉스 파일 시스템이 덜 나쁘기 때문에, 여전히 많은 플로피들이 미닉스 파일 시스템을 사용한다.

Second extended - 이것은 새 배포판에서 널리 쓰이고 있다. 여러분은 아마도 이중에 하나를 가지고 있을 것이므로 `y'라고 답해야 한다.

msdos - 만일 여러분이 MS-DOS 파티션을 사용하고자 한다면, 또는 MS-DOS로 포맷된 플로피 디스크를 마운트하고자 한다면 `y'이다.

그 외에 다양한 외부 운영체계에 존재하는 파일 시스템도 쓸 수 있다.

/proc - (아무래도 내 추측에는, 벨 연구소에서 온 것 같다). 아무도 디스크에 proc 파일 시스템을 만들 수 없다. 이것은 커널과 프로세스들을 위한 파일 시스템 인터페이스이다. 많은 프로세스 목록기들(`ps' 같은)이 이것을 사용한다. 언젠가 `cat /proc/meminfo'나 `cat /proc/devices'를 시도해 보아라. 몇몇 쉘들은 (특히 rc)는 입출력을 위해서 /proc/self/fd (다른 시스템들에서는 /dev/fd 로 알려진) 를 사용한다. 여러분은 여기에 거의 확실히 `y'라고 답해야 한다. 많은 중요한 리눅스 도구들이 이것에 의존하고 있다.

NFS - 만일 여러분의 머신이 네트워크에 연결되어 있고 NFS로 다른 시스템에 존재하는 파일 시스템을 사용하기 위해서는 `y'라고 답하라.

ISO9660 - 대부분의 시디롬들에 있다. 여러분이 시디롬 드라이브를 가지고 있고 리눅스하에서 사용하고자 한다면, `y'이다.

하지만 나는 나한테 필요한 파일 시스템이 어떤건지 모르는데!!

좋다.그럼 `mount'라고 쳐보라. 그 결과는 다음과 비슷할 것이다.

    blah# mount
    /dev/hda1 on / type ext2 (defaults)
    /dev/hda3 on /usr type ext2 (defaults)
    none on /proc type proc (defaults)
    /dev/fd0 on /mnt type msdos (defaults)

각 라인을 보라. `type' 다음에 오는 단어가 파일 시스템 타입이다. 이 예 에서는, 내 //usr 의 파일 시스템은 second extended 이고, 나는 /proc를 사용하고 있다. 그리고 플로피 디스크를 msdos 파일 시스템으로 마운트하여 사용하고 있다.

여러분이 /proc 를 가지고 있고 현재 사용중이라면, `cat /proc/filesystems' 를 해 볼 수 있다. 그것은 여러분의 현재 커널의 파일 시스템 목록이다.

거의 쓰지 않는, 필요하지 않은 파일 시스템의 구성은 커널을 부풀리게 할 수 있다. 이것을 피할 수 있는 방법으로 모듈에 대한 섹션을 읽어보기 바란다. 그리고 ``함정'' 섹션에서 왜 부풀려진 커널이 좋지 않은지 보아라.

Character devices

여러분은 여러분의 프린터(패러랠 프린터를 말함)나 버스 마우스, PS/2 마우스 (많은 노트북들에서는 장착된 트랙볼을 위해서 PS/2 마우스 프로토콜을 사용하고 있다.), 몇몇 테이프 드라이브들, 그리고 다른 ``특정'' 장치들을 위해 드라이버들을 사용할 수 있다. 적절한 곳에 `y'를 하라.

알아둘 것 : gpm이란 프로그램은 가상 콘솔에서 마우스로 cut & paste 를 할 수 있게 한다. X (X 윈도 시스템)가 있어도 문제없이 쓸 수 있어, 마우스가 있는 사람에게는 괜챦은 것이다. 하지만 X 가 아닌 다른것에서는 특별한 꾀가 필요하다.

Sound

만약 여러분이 다양한 소리를 듣고 싶다면 `y'이다. 그러면 또 여러분에게 여러분의 사운드 카드에 대한 모든것을 물어보고 컴파일할 것이다. (사운드 카드 구성에서 알아둘 것: 만약 풀버전의 드라이버를 설치할 것이냐고 물어오면, `n'라고 답함으로써 여러분이 정말로 필요한 부분만을 커널에 집어 넣고 메모리를 절약할 수 있다.) 나는 여러분이 사운드 카드를 가지고 있다면 사운드 지원에 대한 더 자세한 것을 알기 위해서 꼭 Sound-HOWTO를 읽어보기를 권한다.

만약 특정 사운드 카드가 지원되는지를 알고싶으면 http://www.linux.org.uk/OSS/에서 무료 드라이버 를 보던지 Open Sound System <http://www.opensound.com/>에서 상업용 드라이버를 봐라.

다른 구성 선택사항들

여기에 모든 구성 선택사항들이 있는 것은 아니다. 왜냐하면 그들은 너무 자주 바뀌거나 아니면 자명한 것들이기 때문이다.(예를 들면, 3Com 3C509 지원은 이 특정 이더넷 카드를 사용하기 위해 장치 드라이버를 컴파일해야 한다).

온라인 help에는 Axel Boldt(boldt@math.ucsb.edu)씨가 시작하고 관리하고 있는데 여기에는 만든 모든 선택사항(그들을 Configure 스크립트에 넣는 방법까지도)에 대한 매우 포괄적인 목록들이 있다. 이것은 또 하나의 큰 파일로써 Documentation/Configure.help 라는 이름으로 Linux 소스 버젼 2.0부터 존재한다.

Kernel hacking

>Linus의 README에서:

``kernel hacking'' 구성은 보통 커널이 더 크거나 더 느려지는(또는 둘다) 결과를 자세히 설명해주고, 어떤 루틴들을 넣어서 커널의 문제점(kmalloc())이 되는 잘못된 코드를 찾아 멈추게 하려고 하기 때문에 커널을 덜 안정하게 만들 수도 있다. 그러므로 여러분은 아마도 ``안정'' 커널에서는 질문에 `n'라고 답해야 할 것이다.

3.4 이제 무얼하지?(The Makefile)

make config를 한 후에, 여러분은 여러분의 커널 설정이 끝났으므로 ``추가적인 구성을 위해서 최상위의 Makefile을 확인해 보라'' 고 하는 등의 메세지를 만날 것이다.

이제 Makefile을 보자. 여러분은 아마도 고칠 필요가 없을 것이다. 하지만 본다고 상하지 않으니까 한번 보자. 여러분은 또한 새 커널을 설치했을때만 한번 `rdev' 명령을 사용함으로써 선택사항들을 바꿀 수 있다.


다음 이전 차례