6. 드라이버에게 설정상태를 알려주기

6.1. 개요

이 작업이 어떻게 이루어지는가는 순전히 그 드라이버에 달려있다. 일부 드라이버들은 자신의 물리적 디바이스의 설정상태를 파악하는데 있어 둘 이상의 방법을 가질수도 있다. 아주 극단적인 방법으로는 아예 버스 리소스 값들을 커널(또는 모듈) 소스코드에 직접 적어넣은 후 다시 컴파잃하는 방법이 있겠고, 그에 반대되는 극단적인 방법으로는 드라이버가 자동적으로 모든 것을 처리해서 당신이 해줄 일이 전혀 없는 경우도 있을수 있다. 심지어는 PnP 방법들을 사용해서 버스 리소스 값들을 하드웨어에 셋팅시키는 방법도 가능할 수 있다.

중간적인 방법이라면 어떤 프로그램을 수행시켜 리소스 정보를 드라이버에게 전달하거나 리소스 정보를 파일에 넣어두는 것 정도겠다. 어떤 경우에는 드라이버가 디바이스가 있음직한 어드레스들을 뒤져 해당 디바이스를 찾아내는 수도 있다. 이때는 여러 IRQ 들을 테스트해서 어느 것이 동작하는지 확인하게된다. 드라이버가 이 작업을 자동으로 해낼수도 있지만 그렇지 못할 수도 있다. 그밖에, 드라이버가 PnP 방법들을 사용해 디바이스를 찾아내어 그 버스 리소스 설정상태를 알아낼 수도 있지만, 이때 그 디바이스를 셋팅해주지는 않을 것이다. 또한, 드라이버는 /proc 디렉토리의 일부 화일들을 살펴볼수도 있다.

때로는 사용자가 직접 "수동으로" 드라이버에게 너는 어떠어떠한 버스 리소스를 사용해야만 한다고 알려줘야 할 때도 있다. 그러한 버스 리소스 값들은 커널 또는 로딩될 모듈에게 파라메터로 전달하게 된다. 드라이버가 커널에 내장되어 있는 경우에는 "부트 프롬프트" 를 통해 커널에게 전해주어야 한다. Boot-Prompt-HOWTO 문서에는 몇몇 버스 리소스들과 그밖의 파라메터들이 설명되어있다. 일단 어떤 파라메터들을 커널에 전달해야 할지 알고있다면, 그것을 lilo.conf 파일속에 append="..." 형식으로 기록해두는 방법도 가능하다. 그러면 lilo 프로그램이 실행될 때 이 정보를 읽어 커널 로더에게 전달해준다.

만일 드라이버가 모듈로서 로드된다면 버스 리소스 값들을 그 모듈에게 파라메터로 전달해줄 필요가 있을것이다. 일부 버전의 리눅스에서는 /usr/lib/modules_help/descr.gz 파일에 사용가능한 모듈 파라메터들의 리스트가 담겨있을 것이다. 모듈에 대한 파라메터들은 (자동적으로 로드되는 것들도 포함해서) /etc/modules.conf 에 적혀있을 수 있다. 보통은 이 화일을 수정시켜주는 도구들이 있기는 하나, 배포판에 따라 제공되는 그 도구들이 각기 다르다. 이 파일내에 적혀있는 주석은 파일을 수정하는데 도움이 될 것이다. 또한, 여기 적힌 파라메터들의 내용에 따라 /lib/modules 디렉토리에 밑에 넣어둔 모듈들이 로드될 것이다.

드라이버들이 버스 리소스들을 찾아내는 방법들은 엄청나게 일관성이 없지만 그 최종 목적만큼은 다들 같다. 드라이버에 대해 뭔가 문제가 있다면 그 드라이버 문서를 봐야한다(커널의 문서 디렉토리를 살펴보라). 몇몇 드라이버들에 대한 간략한 정보가 아래 절들에 나와있다.

6.2. 시리얼 포트 드라이버: setserial

표준 시리얼 포트 드라이버의 경우(멀티포트 카드는 해당되지 않는다), setserial 명령을 써서 그 드라이버를 설정하게된다. 이 명령어는 대개 시스템 시동 파일의 실행시 수행된다. 최신 버전부터는 단순히 통상의 방식으로 setserial 명령을 실행시킬 경우, /etc/serial.conf 라는 파일이 "편집" 되게 되었다. 따라서 setserial 명령으로 세팅시킨 내용은 serial.conf 설정파일속에 저장되는 것이다. 시스템 시동파일에 의해 수행될 때의 setserial 명령은 serial.conf 파일을 참조하게 된다. 이와같은 설정방법은 당신의 배포본에 따라서는 해당없을 수도 있다.

당신이 옵션을 어떻게 주느냐에 따라 setserial 을 두가지 다른 식으로 사용할 수 있다. 하나는 수동으로 드라이버에게 설정내용을 알려주는 것이다. 다른 하나는 어떤 주어진 어드레스를 검색케해서 거기에 시리얼 포트가 있는지 여부를 보고하게하는 것이다. 이때, 그 어드레스를 조사해서 해당 포트에 사용되는 IRQ 가 뭔지까지도 알아보도록 할수있다. 시스템 시동시에 드라이버는 setserial 비슷한 명령을 실행시킨다. 이로서 IRQ 를 알아내지 못한 경우에는 그냥 "표준" IRQ 값을 할당하게 되며, 따라서 이는 잘못된 값일수도 있다. 포트의 존재여부도 조사해줄 것이다. 더 자세한 것은 Serial-HOWTO 문서를 보라.

PCI 시리얼의 경우에는, 그 시리얼 드라이버가 특정한 모뎀들을 감지해내고 버스 리소스를 설정할 수 있다.

6.3. 사운드 카드 드라이버들

6.3.1. OSS-Lite

IO, IRQ, DMA 값들을 파라메터로 모듈에게 알려주거나, 그 값들을 커널에 넣어 컴파일해야만 한다. 하지만 일부 PCI 카드들은 자동적으로 감지될수도 있다(가령 lspci 명령 따위를 사용할 경우). 레드햇은 "sndconfig" 라는 프로그램을 제공하는데, 이것은 ISA PnP 카드를 감지한 후, 그 감지된 버스 리소스에 맞춰 자동으로 모듈이 로딩되게한다.

6.3.2. OSS(Open Sound System) 과 ALSA

이 프로그램들은 PnP 방법을 써서 카드를 감지한 후 적절한 드라이버를 택해 로드한다. 또한 ISA PnP 카드상에 버스 리소스를 셋팅해줄 수도 있다. 충돌을 피하기 위해서는 당신이 수동으로 간섭해주어야할 수도 있다. ALSA 드라이버의 경우 ISA-PnP 지원은 옵션사항이므로, 원한다면 isapnp 를 사용할 수도 있을 것이다.