다음 이전 차례

4. 설치(Installation)

사운드를 지원하도록 리눅스를 설정하려면 다음 단계를 거쳐야 한다:

  1. 사운드 카드 설치
  2. (해당하는 겨우에만) Plug and Play 설정
  3. 사운드를 지원하도록 커널의 설정 및 생성
  4. 디바이스 파일의 생성
  5. 새로이 생성된 리눅스 커널로 부팅 및 작동 확인

레드햇 리눅스에는 sndconfig라는 유틸리티가 있으며, 이를 이용하면 대부분의 경우 사운드 카드를 감지하고 해당 드라이버를 로딩하기 위해 필요한 설정 파일을 만들어 준다. 레드햇 리눅스를 사용한다면 먼저 이를 이용해 보기 바란다. 그래서 제대로 된다면 이 장의 나머지 부분을 읽을 필요가 없다.

sndconfig를 이용하여 실해한 경우, 다른 리눅스 배포본을 사용하는 경우, 또는 무엇을 어떻게 하는지 더 자세히 알고 싶은 경우라면 다음 절에서 설명하는 각 단계를 읽어보기 바란다.

4.1 사운드 카드 설치

판매자에게 설치를 맡기거나 제조업체의 설치 설명서에 따라 설치하라.

오래된 사운드 카드는 IRQ, DMA 채널, 등의 세팅에 필요한 스위치나 점퍼를 가지고 있다. 정확하게 모른다면 공장에서 출하될 때 세팅된 채로(factory defaults) 사용하라. 다른 디바이스(예:ethernet 카드, SCSI 호스트 어댑터, 직렬 그리고 병렬 포트 등)와의 충돌을 피해야 한다.

일반적으로 DOS 에서 사용했던 I/O 포트, IRQ 그리고 DMA setting 을 사용해야 한다. 일부 경우에 (특히 PnP 카드) 다른 세팅을 사용할 필요가 있을 수도 있다. 몇 번의 실험이 필요할 것이다.

4.2 Plug and Play 설정

요즘의 사운드 카드는 대부분 플러그앤플레이 프로토콜을 이용하여 i/o 주소, 인터럽트, DMA 채널을 설정한다. 구형의 카드는 이런 설정이 고정되어 있거나 점퍼를 이용하여 바꾸도록 되어있다. 이런 구형의 카드를 사용한다면 이 절을 읽을 필요가 없다.

버전 2.2의 커널에서도 플러그앤플레이에 대한 지원이 완벽하지 않다. 대부분의 리눅스 배포본에 들어 있는 isapnp tools를 사용하는 것이 좋은 해결 방안이다. isapnp tools는 레드햇 웹사이트인 http://www.redhat.com/에서 내려받을 수도 있다.

먼저 여러분의 리눅스 배포본에 있는 문서를 점검하기 바란다. 플러그앤플레이를 지원하도록 이미 설정되어 있을 수도 있고, 또는 여기의 설명과는 약간 다를 수도 있다. 여러분이 직접 설정해야 할 경우 자세한 것은 isapnp tools의 맨 페이지를 참고하기 바란다. 일반적으로 거쳐야 할 과정을 간단히 설명하면:

isapnp tools를 사용할 수 없거나 사용하기를 원하지 않는다면 다른 선택도 가능하다. 마이크로소프트 윈도즈 95 또는 98에서 사운드 카드를 사용한다면 장치관리자를 이용하여 카드를 설정한 다음 LOADLIN 프로그램을 이용하여 리눅스로 부팅한다. 사운드 카드의 설정이 윈도즈와 리눅스 모두 같은지 확인한다.

도스에서 카드를 사용한다면 SoundBlaster16 PnP 카드와 함께 제공되는 icu utility를 사용할 수 있다. 그런 후에 LOADLIN 프로그램을 사용하여 리눅스로 부팅한다. 위에서와 마찬가지로 사운드 카드의 설정이 도스와 리눅스 모두 같은지 확인한다.

일부 사운드 카드 드라이버는 플러그앤플레이를 초기화 하는데 필요한 소프트웨어를 포함하기도 한다. 자세한 것은 카드 드라이버의 문서를 참고하기 바란다.

4.3 커널 설정(Configuring the Kernel)

리눅스를 처음 설치할 때 이미 컴파일된 커널을 사용하였을 것이다. 이들 커널에는 사운드 지원이 포함되어 있지 않은 경우가 종종 있다. 여러분이 필요로하는 드라이버를 포함하도록 커널을 다시 컴파일하는 것이 최선이다. 새로운 버전으로 커널을 업그레이드 하거나 또는 커널의 크기를 줄여서 필요한 메모리 자원을 줄이고자 할 때도 커널을 컴파일 해야 할 것이다. 사운드 카드가 제대로 작동하는 것을 확인한 후 사운드 드라이버를 모듈화 하기 위해 커널을 재컴파일 하고자 할 수도 있다.

Linux Kernel HOWTO는 커널 컴파일에 대한 자세한 정보를 제공한다. 여기서는 사운드 카드와 관련된 것에 대해서만 언급할 것이다.

사운드를 지원하도록 커널을 설정해 본적이 없다면 커널 사운드 드라이버에 포함되어 있는 관련 파일들을, 특히 여러분의 카드에 관련된 정보를, 읽어 보는 것이 좋다. 그 파일들은 커널 문서 디렉터리에 있으며 일반적으로 /usr/src/linux/Documentation/sound에 있다. 이 디렉터리가 없다면 매우 낮은 버전의 커널이거나 커널 소스 코드가 설치되어 있지 않은 경우이다.

커널을 설정하고 컴파일하는 일반적인 과정을 따라하면 된다. 커널을 설정하는 방법이 현재 세가지 있다. X 윈도우(X11)에서 멋있는 그래픽 화면으로 커널을 설정하려면 make xconfig 하면 되고. 텍스트 화면에서 메뉴 방식으로 커널을 설정하려면 make menuconfig 하면 되며, 예전부터 사용되던 명령행(command line) 입력 방식을 선호한다면 make config 하면 될 것이다.

커널을 설정할 때 사운드 카드의 종류도 선택해야 하고 드라이버 옵션도 선택해야 한다. 각 옵션에 대한 설명을 온라인 도움말로 제공하니 잘 읽어보고 적당한 옵션을 선택하기 바란다.

커널 설정을 한 후 컴파일하고 새로운 커널을 설치해야 한다. 이 과정은 Kernel HOWTO를 참고하기 바란다.

4.4 디바이스 파일의 생성

사운드 카드가 제대로 작동하기 위해서는 사운드 디바이스 파일을 만들 필요가 있다. 이들 파일은 일반적으로 리눅스 시스템을 처음에 인스톨할 때 이미 생성된다. 아래의 명령을 이용하여 간단히 점검할 수 있다. 출력이 아래와 같이 나오면 (출력되는 날짜는 바뀔 수 있다) 디바이스 파일에 대한 걱정은 거의 할 필요가 없다.

% ls -l /dev/sndstat
crw-rw-rw-   1 root     root      14,   6 Apr 25  1995 /dev/sndstat

디바이스 파일이 정확하게 생성되는 것과 그들 파일의 소유문제는 별개라는 것을 명심하라.

디바이스들이 제대로 작동하기 위해서는 그전에 커널 드라이버가 커널속에 로딩 또는 컴파일 되어 있어야 한다.

드문 경우이지만, 디바이스 파일이 잘못 되었다고 믿는다면 디바이스 파일을 만들 수 있다. 이를 위해 대부분의 리눅스 배포본에서 제공하는 /dev/MAKEDEV 스크립트를 이용할 수 있다.

여러분이 PC 스피커 사운드 드라이버를 사용할 경우 패키지에 따라오는 문서를 읽어 보면 어떤 종류의 디바이스 파일을 생성해야 할지 알 수 있을 것이다.

4.5 새로운 커널로 부팅하여 시험하기

여러분은 이제 새로운 커널로 부팅하여 사운드 드라이버를 테스트할 준비가 된 것이다. 새로운 커널을 설치하고 재부팅 하라 (물론 문제가 발생할 경우를 대비하여 이전의 커널을 보존해야 할 것이다).

부팅 동안에 다음과 비슷한 어떤 메세지가 화면에 나오는지 확인하라 (스크롤 속도가 너무 빨라서 읽을 수 없다면 부팅 후에 "dmesg" 명령으로 다시 볼 수 있다.):

Sound initialization started
<Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5
<Sound Blaster 16> at 0x330 irq 5 dma 0
<Yamaha OPL3 FM> at 0x388
Sound initialization complete

이것이 여러분 카드의 종류 및 (만일 있다면) 점퍼 세팅과 맞아야 한다.

사운드 드라이버를 탈착식 커널 모듈로 만들었을 때는 (insmod sound trace_init=1 과 같이 하여 사운드 드라이버를 사용 가능하게 하지 않는 한) 위의 메세지가 나타나지 않는다는 것을 명심하라.

사운드 드라이버가 커널에 연결 (link) 될 때 Sound initialization started, Sound initialization complete 라는 메세지가 나타날 것이다. 이들 메세지가 나타나지 않는다면 커널에 사운드 드라이버가 없다는 뜻이다. 이 경우에는 사운드 드라이버를 포함하도록 컴파일된 커널이 실제로 작동중인지 확인해야 한다.

Sound initialization startedSound initialization complete 사이에 아무것도 표시되는 것이 없다면 인식된 사운드 디바이스가 아무것도 없다는 것을 의미한다. 거의 대부분, 사운드 드라이버가 정확하지 않거나, 카드가 지원되지 않거나, I/O 포트의 지정이 틀렸거나, 하드웨어 설정이 잘못된 (또는 되지 않은) PnP 카드인 경우 등이다.

부트할 동안 에러 또는 경고 메세지가 표시될 수도 있다. 사운드 드라이버 설정 후 첫번째 부팅 때 그러한 메세지가 표시되는지 그렇지 않은지 주의해서 지켜보라.

다음으로 device 파일인 /dev/sndstat를 읽어보라. 사운드 드라이버가 제대로 초기화 되었는지에 대한 추가 정보를 제공한다. 아래와 비슷한 내용을 볼 수 있을 것이다:

% cat /dev/sndstat
Sound Driver:3.5.4-960630 (Sat Jan 4 23:56:57 EST 1997 root,
Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586)
Kernel: Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586
Config options: 0

Installed drivers: 
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401

Card config: 
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x330 irq 5 drq 0
OPL-2/OPL-3 FM at 0x388 drq 0

Audio devices:
0: Sound Blaster 16 (4.13)

Synth devices:
0: Yamaha OPL-3

Midi devices:
0: Sound Blaster 16

Timers:
0: System clock

Mixers:
0: Sound Blaster

위의 명령이 에러 메세지를 보여줄 수도 있다. "No such file or directory" 라는 에러 메세지는 디바이스 파일을 정확하게 생성시킬 필요가 있음을 의미한다 (4.3 절을 보라). "No such device" 는 사운드 드라이버가 커널속에 로딩 또는 연결 (link) 되지 않았음을 의미한다. 4.2 절로 돌아가라.

/dev/sndstat 의 "Card config:" 부분에서 표시된 내용이 ( "(SoundBlaster at 0x220 irq 5 drq 1,5)" 와 같이) 괄호 속에 들어있다면 디바이스 설정은 되었지만 인식은 되지 않았다는 것을 의미한다.

이제 여러분은 간단한 사운드 파일을 연주할 준비가 된 셈이다. 사운드 출력의 기본적인 점검을 위해 사운드 샘플 파일을 구하여 사운드 디바이스로 보내보라. 예를 들어,

% cat endoftheworld >/dev/dsp
% cat crash.au >/dev/audio

(위의 명령에서 ">"를 빼먹지 않았는지 확인하라.)

일반적으로 cat을 사용하는 것이 오디오 파일을 연주하는 올바른 방법이 아니라는 것을 명심하라. 단지 빨리 점검하기 위한 것일 뿐이다. 여러분은 적당한 (뒤에 설명할) 사운드 연주 프로그램을 구하고자 할 것이다.

이 명령은 /dev/sndstat의 audio devices 부분에 하나의 디바이스만 있어도 실행될 것이다. audio devices 부분에 아무것도 없다면 디바이스가 왜 인식되지 않았는지 점검해야 할 것이다.

위이 명령이 "I/O error" 를 표시한다면 "dmesg" 명령을 사용하여 커널 메세지를 한 번 읽어보라. 아마도 어떤 에러 메세지를 발견할 수 있을 것이다. 가능성이 높은 메세지는 "Sound: DMA (output) timed out - IRQ/DRQ config error?" 이다. 위의 메세지는 여러분이 드라이버에 알려준 사운드 카드의 interrupt가 실제로 사운드 카드에 설정되어 있는 interrupt 와 틀리다는 것을 의미한다. 대부분의 경우 드라이버에 설정해준 IRQ 와 DMA channel이 작동하지 않는다는 나타낸다. 이를 해결하는 가장 좋은 방법은 사운드 카드가 지원하는 모든 DMA 와 IRQ를 시험해 보는 것이다.

또 다른 가능성은, 디바이스와 그 디바이스를 위해 설정해준 드라이버가 호환되지 않는 것일 수도 있다. "SoundBlaster (Pro/16) compatible" 사운드 카드는 사운드블래스터 드라이브와 호환되지 않는 경우와 같은 것이다. 이 경우에는 여러분의 사운드 카드가 어떤 디바이스와 호환되는지 알아야한다 (이를 위해 예를 든다면, comp.os.linux.hardware 뉴스그룹에 물어보라).

몇가지 샘플 사운드 파일을 ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z 에서 구할 수 있다.

이제 녹음(sound recording)을 확인해 보자. 소리를 입력할 수 있다면 다음과 같은 명령을 사용하여 테스트해 볼 수 있다:

# record 4 seconds of audio from microphone
EDT% dd bs=8k count=4 </dev/audio >sample.au
4+0 records in
4+0 records out
# play back sound
% cat sample.au >/dev/audio

위와 같이 하기 위해서는 사운드 카드에 연결된 마이크가 필요하고 마이크에 대고 말을 해야한다. 마이크를 입력 장치로서 세팅하고 녹음 게인 레벨을 조절하려면 믹서 프로그램이 필요할 수도 있다.

이들 시험을 통과하면 여러분의 사운드 D/A, A/D 하드웨어와 소프트웨어가 제대로 작동한다고 믿어도 된다. 문제가 있다면 다음 장을 참고하라.

4.6 문제해결(Troubleshooting)

이 HOWTO 문서에서 지시한대로 따라 했는데도 문제가 있다면 점검해야 할 것이 몇가지 있다. 점검해야 할 사항을 간단한 것 부터 복잡한 순서로 열거하겠다. 점검 사항에 문제가 있다면 다음 단계로 넘어가기 전에 그 문제부터 해결하라.

단계 1: 현재 작동하는 커널이 조금전에 여러분이 컴파일한 커널인지 확인하라.

현재 실행되고 있는 커널이 사운드를 지원하도록 컴파일된 커널인지 알고 싶으면 커널에 찍혀 나오는 날짜(date stamp)를 점검해 보라. uname 명령으로 이를 확인할 수 있다:

% uname -a
Linux fizzbin 2.2.4 #1 Tue Mar 23 11:23:21 EST 1999 i586 unknown

또는 /proc/version 파일을 읽어보라:

% cat /proc/version
Linux version 2.0.0 (root@fizzbin) (gcc version 2.7.0) #1 Tue Jun 4 16:57:55 EDT

날짜가 여러분이 커널 컴파일한 시기와 일치하지 않는다면 현재 실행되고 있는 커널은 이전 것이다. 정말 리부트 했는가? 여러분이 LILO를 사용한다면 LILO를 다시 설치하였는가 (대개는 LILO를 설치하기 위해 lilo를 실행)? 플로피로서 부팅한다면 새로운 부트 플로피를 만들었는가 그리고 부팅할 때 그것을 사용하였는가?

단계 2: 커널 사운드 드라이버가 컴파일 되었는지 확인하라.

이를 점검하는 가장 쉬운 방법은 앞에서 설명하였듯이 /dev/sndstat의 출력을 보는 것이다. 출력이 기대와 다르다면 커널 설정에서 뭔가 잘 못된 것이다. 커널 설정과 컴파일등을 처음부터 다시 시작하라.

단계 3: 부팅하는 동안 커널이 사운드 카드를 감지 하였는가?

부팅될 때 커널이 감지 되었는지 확인하라. 부팅시 화면에 표시되는 메세지를 유심히 보라. 스크롤 속도가 빨라서 확인하기 곤란하다면 dmesg 명령으로 다시 볼 수 있다:

% dmesg

또는

% tail /var/log/messages

여러분의 사운드 카드를 발견하지 못하였다면 뭔가 잘못된 것이다. 사운드 카드가 정확하게 인스톨 되었는지 확인하라. DOS에서 여러분의 사운드 카드가 작동한다면 하드웨어에는 문제가 없다고 믿어도 된다. 커널 설정에 문제가 있을 것이다. 사운드 카드를 엉뚱한 걸로 지정했거나 변수 설정이 틀렸을 수도 있다. 또는 여러분의 사운드 카드가 리눅스 커널 사운드 드라이버와 호환되지 않을 수도 있다.

한가지 가능성은 사운드 카드가 도스 드라이버로서 초기화 해야 할 필요가 있는 호환 카드중의 하나일 경우이다. 도스로 부팅하여 도스용 사운드 드라이버를 로딩하라. 그런 후에 Control-Alt-Delete를 사용하여 리눅스로 부팅하라. 사운드 카드의 I/O address, DMA 그리고 IRQ 세팅이 리눅스의 경우와 도스의 경우가 일치하는지 확인하라. 여러분의 카드 종류에 따른 설정에 대한 몇가지 힌트를 Readme.cards 파일에서 찾을 수 있을 것이다.

지원되는 카드 목록에 여러분의 사운드 카드가 없다면 리눅스 드라이버가 그것을 지원하지 않을 가능성도 있다. 이 문서의 끝부분에 있는 몇가지 참고문헌이 여러분에게 도움이 될 수도 있다.

단계 4: dsp 디바이스로부터 데이타를 읽을 수 있는가?

앞서 언급한 dd 명령을 사용하여 /dev/audio 디바이스로부터 읽기를 시도해 보라. 에러 없이 실행되어야 한다.

이것이 제대로 작동하지 않는 다면 가능성 있는 원인은 디비이스 파일이다. /dev 디렉토리에 있는 디바이스 파일의 주, 부 번호 (major and minor number)가 정확한지 확인하라. 디바이스 파일에 대한 읽기와 쓰기 권한을 점검하라.

상당히 가능성 없긴 하지만 하드웨어 문제일 수도 있다. 하드웨어 문제인지 확인하기위해 가능하다면 도스에서도 점검해 보라.

여전히 문제가 있다면 마지막으로 시도해 볼 것들이 있다:


다음 이전 차례