USB 호스트 컨트롤러용 Windows 드라이버 개발 개요
이 문서에서는 Microsoft에서 제공하는 UCX(USB 호스트 컨트롤러 확장)와 통신하는 USB(유니버설 직렬 버스) 호스트 컨트롤러 드라이버를 개발하기 위한 Windows 운영 체제의 지원에 대해 설명합니다.
사양을 준수하지 않는 xHCI 호스트 컨트롤러를 개발하거나 사용자 지정 비 xHCI 하드웨어(예: 가상 호스트 컨트롤러)를 개발하는 경우 UCX와 통신하는 호스트 컨트롤러 드라이버를 작성할 수 있습니다. 예를 들어 USB 장치를 지원하는 무선 도크를 고려해 보세요. PC는 전송으로 TCP를 통해 USB를 사용하여 무선 도크를 통해 USB 장치와 통신합니다.
USB 호스트 컨트롤러 확장(UCX)
USB 호스트 컨트롤러 확장은 시스템 제공 드라이버(Ucx01000.sys)입니다. 이 드라이버는 Windows 드라이버 프레임워크 프로그래밍 인터페이스를 사용하여 프레임워크 클래스 확장으로 구현됩니다. 호스트 컨트롤러 드라이버는 해당 클래스 확장에 대한 클라이언트 드라이버 역할을 합니다. 호스트 컨트롤러 드라이버가 하드웨어 작업 및 이벤트, 전원 관리 및 PnP 이벤트를 처리하는 동안 UCX는 호스트 컨트롤러 드라이버에 대한 요청을 큐에 대기하고 다른 작업을 수행하는 추상화된 인터페이스 역할을 합니다.
UCX는 Windows의 USB 호스트 쪽 드라이버 중 하나입니다. 호스트 컨트롤러 디바이스 스택에서 FDO로 로드됩니다.
USB 호스트 컨트롤러 드라이버
UCX는 확장 가능하며 다양한 호스트 컨트롤러 드라이버를 지원하도록 설계되었습니다. Windows는 USB xHCI 호스트 컨트롤러를 대상으로 하는 xHCI 드라이버(Usbxhci.sys)를 제공합니다.
호스트 컨트롤러 드라이버는 KMDF( 커널 모드 드라이버 프레임워크 ) 드라이버로 작성된 UCX의 클라이언트입니다.
Microsoft에서 제공하는 이진 파일
호스트 컨트롤러 드라이버를 작성하려면 UCX(Ucx01000.sys) 및 스텁 라이브러리(Ucx01000.lib)가 필요합니다. 스텁 라이브러리는 WDK(Windows 드라이버 키트)에 있습니다. 라이브러리는 두 기본 함수를 수행합니다.
- 호스트 컨트롤러 드라이버에서 수행한 호출을 변환하고 UCX에 전달합니다.
- 버전 관리를 지원합니다. 호스트 컨트롤러 드라이버는 UCX가 호스트 컨트롤러 드라이버와 동일한 주 버전 번호와 호스트 컨트롤러 드라이버와 동일하거나 더 높은 부 버전 번호를 갖는 경우에만 UCX에서 작동합니다.
개발 도구
WDK에는 헤더, 라이브러리, 도구 및 샘플과 같은 드라이버 개발에 필요한 리소스가 포함되어 있습니다.
시작
아키텍처의 다양한 구성 요소(디바이스, 호스트 컨트롤러 및 허브)의 예상 동작을 설명하는 공식 사양을 읽어보세요.
UCX 아키텍처 이해
Microsoft에서 제공하는 USB 드라이버 스택에 익숙해지세요.
UCX 개체 및 핸들 숙지
UCX는 WDF 개체 기능을 확장하여 자체 USB 관련 UCX 개체를 정의합니다. WDF 개체에 대한 자세한 내용은 프레임워크 개체 소개를 참조하세요.
기본 호스트 컨트롤러 드라이버에 대한 요청을 큐에 대기하기 위해 UCX는 이러한 개체를 사용합니다. 자세한 내용은 호스트 컨트롤러 드라이버에서 사용하는 UCX 개체 및 핸들을 참조하세요.
UCX 개체 | Description |
---|---|
호스트 컨트롤러 개체(UCXCONTROLLER) | 호스트 컨트롤러 드라이버에서 만든 호스트 컨트롤러를 나타냅니다. 드라이버는 instance 호스트 컨트롤러당 하나의 호스트 컨트롤러 개체만 만들어야 합니다. 일반적으로 UcxControllerCreate 메서드를 호출하여 EVT_WDF_DRIVER_DEVICE_ADD 콜백 내에서 생성됩니다. |
루트 허브 개체(UCXROOTHUB) | 호스트 컨트롤러의 루트 포트 상태 가져오고 제어합니다. 일반적으로 호스트 컨트롤러 드라이버가 UcxRootHubCreate 메서드를 호출하여 EVT_WDF_DRIVER_DEVICE_ADD 콜백 내에서 만듭니다. |
USB 디바이스 개체(UCXUSBDEVICE) | 버스에 연결된 실제 USB 디바이스를 나타냅니다. 일반적으로 호스트 컨트롤러 드라이버가 **UcxUsbDeviceCreate 메서드를 호출하여 EVT_UCX_CONTROLLER_USBDEVICE_ADD 콜백 내에서 만듭니다. |
엔드포인트 개체(UCXENDPOINT) | USB 디바이스 개체의 엔드포인트를 나타냅니다. 일반적으로 호스트 컨트롤러 드라이버가 **UcxEndpointCreate 메서드를 호출하여 EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD 또는 EVT_UCX_USBDEVICE_ENDPOINT_ADD 콜백 내에서 만듭니다. |
Stream 개체(UCXSTREAMS) | 단일 대량 엔드포인트에서 디바이스에 대한 여러 파이프를 나타냅니다. 일반적으로 호스트 컨트롤러 드라이버가 UcxStaticStreamsCreate 메서드를 호출하여 EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD 콜백 내에서 만듭니다. |
설명서 섹션
UCX는 루트 허브와 관련된 대부분의 작업을 처리합니다. 이렇게 하면 USB 허브 드라이버가 일반 허브와 상호 작용하는 것과 동일한 방식으로 루트 허브와 상호 작용할 수 있습니다. 호스트 컨트롤러 드라이버는 콜백 함수를 등록할 수 있습니다.
UCX는 들어오는 USB 요청 블록(URL)을 심사한 다음 올바른 엔드포인트 큐로 전달합니다.
호스트 컨트롤러 드라이버는 엔드포인트와 연결된 큐의 UCX 관리 및 엔드포인트를 컨트롤러 하드웨어로 프로그래밍하는 역할을 합니다.
클라이언트 드라이버에서 사용하는 I/O 요청, 지원 루틴, 구조 및 인터페이스에 대한 사양을 제공합니다. 이러한 루틴 및 관련 데이터 구조는 WDK 헤더에 정의되어 있습니다.
UCX를 프레임워크 클래스 확장이라고 합니다.
호스트 컨트롤러 드라이버를 클라이언트 드라이버라고 합니다.