공급업체 ID(VID) 0123
와 제품 ID(PID)가 abcd
.
0123:abcd
~에 따르면usb.org, 제품 ID 할당은 전적으로 제조업체에 따라 다릅니다.
제품 ID(PID)는 각 공급업체가 적절하다고 판단하는 대로 할당됩니다.
따라서 잘못된 공급업체가 서로 다른 드라이버를 요구하고 모두 동일한 공급업체 및 제품 ID를 사용하는 다양한 USB 장치를 판매하는 것을 막을 방법은 없습니다.
USB Device A (needs driver X) -> 0123:abcd
USB Device B (needs driver Y) -> 0123:abcd
USB Device C (needs driver Z) -> 0123:abcd
USB.org는 이러한 잠재적인 공급업체 행동으로 인해 문제가 발생할 수 있음을 인정합니다.
중복된 번호로 인해 드라이버 오류가 발생할 수 있습니다.
다른 드라이버가 필요한 카드에 ID가 재사용되는 경우 OS가 적절한 드라이버를 결정하기 위해 할 수 있는 작업이 있습니까?
적절한 드라이버를 추론하는 데 사용할 수 있는(또는 일반적으로 사용되는) USB 장치에 대한 다른 필드가 있습니까? 그래요가설이 결정을 내리는 데는 공급업체 ID와 제품 ID만 사용됩니다.
0123:abcd
또는 일반적인 *nix 시스템은 사용해야 하는 드라이버와 일대일 관계를 가정하므로 할 수 있는 일은 드라이버를 선택하는 것뿐입니다.1운전자는 그것이 적절하다고 생각합니까?
일반적으로 공급업체 ID와 제품 ID만 사용한다면 올바른 드라이버를 로드하기 위해 사용자가 수동으로 개입하는 것 외에는 할 일이 별로 없을 것으로 추측됩니다.
답변1
장치 드라이버를 선택하는 데 사용할 수 있는 몇 가지 추가 정보가 있습니다: 버전 번호, 장치 클래스, 하위 클래스 및 프로토콜, 인터페이스 클래스, 하위 클래스 및 프로토콜. (Linux의 드라이버에 대해서는 다음을 확인하십시오.USB_DEVICE
매크로. 출력을 통해 어떤 정보가 사용 가능한지 확인할 수 있습니다 lsusb -v
. )
예상한 대로 이것만으로는 충분하지 않으므로 커널은 실제로 장치용 드라이버를 등록하기 전에 드라이버에서 프로브 기능을 호출합니다. 이 함수는 드라이버가 실제로 장치를 지원하는지 여부를 확인합니다. 일반적으로 Linux에서는 ID는 동일하지만 구현이 다른 장치는 동일한 드라이버에 의해 처리되므로 여러 드라이버를 하나의 장치에 매핑하지 않습니다. 이 규칙에 대한 예외를 보려면 다음을 실행하세요.
find /lib/modules/$(uname -r) -name \*.ko\* | xargs /sbin/modinfo | awk '/^filename:/ { filename = $2 } /^alias:/ { printf "%s %s\n", filename,$2 }' | sort | uniq -D -f 1 | uniq -u | less
그러면 충돌하는 ID와 일치하는 여러 드라이버가 나열됩니다(둘 중 USB 장치 드라이버는 아님).