Linux에서 PC 스피커를 직접 구동하는 방법

Linux에서 PC 스피커를 직접 구동하는 방법

원래 IBM PC에서는 I/O 주소 0x61의 비트 1에 1과 0을 기록하여 PC 스피커를 직접 구동할 수 있었습니다. 이는 기본적으로 1.19MHz 타이머 주파수에서 실행되는 1비트 DAC였습니다(시스템 클럭은 4.77MHz, 4)로 나눈다.

리눅스에서 이것을 할 수 있는 방법이 있나요? 이상적으로는 파일이나 라이브 비트스트림을 공급하고 마더보드의 TTL 스피커 전압 핀에 직접 연결할 수 있는 직렬 장치를 원합니다. 내가 본 대부분의 온라인 프로그램은 ioctl을 통해 PIT의 2를 시계로 설정하지만 타이머를 통하지 않고 스피커를 직접 구동하고 싶습니다.

답변1

정확히 이 작업을 시도하는 커널 모듈이라는 커널 모듈이 있습니다 snd-pcsp(소스 코드가 있으며 sound/drivers/pcsp/포트 0x61을 어떻게 처리하는지 볼 수 있습니다). ALSA 장치로 노출되므로 라이브 비트스트림을 쉽게 제공할 수 있습니다.

그러나 내 시스템에서는 귀하가 설명하는 것과 매우 유사하게 들리지 않습니다. 적어도 제가 시도한 것과는 다릅니다. 하지만 당신은 그것으로 무엇을 하고 싶은지 말하지 않았습니다. 나는 당신도 1.19MHz에 도달할 수 없다고 생각합니다. 그러나 필요에 맞게 언제든지 커널 모듈을 수정할 수 있습니다.

이것이 작동하지 않으면 사용자 공간 애플리케이션이 루트이고 실행 가능하다면 ioperm포트 0x61에 쓰는 것을 막을 수 있는 방법은 없습니다. 그러나 물론 문제가 발생할 수 있습니다. Linux는 실시간 운영 체제가 아니므로 애플리케이션이 언제든지 선점될 수 있습니다. (저는 이 특정 애플리케이션을 위한 코어를 예약하는 등 이런 일이 발생하지 않도록 하는 방법에도 관심이 있습니다.)

관련 정보