다음을 통해 공유


Windows의 USB 디바이스 쪽 드라이버

USB 함수 스택의 아키텍처를 설명합니다.

USB 디바이스에서 USB 함수 스택은 ACPI가 USB 디바이스 PDO(물리적 디바이스 개체)를 만들 때 플러그 앤 플레이 Manager에 의해 열거된 드라이버 그룹을 나타냅니다.

단일 구성 디바이스에서 USB 디바이스는 하나 이상의 인터페이스를 정의할 수 있습니다. 예를 들어 디바이스 간에 파일을 전송하기 위한 MTP(미디어 전송 프로토콜)입니다. 복합 USB 디바이스는 단일 구성에서 여러 인터페이스를 지원할 수 있습니다. USB 함수 스택은 각 인터페이스에 대한 PDO를 만들고 PnP Manager는 해당 인터페이스에 대한 FDO(함수 디바이스 개체)를 만드는 클래스 드라이버를 로드합니다.

USB 함수 스택은 다음 이미지에서 개념화됩니다.

usb 함수 스택.

애플리케이션 및 서비스

  • 모든 사용자 모드 요청은 Microsoft에서 제공하는 커널 모드 클래스 드라이버 GenericUSBFn.sys 전송됩니다. genericusbfnioctl.h에 정의된 대로 I/O 제어 코드(IOCTL)를 전송하여 GenericUSBFn.sys 통신하는 사용자 모드 서비스를 만들 수 있습니다. 이러한 IOCTL에 대한 자세한 내용은 사용자 모드 서비스에서 GenericUSBFn.sys 통신을 참조 하세요.

USB 함수 클래스 드라이버

USB 함수 클래스 드라이버는 USB 디바이스에서 특정 인터페이스(또는 인터페이스 그룹)의 기능을 구현합니다. MTP 및 IpOverUsb는 시스템 제공 클래스 드라이버의 예입니다. 클래스 드라이버는 커널 모드 드라이버로만 구현되거나 시스템 제공 클래스 드라이버 GenericUSBFn.sys 쌍을 이루는 사용자 모드 서비스일 수 있습니다.

함수 클래스 드라이버는 USB 함수 클래스 드라이버를 사용하여 컨트롤러에 요청을 UFX 프로그래밍 인터페이스로 보냅니다.

USB 함수 클래스 확장(UFX)

UFX(USB 함수 클래스 확장)는 KMDF(커널 모드 드라이버 프레임워크)에 대한 시스템 제공 확장입니다. USB는 표준 버스이며 몇 가지 필수 기능과 기능이 있습니다. UFX는 모든 USB 함수 컨트롤러에 공통적인 USB 함수 논리를 구현하고 USB 함수 클래스 드라이버에서 요청을 처리 및/또는 디스패치하는 작업을 담당합니다. 특히 UFX는 디바이스를 열거하고 표준 제어 전송을 처리하는 프로세스를 처리합니다. 이러한 작업 중 일부를 수행하려면 UFX에서 버스의 기능에 대해 알고 있어야 합니다. 이러한 기능은 클래스 확장 인터페이스가 설정되면 UFX에 보고됩니다.

UFX는 상위 계층(USB 함수 클래스 드라이버 및 사용자 모드 서비스)이 컨트롤러에 요청을 보내는 데 사용할 수 있는 표준 IOCTL을 노출합니다. 또한 UFX는 호스트로부터 받은 표준 요청에 대해 상층부에 알립니다.

USB 함수 클라이언트 드라이버

UFX는 여러 컨트롤러에서 일관되게 작동하는 추상화된 인터페이스를 제공합니다. 그러나 컨트롤러에는 엔드포인트 수, 엔드포인트 유형, 저전력, 원격 절전 모드 해제와 같은 제한 사항이 있는 다양한 기능이 있습니다. 예를 들어 특정 컨트롤러는 DMA를 지원하지만 다른 컨트롤러는 지원하지 않습니다. 일부 컨트롤러는 하드웨어에서 스트림을 구현하는 반면 다른 컨트롤러는 드라이버가 스트림을 처리할 것으로 예상합니다. 이러한 이유로 일반적인 기능만 UFX에서 처리됩니다. 컨트롤러마다 다른 전송, 전원 관리, 스트림 지원 및 기타 기능은 클라이언트 드라이버에서 처리됩니다.

USB 함수 클라이언트 드라이버는 컨트롤러 관련 작업을 구현하는 역할을 담당합니다. 여기에는 엔드포인트 데이터 전송 구현, USB 디바이스 상태 변경(재설정, 일시 중단, 다시 시작), 연결/분리 감지, 포트/충전기 감지가 포함됩니다. 클라이언트 드라이버는 전원 관리 및 PnP 이벤트 처리도 담당합니다.

함수 클라이언트 드라이버는 USB 함수 클래스 드라이버를 사용하여 UFX 프로그래밍 인터페이스에 KMDF(커널 모드 드라이버 프레임워크) 드라이버로 작성됩니다.

Microsoft는 ChipIdea 및 Synopsys 컨트롤러에 대한 기본 함수 클라이언트 드라이버(UfxChipidea.sys, Ufxsynopsys.sys)를 제공합니다.

USB 하위 필터 드라이버

USB 하한 필터 드라이버는 함수 컨트롤러가 기본 제공 Synopsys 및 ChipIdea 드라이버를 사용하는 경우 충전기 감지를 지원합니다. 필터 드라이버는 USB 포트 검색부터 USB 충전을 관리합니다. 지원하는 각 충전기 유형에 대한 GUID와 해당 충전기의 속성 목록을 게시해야 합니다. 특정 충전기를 구성할 수 있는 경우 낮은 USB 필터 드라이버는 지원되는 PropertyID 목록과 충전기로 보낼 수 있는 해당 값 유형을 정의하여 충전기를 구성합니다. 또한 드라이버는 충전을 시작할 수 있을 때 배터리 스택에 알리고 장치가 그릴 수 있는 최대 전류 양도 알립니다. Synopsys 및 ChipIdea 드라이버 이외의 클라이언트 드라이버의 경우 클라이언트 드라이버에서 충전 논리를 구현할 수 있습니다.

함수 클래스 드라이버는 독점 충전기를 지원하기 위해 프로그래밍 인터페이스를 사용하여 UFX에 요청을 보냅니다.