다음 이전 차례

5. PnP 카드의 취급 방법

5.1 PnP 카드 취급의 소개

현재는 새로운 내장 보드(카드)의 거의 모든 것이 플러그&플레이 (PnP)이다. Linux 에도 PnP를 취급하는 소프트웨어는 있지만, 이것은 반드시 사용이 용이한것은 아니다. PnP와 조화롭게 공존하기 위한 방법을 아래에 6개 보였다. (상황에 의해서는 사용할 수 없는 것도 있다 ). 이 중의 어떤 것을 사용하는 것이 마땅한지는 목적에 의해 다르다. 결국, 지금은 없을지도 모르지만 가장 간단하고 편리한것이 좋다. 간단하다고 생각되는 방법은, 스스로는 아무것도 하지 않고, PnP-BIOS 에 설정을 하게 하는 것이지만, 추후에 당신은 BIOS가 행한 설정을 찾아 보는것이 필요할 수 있다. 이들 방법을 비교하는 것은, 누구가가 전부를 시험해서 그것을 글로 옮길 필요가 있다. 작업을 할때에 복수의 방법을 사용할 필요가 있을지도 모른다.

위의 방법중 어느것을 사용해도, 하드웨어 내의 버스 자원이 설정될 것이다. 그러나, 실행된 설정을 디바이스 드라이버에 전한 것은 마지막 2 개 뿐이다. 확실하게 전하는 것은 마지막 1개 뿐이다.(그것 자신이 드라이버 이기 때문이다.) 드라이버에 정보가 어떻게 해서 전해지는 지는 드라이 버에 의존하고, 정보를 전하기 위해서는 사용자가 무엇인가를 하지 않으면 안 되는 것 도 있다. 자세한 것은, ``Tell the Driver the Configuration'' 의 장을 보시오.

5.2 Disable PnP ?

많은 디바이스는 PnP 전용이고, PnP를 무력화 할 수 있는 것은 없다. 그러나, 일부의 디바이스에서는, 점퍼와(점퍼가 없는 구성의 경우에는)디바이스 부속의 Windows 용프로그램을 사용해 이것을 무력화 할 수 있다. 이것에 의해, PnP 설정의 불필요한 작업을 회피할 수 있는 것도 많이 있다. 이러한 버스 자원이 예약되어 있는 것을, 잊지 말고 BIOS 에 설정하시오.

PnP 를 무력화시키는 편이 좋은 이유는 이 외에도 몇개 있다 :

  1. 같은 머신에 MS Windows가 있는 경우, PnP를 사용할 수 있도록 해서 Windows 의 설정을 Linux와는 다른 설정로 하는 것이 있을지도 모른다.
  2. PnP 를 사용하지 않는다면, IRQ 번호(와 포트 주소)등의 선택 범위가 크게 제 한되어 버릴 수 있다.
  3. 제어하는 디바이스를 찾기 위해서 PnP 방법을 이용하는 Linux 디바이스 드라이버도 있다.
  4. 앞으로 기기 구성을 바꾸는 것이 필요하게 된 경우, 디바이스가 PnP라면 변경이 용이할 것이다.(점퍼를 설정하거나, DOS/Windows 용 프로그램을 실행할 필요가 없다).
  5. 다른 PnP 디바이스가 있을 수도 있지만(또는 있을 수 있다), PnP를 사용할 수 있도록 해 둘(혹은 그 방법을 알아 둔다)필요가 있을지도 모른다.
한 번 non-PnP 디바이스로 설정하면, (고쳐 점퍼로 설정을 변경하는가, DOS/Windows의 설정 프로그램을 실행하지 않는 한)그 디바이스는 PnP 설정 프로그램과 BIOS 에서는 설정할 수 없게 된다.

5.3 BIOS에서 PnP 설정

BIOS를 사용해 PnP의 설정을 하는데에 있어

PnP BIOS를 사용한다면, 하드웨어 설정을 하는 것이 가능하다. 즉, BIOS가 모든 디바이스를 필요로 하는 자원을 전부 읽어보고, 이것을 설정한다(버스자원을 디바이스에 할당한다). 이것은 PnP OS의 대용이 되지만, BIOS는 디바이스를 설정하지 않는 점과, 실행된 설정을 드 라이버에 알리지 않는 점이 다르다. 보통은 불휘발성 메모리(ESCD)내에 보존되어 있는 설정을 사용해야 한다. 새로운 디바이스를 검출한 경우와, 자원이 충 돌한 경우, BIOS는 필요에 따라서 설정을 변경해야 마땅하고, ESCD내의 설정 을 그대로 사용할 수는 없다.

사용되는 BIOS는 이러한 설정을 지원하고 있지만, BIOS를 바르게 설정 하지 않는 경우와 불완전한 설정을 하는 경우가 있다. BIOS를 사용하는 이점은 단순한 것이다. 대부분의 경우 설정하는 것이 없기 때문이다. (BIOS의 CMOS 메뉴에서 「PnP OS가 아니다」라고 설정한 점을 제거한다. ). 디바이스 드라이버에 의해서는 BIOS가 행한 설정을 자동적으로 검출할 수 있는 것도 있지만, 어떤 경우에 있어서는 BIOS가 행한 설정을 사용자가 조사할 필요 가 있다. (항상 쉽지만은 않다). 상세한 것은 ``현재의 설정은 어떻게 되어 있는가?'' 를 참조 하시오. 달리 생각되는 이점으로서는, BIOS 는 Linux가 시작하기 전에 동작하므로, 뒤에 시작하는 디바이스 드라이버가 모든 버스 자원을 사용할 수 있는(그리고 검출할 수 있다)점이 거론된다. MS에 의하면, PnP BIOS가 디바이스의 PnP 설정을(MS Windows의 지원 없은에) 할 수 있는 기능은 옵션에 지나지 않는다.(필수가 아니다). 그러나, 1996년(??)무렵 보다 후에 만들어진 BIOS의 대부분은 이 기능을 가지고 있다 . 이것이 바르게 동작한다면 , 우리들은 그들에게 (*보답)답례의 메모를 보내야 할 것 이다. 이러한 BIOS는 PCI 버스도 ISA 버스도 설정하지만, 일부 오래된 BIOS는 PCI 밖에 설정할 수 없다고 한다. 사용하는 BIOS에 대해서 좀더 조사하고 싶으면 WWW 를 봐 주시오. 필자도 이것에 관한 데이터를 가지고 있는 것이 아니기 때문에, 필자에게 문의는 피하기 바랍니다. BIOS 에 대해서 독자 여러분이 알고 싶다고 생각하고 있는 것의 자세한 정보는 입수가 곤란(혹은 입수할 수 없는)할지도 모른다. 일부의 BIOS는 최소한의 PnP 기능밖에 가지고 있지 않고, 설정 작업의 어려운 부분은 Windows 유티리티 에 맡기려고 한다. 이런 경우에는, 다른 방 법(isapnptools 등)을 찾거나, 혹은 BIOS에 ESCD 데이타베이스가 있다면 이것을 이용해야만 할 것이다. 자세한 것은 다음 장을 참조 하시오.

BIOS의 ESCD 데이타베이스

BIOS 는 PnP 설정 정보를 기록해 있는 비휘발성 데이타베이스를 관리하고 있다. 이것은 ESCD(Extended System Configuration Data)라고 한다. 또한, ESCD에 관한 규정은 옵션이지만, 대부분의 PnP BIOS에는 이 기능이 있다. ESCD는 PnP 디바이스의 자원 설 정정보를 저장하는 것만이 아니라, non-PnP 디바이스의 설정 정보도 저장하고 있으므로, (non-PnP 디바이스에 있는 것도 기록하고 있다), 충돌을 피할 수 있다. ESCD 데이터는 보통 칩에 보존되기 때문에 전원을 꺼도 없어지지 않지만, 하드 디스크에 데이터를 보관 유지하는 타입도 있다 (??).

ESCD는 마지막으로 사용한 설정을 보관 유지하기 위한 것이지만, Linux의 isapnp 와 PCI Utilities 같은(ESCD를 갱신하지 않는)프로그램을 사용한 경우에는, ESCD는 이러한 프로그램을 모르기 때문에, 이 설정은 ESCD 내에 보존 되지 않는다. 좋은 PnP OS는 ESCD를 갱신하므로, 후에(표준 Linux 같은)non-PnP의 OS로 설정을 사용할 수 있다. Windows는 특별한 경우에만 이것을 한다. ``Windows 를 이용한 ESCD 의 설정'' 을 참조 하시오.

ESCD에 설정되어 있는 정보를 이용면, 반드시 BIOS의 CMOS에서 "Not a PnP OS" 혹은 비슷한 설정을 해 주시오. BIOS가 시작할 때에(Linux OS 가 로드되기 전), BIOS는 ESCD를 사용해 설정을 한다.그러나, BIOS가 ESCD에 기록되고 있지 않은 새로운 PnP 카드를 검출하면, BIOS는 그 카드에 버스 자원을 할당하고 ESCD를 갱신하여야만 한다. 기존 의 PnP 카드에 할당하고 있는 버스 자원을 변경하고, 그것에 동반해 ESCD 를 수정해야만 하는 것도 있다.

각각의 디바이스가 마지막 설정을 하드웨어에 보존하고 있다면, PC 를 시작할 때에 하드웨어 설정을 할 필요는 없다. 그러나 실제 동 작은 그렇지 않다. 따라서, BIOS를 PnP로 사용하고 있는 경우에는 모든 ESCD 데이터를 항상 정확한 상태로 유지해야만 한다. ESCD를 가지고 있지 않은 BIOS도 몇개 있지만, 이러한 BIOS도 비휘발 메모리를 몇개 가지고 있어, non-PnP 카드가 사용하기 위해서 예약하고 있는 버스 자원을 저장할 수 있다. 많은 BIOS는 양쪽 모두를 가지고 있다.

Windows 를 이용한 ESCD 의 설정

BIOS가 하는 ESCD의 설정에 사용자의 원하는 바가 없는(또는, 꼭 있어야만 하는) 경우에는, Linux용 유틸리티를 사용해 ESCD를 설정 가능하다면 좋다고 생각할 수 있다. 1999초의 시점에서는, 이러한 툴 은 아무것도 없었다. 따라서, 이것을 실행하는 마지막 수단으로서 Windows를 사용하게 되었던 것이다(같은 PC 에 Windows가 들어 있는 경우에는).

Windows에서 ESCD를 설정또는 수정시키는 방법은 3가지가 있다. 최초의 방법 은, DOS 또는 Windows 3.x 용으로 만들어진 ICU 유틸리티를 사용하는 것이다. 이것은 Windows 9x/2k 에서도 동작한다(??). 두번째의 방법은, Windows 9x/2k 상에서 수동으로(「강제적인」)설정 하고, Windows의 정상 종료시 에 이 정보를 ESCD에 보존시키는 방법이다. 세번째 방법은 플러그&플레이에 없는 legacy디바이스에서만 이용할 수 있다. Windows가 이러한 디바이스의 존 재와 사용하고 있는 버스 자원을 알고 있으면, Windows는 이 정보를 ESCD 에 저장한다.

Windows가 디바이스의 설정을 자동적으로 한후, 사용자가 「강제적으로 」설정 을 바꾸지 않으면, 이러한 설정은 어쩌면 ESCD에는 반영되지 않을 것이다. 물론, Windows는 자신 자신의 설정을 ESCD에 보존되고 있는 설정 에 맞추는 것 이므로, 결과적으로 간혹 일치하는 것도 있다.

Windows9x는 PnP operating system이고, 자동적으로 디바이스의 PnP 설정을 한다. Windows는 레지스터리(이것은 binary인 Windows 파일들에 저장 되어 있다)의 속에서 PnP 데이타베이스를 관리하고 있다. PnP 버스 자원 되에도 많은 설정 정보가 레지스터리에 들어 있다. PnP 버스 자원은, 현재 메모리에 기억되어 있는 것과(아마 대부분 같지만)하드 디스크에 저장되어 있는 것중 어느 것에나 있다. Windows98 에서 PnP 버스 자원(메모리에 보관 유지하고 있는 방법?)을 간접적으로 탐색하거나, 강제적으로 변경 하려면, 디바이스 매니저를 사용한다.

Windows98에서 디바이스 매니저를 호출하는 방법은 2 가지가 있다 :

그리고 디바이스 매니저 내에서 디바이스를 선택한다.(같은 클래스의 디바이스가 복수개 있는 경우에는 복수 스텝의 조작이 되수도 있다. ) 다으로 특성」, 「자원」을 차례로 클릭 한다. 자원 설정을 수동으로 변경 하려면, 「자동 설정을 사용한다」의 체크를 지우고, 「설정의 변경」을 클릭 한다. 그러면, 설정을 변경 할 수 있지만, 설정을 변경할 수 없는 것도 있다. 변경할 수 있다면, 변환을 강제로 시킨것이 된다. 설정이 강요된 것을 나타내는 메세지 가 표시될수 있다. 그러나, Windows가 표시한 기존의 설정을 계속 사용하고 싶은데 「강제적으로 」바꾸어 버린 경우에는, 일단 무엇인가 다른 설정 으로 한후 원래 설정으로 돌리지 않으면 안 된다.

Windows98 에 있어서 어떤 설정이 「강요」되고 있는지를 조사하려면 다음과같이 조작을 한다:Start --> Programs --> Accessories --> System Tools --> System Information --> Hardware Resources --> Forced Hardware. Windows에서 버스 자원을 「강제적」으로 바꾼 경우에는 그 변경을 ESCD에 저장하지 않으면 안 된다.(Windows를 정상 종료 시키면 그렇게 된다). 「시스템 정보」윈도우를 보면, Windows 상 에서 IRQ 와 I/O 포트가 어떻게 할당되어져 있는가를 조사 할 수 있다.

Windows에서 버스 자원의 충돌이 일어나지 않아도, Linux에서 충돌이 일어나는 경우가 있다. 그 이유는, Windows는 ESCD 와 다른 방법으로 버스 자원을 할당하고 있기 때문이다. 드문 경우 이지만, Windows 상의 모든 디바이스가 legacy 디바이스 이거나, 설정이 「강요」되고 있는 경우에는, Windows 와 ESCD 의 설정은 완전히 같게 되는 것이다.

새로운 디바이스의 추가 (Linux 또는 Windows 에 있어서 )

새로운 PnP 디바이스가 추가되고, 또한 BIOS의 설정이 "not a PnP OS"인 경우, PnP BIOS는 자동적으로 디바이스의 설정을 하고, 그 설정을 ESCD에 저장 하여야만 한다. non-PnP legacy 디바이스(또는 점퍼등으로 PnP를 무효로한 디바이스)의 경우에는, 이것을 처리하기 위한 옵션이 몇개 있다.

특정의 버스 자원(IRQ 등)이 예약되고 있어, PnP에서 할당해서는 안 되는 것을(CMOS 설정 메뉴를 사용해)직접 BIOS에 지정하는 것도 할 수 있다. BIOS가 이 정보를 ESCD에 기록하지 않는다. 그러나, 충돌이 일어난 경우에, 미리 선택해 있던 CMOS의 설정으로 ESCD의 설정을 덮어 쓸지를 BIOS의 메뉴로 선택할 수 있게 되어 있을지도 모른다. 다른 방법은, DOS 또는 Windows에서 ICU를 실행하는 방법이 있다. 보다 특별한 방법으로서, ICU를 Windows9x/2k 에 수동으로 인스톨하고 , 그 설정을 「강요」하는(앞의절을 참조)방법도 있다. 설정이 「강요」되면, Windows는 PC가 숏다운될 때에 ESCD를 갱신 할 것이다.

5.4 isapnp (isapnptools 의 일부)

유감이지만, PnP의 기초를 모르는 사람에는, isapnp에 대한 많은 문장 서의 내용은 알기 어려울 것이다. 본 HOWTO 에서는, isapnp 부속의 FAQ 와 같은 isapnp의 이해를 돕기 위한 설명을 한다. isapnp를 사용할 수 있는 것 은 ISA 버스 상의 PnP 디바이스뿐이다(PCI 버스에서는 사용할 수 없습니다). Linux 시작시에 "isapnp" 프로그램을 실행하면, /etc/isapnp.conf 파일 에서 지정된 자원값이 PnP 디바이스에 설정된다. 이 설정 파일 은 자동적으로 만들 수 있지만, 각종 옵션을 설정하려면 직접 편집해야 한다. isapnp를 사용하는 경우, 커넬 일부에 있는 디바이스 드라이버는 isapnp가 어드레스등을 하드웨어에 설정하는 것보다도 좀도 앞에서 실행된다. 결과적으로, 디바이스 드라이버는 디바이스를 찾아내는 것이 불가능하다. 드라이버가 정확한 어드레스에 억세스 되어도, 그 어드레스 는 아직 하드웨어에 설정되고 있지 않기 때문이다.

당신의 Linux 배포본이 isapnptools를 자동적으로 인스톨 할 경우에, isapnp는 시스템 시작시에 이미 실행되고 있을수도 있다. 이 경우에 해야 할 것은, "man isapnp.conf" 의 출력을 보면서 /etc/isapnp.conf 를 편집하는 것뿐이다. 그러나, 이 작업은 수동으로 PnP 를 설정하는 것과 그다지 다르지 않는 점에 주의해 주시오. 사용자는 어떠한 설정으로 할지를 정하고서 설정 파일을 편집해야 하기 때문이다. 설정 파일을 편집하는것에는, "pnpdump" 프로그램이 편리하다. 이 프로그램은 설정 파일을 대체로 만들어 주지만, 이 설정을 사용하기 전에 정확하게 편집 하지 않으면 안 된다. 이 파일에는 편집의 참고가 되는 코멘트가 포함되어 이다 . "isapnp" 를 설정에 이용하고, 또한 PnP BIOS가 있는 경우에, BIOS에는(설정시에)「PnP OS를 가지고 있지 않다」라고 지정하지 않으면 안 된다. 왜냐하면, 이 경우에도 PCI 디바이스의 설정을 BIOS로 하게 하고 싶기 때문이다. BIOS가 ISA 디바이스의 설정을 할 수 있을지도 모르지만 가, isapnp는 그것을 다시 재설정 한다

/etc/isapnp.conf 에서 사용되고 있는 용어가 처음에는 이상하게 생각될지도 모른다. 예를 들면, I/O 어드레스 0x3e8를 표현하는데, "(IO 0 (BASE 0x3e8))" 을 보았을 수 있다. "IO 0" 라는 것은, 이것이 디바이스가 사용하는 최초의 (0 번째의) I/O 어드레스 영역이라는 의미다. 이것을 표현하는 다른 방법으로는 "IO[0] = 0x3e8" 가 있지만, isapnp는 이 방법을 사용하지 않는다. "IO 1" 는, 이것이 이 디바이스가 사용하는 2 번째의 I/O 어드레스 영역이라는 의미다. 이하도 같다. "INT 0" 도 같은 의미이지만, IRQ(인터럽트)에 대해 용이하다. 1 개의 카드가 복수의 물리 디바이스를 갖는 것도 있지만, 상기의 설 명은 이들 디바이스 중 1개에만 해당한다.

5.5 PCI Utilities

새로운 패키지인 PCI Utilities (=pciutils, 잘못해 "pcitools" 로 불리우는 것도 있다. )는 PCI 버스의 PnP 설정을 수동으로 할 수 있도록 한다. "lspci" 는 버스 자원을 리스트 표시하고, "setpci" 는 하드웨어 디바이스의 자원 할당을 설정 한다. setpci는 주요한 스크립트로 사용되는 것을 상정하고 있는 것이다. 현시점에서 이것을 이용하기에는 PCI 설정 레지스터를 상세하게 이해하고 있을 필요가 있지만, 그 점에 관해서, 이 문서와 setpci의 메뉴얼에서는 자세하게 설명되어 있지 않다.

5.6 Linux PnP를 만들기 위한 커널을 패치하여 주시오.

David Howells 씨는 "Linux Kernel Configuration/Resource Manager" 라고 불리운다. Linux 커넬을 PnP 대응으로 하기 위한 패치를 작성했다. ("Hardware Configuration Manager" 라고 불리우는 것도 있다 ). 1999 년말 의 시점에서는, 이 패치를 그의 페이지로부터 입수할 수 없었다. 아마도 , 최근 버젼의 커넬에 대해서 사용할 수 있는 패치는 없을 것이다.

사전의 패치에 대해서는, 패치를 하여 얻어지는 커넬은 안정되어 있다고 저자는 주장하고 있었지만, 버그가 몇개 보고 되어 있다. 이 패치에 는, 시리얼 포트를 취급하는 방법을 설명하는 serial.txt 등의 문서가 추가되어 있다. 이 패치를 하면 /proc 디렉토리에 「파일」이 만들어진다. 이들 파일에서 현재 상황을 조사하고, 이들 파일에 명령어를 보내는 것에 의해 설정을 바꾸는 것도 할 수 있다. 그러나, 문제가 한가지 있다. 디바이스 드라이버의 다수는 이 패치를 상정하고 있지 않기 때문에, 설정 을 하기 위해서는 지금까지 전통적인 설정 파일등을 사용 해야만한다. 이 패치의 WWW 페이지는 www.astarte.free-online.co.uk이다.

5.7 Windows 에 의한 설정

Windows9x (또는 Windows 2k)가 Linux와 같이 PC에 들어 있으면, 단순히 Windows를 시작해서 PnP를 설정 하시오. 그 후, Windows(또는 DOS)로부터 Linux를 시작 한다. Windows가 PCI 디바이스 레지스터로부터 IRQ 를 제거해 버리는 것이 보고 되고 있다. 이 경우에 Linux는 0 인 IRQ가 검출되었다고 에러를 출력한다. 따라서, 이 분법은 사용할 수 없을지도 모른다.

5.8 디바이스 드라이버에 의한 설정

몇개의 드라이버는, PnP의 방법을 사용해 하드웨어 내에 버스 자원을 설정하지만, 이것은 그 드라이버가 제어되는 디바이스에 대한것 뿐이다. 드라이버가 설정을 끝내 이후, 드라이버는 분명하게 설정을 알고 있으므로, 사용자는 이 정보를 드라이버에게 알릴 필요는 없다.

이 방법에 동반되는 문제는 설정의 중복이다. 이 정보 모두를 드라이버에 내장시키는 것은 어렵다. 그리고, 드라이버는 다른 디바이스가 필요로 하고 있는 버스 자원을 잡아 챌지도 모른다. 이것에 의해 사용자의 설정은 간단하게 되지만, PnP 대응 Linux 커넬을 사용하는 방법이 좀 더 좋을 것이다. 자세한 것은 ``Linux에서 PnP를 능숙하게 대처해야 할 필요성'' 을 보시오.

5.9 PnP 에 관련하는 소프트웨어와 문서


다음 이전 차례