PCICONF(8)

명칭
pciconf - PCI 버스를 위한 진단 유틸리티

서식
pciconf -l [-v] pciconf -a selector pciconf -r [-b | -h] selector addr[:addr2] pciconf -w [-b | -h] selector addr value

해설
pciconf 유틸리티는, /dev/pci 의 ioctl(2) 인터페이스에 의해 제공되고 있는 기능에의 명령행 인터페이스를 제공합니다. -l 옵션을 붙이면(자), 부트시의 프로브에 의해 발견된 모든 디바이스를 이하의 서식에서 표시합니다:

    foo0@pci0:4:0: class=0x010000 card=0x00000000 chip=0x000f1000 rev=0x01 hdr=0x00
    bar0@pci0:5:0: class=0x000100 card=0x00000000 chip=0x88c15333 rev=0x00 hdr=0x00
    none0@pci0:6:0: class=0x020000 card=0x00000000 chip=0x802910ec rev=0x00 hdr=0x00

-v 옵션을 지정하면(자), pciconf (은)는 vender/디바이스 정보를 데이타베이스로부터의 독해를 시도해 각 디바이스에 대해서 vender, 디바이스, 클래스, 서브 클래스의 식별 캐릭터 라인을 표시합니다.

최초의 란은, 디바이스명, 유니트 번호, 실렉터 (을)를 표시합니다. 대상의 PCI 디바이스에 관해서, 커널내의 디바이스의 설정이 이루어지지 않은 경우, 디바이스명은 “none” (이)가 됩니다. 설정되어 있지 않은 디바이스의 유니트 번호는 0 으로부터 개시해, 설정되어 있지 않은 디바이스를 만날 때로 늘려집니다. 실렉터 (은)는, 이 명령의 다른 서식에서 직접 사용할 수 있는 것 같은 형태로 표시됩니다. 2 번째의 란은 클래스 코드로, 2 자리수의 16 진수로 나타내지는 클래스 바이트와 서브 클래스 바이트, 인터페이스 아르바이트로부터 됩니다. 3 번째의 란은 PCI 표준의 리버젼 2.1 으로 도입된 서브 vender ID 레지스터의 내용입니다. 오늘의 대부분의 PCI 카드 (2.0)로는 이것은 0 이 됩니다만, 새롭게 개발되었다 PCI 카드로는 그 카드 고유의 식별 코드 (unique card identification code)가 넣을 수 있습니다. 이 값은 상위 2 바이트의 카드 ID 와 하위 2 바이트의 카드 vender ID 로부터 구성됩니다.

4 번째의 란에는 이 카드가 어느 칩에 근거하고 있는지 식별한다 칩 디바이스 ID 가 포함됩니다. 이 값은 상기와 같게 두 개의 필드로 나눌 수 있어 칩과 vender를 식별합니다. 5 번째의 란은 칩의 리버젼을 표시합니다. 6 번째의 란은 헤더 타입을 나타냅니다. 현재 할당할 수 있고 있는 헤더 타입은 PCI - PCI 브릿지의 칩이 1 이 되는 이외는 모두 0 이 됩니다. 헤더 타입 레지스터가 0 이 되고 있다 PCI 디바이스의 최상정도 비트가 세트 되고 있으면(자), 그 디바이스는 다기능 (multi-function) 디바이스이며, 하나의 칩에 몇개의 (닮은 것일지도 모르고, 완전히 다른 것일까도 모른다) 기능을 갖추고 있습니다.

-l 옵션은 root 가 아닌 유저가 사용할 수 있는 유일한 것입니다. pciconf (을)를 다른 방법으로 실행하려면 pcibus:device (옵션으로 :function 하지만 계속됩니다)라고 하는 형식에서 실렉터 (을)를 지정할 필요가 있습니다. 마지막에 코론을 붙여도 상관하지 않습니다만 무시되기 때문에, pciconf -l 의 출력의 최초의 란을 그대로 사용할 수가 있습니다. 모든 번호는 10 진수로 나타냅니다.

-a 플래그를 붙이면(자), selector 그리고 식별한 디바이스에 하등의 드라이버를 할당할 수 있고 있을까를, pciconf (은)는 판정합니다. 종료 상태 0 은 디바이스가 드라이버를 가지는 것을 의미합니다; 비 0 은 디바이스가 드라이버를 가지지 않는 것을 의미합니다.

-r 옵션은 디바이스 selector 의 바이트 오프셋(offset) addr 의 곳의 배치 스페이스 레지스터 (configuration space register)(을)를 읽어내, 그 값을 16 진수로 표시합니다. 생략 가능한 제 2 주소 addr2 (은)는, 읽어내는 범위를 지정합니다. -w 옵션은 디바이스 selector 의 바이트 오프셋(offset) addr 의 곳의 배치 스페이스 레지스터에 value (을)를 기입합니다. 이 두 개의 옵션에서는, -b 플래그와 -h 플래그로 읽고 쓰기의 크기를 지정할 수 있습니다. -b (은)는 1 바이트의 읽고 쓰기를 실시해, -h (은)는 2 바이트 (halfword)의 읽고 쓰기를 실시합니다. 읽고 쓰기의 크기의 디폴트는 4 바이트 (longword)입니다.

환경 변수
통상, PCI vender/디바이스의 정보 데이타베이스는, /usr/share/misc/pci_vendors (으)로부터 읽힙니다. 환경 변수 PCICONF_VENDOR_DATABASE (을)를 설정하는 것으로써, 이 패스를 변경 가능합니다.

관련 항목
ioctl(2), kldload(8)

역사
pciconf 유틸리티는 FreeBSD 2.2 그리고 처음으로 등장했습니다. -a 옵션은 PCI KLD 서포트를 위해서(때문에) FreeBSD 3.0 그리고 추가되었습니다.

저자
-nosplit pciconf 유틸리티는 Stefan Esser (와)과 Garrett Wollman 에 의해 쓰여졌습니다.

버그
-b 옵션과 -h 옵션은 pciconf 의 내부에서 실장되고 있어 ioctl(2) 에 근거하고 있는 것은 아닙니다.

root 가 아닌 유저가 -a 옵션과 -r 옵션을 사용하는 것을 허가하는 것은 유용할지도 모릅니다만, KLD 드라이버로 디바이스를 공급하기 위해서 kldload (을)를 실행할 수 있는 것은 root 만이지요 해, 일부의 투박한 PCI 칩에서는 배치 스페이스 레지스터의 읽기가 고장을 일으키는 경우가 있습니다.