PCM(4)

명칭
pcm - FreeBSD 오디오 디바이스 드라이버

서식
device pcm0 at isa? port? tty irq 5 drq 1 flags 0x15

해설
pcm 드라이버는 WSS/MSS 사양 또는 SBPro 나 SB16 와 호환성이 있다 여러가지 ISA 사운드 카드를 서포트하고 있습니다. 음성 입력/재생만을 서포트하고 있어, 또, 대부분의 카드로 유사가 아닌 진짜 전이중 동작이 가능합니다.

통상의 파라미터 외에 flags 필드를 세칸다리 DMA 의 채널을 지정하는데 사용합니다 (일반적으로는 전이중 카드로 음성 입력하기 위해서 사용합니다). flags 에는, 세칸다리 DMA 채널을 사용하지 않는 카드로는 0 을, 사용하는 경우에는 채널 C 를 지정하는데 0x10 + C 를 세트 합니다.

PnP 오디오 카드도 FreeBSD 릴리스 2.2. 6 으로부터 이용할 수 있게 되었다 pnp 드라이버를 이용하는 것으로 서포트하고 있습니다. 자세한 정보는 pnp(4) 의 메뉴얼 페이지를 참조해 주세요. 특히 (인식된) PnP 카드로 할당할 수 있는 유니트 번호는 레가시 ISA 디바이스가 나중이 되는 것, 실제로 드라이버로 사용하는 리소스 (port 및 irq 와 drq)(은)는 "device pcm0" 의 행으로부터는 아니고 PnP 의 설정이 이용되는 것은 기억해 둬 주세요. 그러니까, 카네르콘피그파일에

device pcm0 ...

(와)과 같이 썼다고 하면(자), 최초로 발견되는 PnP 오디오 카드의 유니트 번호는 1 이 되어, /dev/audio1, /dev/dsp1 등으로서 액세스 할 수가 있습니다. 어플리케이션의 상당수는 암묵중에 /dev/audio 를 사용하게 되어 있으므로, 이하와 같이 /dev/audio 로부터 올바른 디바이스의 엔트리에 기호 연결을 만드는 것이 좋을 것입니다.

cd /dev rm audio dsp dspW mixer. /MAKEDEV snd1 ln -s audio1 audio ln -s dsp1 dsp ln -s dspW1 dspW ln -s mixer1 mixer

본드라이버는 WSS/MSS 카드로 최대 능력을 발휘합니다. WSS/MSS 는 상쾌한 구조를 하고 있어, 각각 독립한 기능의 집합이 되어 있습니다. 우연히도 이러한 카드는 시장에서 제일 싼 오디오 카드이기도 합니다. SB 나 ESS 등이라고 한 다른 카드는 내부 구조가 복잡해, 또 자료가 손에 들어 오지 않는 것도 드물지는 않습니다. 결과, 이러한 카드의 서포트는 그만큼 좋지 않습니다.

드라이버는 장비 되고 있는 하드웨어를 인식해, 올바르게 동작시키기 위해서(때문에) 가능한 한 일을 합니다. 따라서 커널의 콘피그파일에 그만큼 상세한 설정을 할 필요는 없습니다. PnP 카드에 대해서는 자동적으로 식별하므로 실로 간단합니다. PnP 가 아닌 ISA 의 카드에 대해서는 (카네르콘피그파일로 명시적으로 주소를 지정해 우선시키지 않는 한은) 우선 주소 0x530 로 0x604 로 MSS 카드를 찾아, 그 후에 0x220 로 0x240 로 SB 카드를 찾습니다.

IOCTL
본드라이버는 Voxware 의 ioctl()의 대부분을 서포트하고 있어, (넓게 사용되고 있는 mpeg 플레이어나 Linux 의 바이너리를 포함해) 대부분의 어플리케이션은 수정하는 것 없이 동작합니다. 차이는 몇개인가는 있습니다 (그 중에서도 중요한 하나는 오디오 버퍼를 메모리 맵 해 액세스 하는 능력의 차이입니다). 이 때문에 어플리케이션안에는 오디오 모듈에 약간의 변경을 해 재컴파일 할 필요가 있는 것도 있겠지요. 서포트하고 있는 ioctl 의 완전한 리스트에 대해서는 /usr/include/machine/soundcard.h 를 참조해 주세요.

서포트하고 있는 카드

서포트하고 있는 코덱 (역주: 음성의 입출력을 실시하는 회로)/카드의 리스트를, PnP 설정이 가능한 것에 대해서는 적용 가능한 PnP 의 설정 정보도 포함해, 이하에 나타냅니다 (디폴트의 파라미터를 나타냅니다만, 실제의 당신의 리소스는 이것과 다를지도 모릅니다. )

CS4237, CS4236, CS4232, CS4231
    pnp 1 0 os enable port0 0x534 port2 0x220 irq0 5 drq0 1 drq1 3

    이러한 카드는 모두 MSS 모드로 전이중으로 완벽하게 동작합니다. 이 칩 세트는, 그 밖에도 있습니다만, A/Open 의 AW35 및 AW32, Intel 의 메인보드의 몇개인가, 및 (CS4231는) 비 PnP 의 카드로 사용되고 있습니다.

    Voxware 의 자료에 의하면 CS4232 는 버그 소유라는 보고가 있습니다만, 사실인지 어떤지 확실하지는 않습니다. 나의 Intel 제 메인보드의 1 개에서는 음성 입력이 동작합니다만, 이것은 단지 음성 입력의 DMA 채널이 ISA 의 DMA 콘트롤러에 접속되어 있지 않기 때문입니다.

GUSPnP
    pnp 1 0 os enable port0 0x220 port1 0x320 port2 0x32c irq0 5 drq0 7 drq1 5

    MSS 모드로 전이중을 서포트하고 있습니다. GUSPnP 는, 진짜의 CS4231 를 사용하고 있지 않고, 또 mu-law 형식을 취급할 때의 에뮬레이션에 버그가 있으면(자) 의심하고 있습니다. 이 카드는 이제 생산되고 있지 않으므로, 일부러 카드를 (mu-law 로 동작하는 것을 알 수 있고 있다) "Mode3" 에 세트 하는 특별한 코드를 채용하지는 하지 말아줘 내부적으로 U8 형식을 이용해 드라이버 내부에서 소프트웨어로 형식의 변환을 하고 있습니다. 이것에 의해 분해가능이 없어지기 때문에, 이 카드로는 가능한 한 16 비트 모드를 사용해 주세요.

Yamaha OPL-SAx
    pnp 1 0 os enable port0 0x220 port1 0x530 port2 0x388 port3 0x370 irq0 5 drq0 1 drq1 3

    모든 모드로 완전하게 동작합니다. 이 칩은 여러가지 PnP 카드로 사용되고 있을 뿐만 아니라, (비 PnP 모드로) 메인보드나 랩탑 머신으로 이용되고 있습니다 (예를 들어 토시바의 Libretto).

OPTi931
    pnp 1 1 os enable port0 0x534 port2 0x220 port3 0xe0d irq0 10 drq0 1 drq1 6

    이 칩은 버그 소유입니다만, 이러한 칩 이외에 전이중으로 동작하는 카드를 찾아낼 수가 없었던 시기도 있었으므로, 드라이버로 많은 회피책을 취해 전이중으로 동작하도록(듯이) 했습니다. 칩의 버그이기 때문에, u-law 형식은 내부에서는 U8 형식을 이용하고 있습니다.

SB16, Vibra16C, 및 낡은 SB16/AWExx 카드
    pnp 1 0 os enable port0 0x220 irq0 5 drq0 1 drq1 5

    이러한 코덱은, 다른 한쪽향을 8 비트로, 이제(벌써) 한편을 16 비트로 사용하는 것으로, 제한부의 전이중 동작 가능합니다. 드라이버는 이 모드에서의 동작을 서포트하고 있습니다만, 이 모드에서의 동작은 CreativeLabs 에서는 서포트되어 있지 않은 것을 기억해 두어 주세요.

Vibra16X 및 새로운 SB16/AWExx 카드
    pnp 1 0 os enable port0 0x220 irq0 5 drq0 1 drq1 3

    최근이 되어 CreativeLabs 는 코덱 (DSP)을 변경했습니다만, 새로운 회로는 낡은 것과 약간 차이가 납니다. 가장 현저한 차이는 2 개의 8 비트 DMA 채널의 사용법입니다. 이것에 의해 본드라이버의 전이중 동작 서포트가 동작하지 않게 된 것 같습니다. 웨이브 테이블을 사용하는 것에 의해 전이중 동작은 가능하게 될지도 모릅니다만, 본드라이버에서는 웨이브 테이블을 서포트하고 있지 않았기 때문에 반이중으로 참아 주세요.

SBPro 와 그 클론
    그 외의 대부분의 카드의 기정 동작이 이 모드입니다. 그러한 카드에 대해서는 한정적인 (그리고 버그가 있을지도 모른다) 서포트, 8 비트 반이중 밖에 없습니다. (ESS 칩의 경우와 같이) 때로는 하드웨어가 그 이상의 능력을 가지고 있는 경우에서도, 입니다.

진단과 문제 해결

This is XXX but LDN Y is disabled

    이것은 bios 가 PnP 디바이스를 사용 불가대로 하고 있어, 수동으로 "-c" 돌출하고 부트 해 상기의 pnp 설정을 실시하지 않으면 안 되는 것을 가리키고 있습니다.

pcmX: unit not configured, perhaps you want pcmY ?
    이것은 올바르지 않은 유니트를 이용하고 있는 것을 나타내고 있습니다. 일반적으로, 올바른 유니트에의 기호 연결을 만들지 않고 PnP 카드를 사용하고 있을 때 일어납니다. /dev 디렉토리에서 올바른 유니트를 가리키도록(듯이) 기호 연결을 (경우에 따라서는 디바이스 엔트리도) 다시 만들어 주세요.

timeout flushing dbuf_out ...
    이것은 카드의 설정에 문제 (구체적으로는, DMA 채널)가 있을까 혹은 (분별없게 않은 것입니다만) 드라이버에 문제가 있을까에 의해, 카드가 올바르게 인식되어 있지 않은 것을 나타냅니다. 음성 입력에 사용한다 DMA 채널을 확인해 주세요.

capture does not work
    이것은 입력 DMA 채널이 올바르게 설정되지 않을 때에 잘 일어납니다.

버그
자료가 없기 때문에, SB16 의 서포트 상태는 충분하지는 않습니다. 같이 믹서의 서포트는 불완전하고, 또 당신의 카드의 기능 (예를 들어 전체의 음량의 제어등)안에는 모든 디바이스에 대해 서포트되어 있지 않은 것이 있을지도 모릅니다.

역사
pcm 디바이스 드라이버는 FreeBSD 2.2.6 그리고 처음으로 등장했습니다.

저자
pcm 디바이스 드라이버 및 이 메뉴얼 페이지는 Luigi Rizzo (luigi@iet.unipi.it) 하지만 썼습니다.