USB 드라이버 스택 아키텍처

이 항목에서는 USB(범용 직렬 버스) 드라이버 스택 아키텍처에 대해 개략적으로 설명합니다.

다음 그림은 Windows 8에 대한 USB 드라이버 스택의 아키텍처 블록 다이어그램을 보여 줍니다. 이 다이어그램은 USB 2.0 및 USB 3.0에 대한 개별 USB 드라이버 스택을 보여 줍니다. 장치가 xHCI 컨트롤러에 연결되면 Windows에서 USB 3.0 드라이버 스택을 로드합니다. USB 3.0 스택은 Windows 8에서 새로 도입되었습니다.

Windows는 eHCI, oHCI 또는 uHCI 컨트롤러에 연결된 장치에 대한 USB 2.0 드라이버 스택을 로드합니다. USB 2.0 드라이버 스택은 Windows XP SP1(서비스 팩 1) 및 그 이후 버전의 Windows 운영 체제에 함께 제공됩니다.

USB 2.0 및 3.0 드라이버 스택의 아키텍처 블록 다이어그램

USB 3.0 드라이버 스택

USB 3.0 스택은 Windows 8에서 새로 도입되었습니다. Microsoft는 KMDF(커널 모드 드라이버 프레임워크) 인터페이스를 사용하여 새 드라이버를 만들었습니다. KMDF 드라이버 모델은 복잡성을 줄여 주고 안정성을 개선합니다.

USB 3.0 호스트 컨트롤러 드라이버(Usbxhci.sys)

xHCI 드라이버는 USB 3.0 호스트 컨트롤러 드라이버입니다. xHCI 드라이버의 주요 작업에는 xHCI 컨트롤러 하드웨어에 대한 MMIO 레지스터 및 호스트 메모리 기반 데이터 구조 초기화, 상위 계층 드라이버에서 전송 요청 블록으로 전송 요청 매핑 및 하드웨어에 요청 제출이 포함됩니다. 전송을 완료한 후에 드라이버는 하드웨어에서 전송 완료 이벤트를 처리하고 이벤트를 드라이버 스택까지 전파합니다. 또한 xHCI 컨트롤러 장치 슬롯과 끝점 컨텍스트를 제어합니다.

xHCI 드라이버는 Windows 8에서 새로 도입되었으며 이전 버전의 운영 체제에서 제공되었던 eHCI 미니포트 드라이버의 확장 버전이 아닙니다. 이 새 드라이버는 KMDF(커널 모드 드라이버 프레임워크) 인터페이스를 사용하여 작성되었으며 모든 컨트롤러 전원 관리 및 PnP 이벤트에 KMDF를 사용합니다. Windows는 호스트 컨트롤러에 대한 장치 스택에서 FDO(기능 장치 개체)로 xHCI 드라이버를 로드합니다.

USB 호스트 컨트롤러 확장(Ucx01000.sys)

USB 호스트 컨트롤러 확장 드라이버(KMDF의 확장)는 기본 클래스별 호스트 컨트롤러 드라이버(예: xHCI 드라이버)의 새 확장입니다. 이 새 드라이버는 확장 가능하며 이후에 개발될 것으로 예상되는 다른 유형의 호스트 컨트롤러 드라이버를 지원하도록 고안되었습니다. USB 호스트 컨트롤러 확장은 허브 드라이버의 공용 추상화된 인터페이스 역할을 하며, 호스트 컨트롤러 드라이버에 대한 요청을 큐에 넣는 일반 메커니즘을 제공하고, 일부 선택된 기능을 재정의합니다. 상위 드라이버에 의해 시작된 모든 I/O 요청은 xHCI 드라이버 전에 호스트 컨트롤러 확장 드라이버에 도달합니다. I/O 요청을 받은 호스트 컨트롤러 확장은 요청의 유효성을 검사한 다음 대상 끝점과 연결된 적절한 KMDF 큐로 요청을 전달합니다. xHCI 드라이버는 처리할 준비가 되면 큐에서 요청을 검색합니다. USB 호스트 컨트롤러 확장 드라이버의 주요 작업은 다음과 같습니다.

  • xHCI 드라이버에 USB별 개체를 제공합니다.
  • xHCI 드라이버에 KMDF 이벤트 콜백 루틴을 제공합니다.
  • 호스트 컨트롤러와 연결된 루트 허브의 작업을 관리하고 제어합니다.
  • 클라이언트 드라이버를 통해 구성 가능한 기능(예: 체인 MDL, 스트림 등)을 구현합니다.

USB 허브 드라이버(Usbhub3.sys)

3.0 장치에 대한 USB 드라이버 스택의 새 허브 드라이버는 KMDF 드라이버 모델을 사용합니다. 허브 드라이버가 주로 수행하는 작업은 다음과 같습니다.

  • USB 허브와 해당 포트를 관리합니다.
  • 장치 및 해당 다운스트림 포트에 연결된 기타 허브를 열거합니다.
  • 열거된 장치 및 허브에 대한 PDO(실제 장치 개체)를 만듭니다.

Windows는 허브 장치 스택에서 FDO로 허브 드라이버를 로드합니다. 새 드라이버의 장치 열거 및 허브 관리는 일련의 상태 컴퓨터를 통해 구현됩니다. 허브 드라이버는 전원 관리 및 PnP 기능을 위해 KMDF를 사용합니다. 허브 관리 외에도 허브 드라이버는 USB 클라이언트 드라이버 계층에서 보낸 일부 요청의 예비 검사 및 처리를 수행합니다. 예를 들어 허브 드라이버는 구성 선택 요청의 구문을 분석하여 요청에 의해 구성될 끝점을 확인합니다. 정보를 구문 분석한 후에 허브 드라이버는 이후 처리를 위해 요청을 USB 호스트 컨트롤러 확장에 제출합니다.

USB 2.0 드라이버 스택

Windows는 eHCI, oHCI 또는 uHCI 컨트롤러에 연결된 장치에 대한 USB 2.0 드라이버 스택을 로드합니다. USB 2.0 드라이버 스택의 드라이버는 Windows XP SP1 및 그 이후 버전의 Windows 운영 체제에 함께 제공됩니다. USB 2.0 드라이버 스택은 USB 2.0 사양에 정의된 대로 HS(High Speed) USB 장치를 사용할 수 있도록 고안되었습니다.

USB 드라이버 스택의 맨 아래에는 호스트 컨트롤러 드라이버가 있습니다. 이 드라이버는 포트 드라이버인 Usbport.sys 및 동시에 실행되는 세 개의 미니포트 드라이버 중 하나 이상으로 구성되어 있습니다. 시스템에서 호스트 컨트롤러 하드웨어를 검색하면 이러한 미니포트 드라이버 중 하나를 로드합니다. 미니포트 드라이버는 로드된 후에 포트 드라이버인 Usbport.sys를 로드합니다. 포트 드라이버는 특정 프로토콜과 관계 없는 호스트 컨트롤러 드라이버의 작업을 처리합니다.

Usbuhci.sys(범용 호스트 컨트롤러 인터페이스) 미니포트 드라이버는 Windows 2000에서 제공되었던 Uhcd.sys 미니클래스 드라이버를 대체합니다. Usbohci.sys(개방형 호스트 컨트롤러 인터페이스) 미니포트 드라이버는 Openhci.sys를 대체합니다. Usbehci.sys 미니포트 드라이버는 HS(High Speed) USB 장치를 지원하며 Windows XP SP1 이상 및 Windows Server 2003 이상 운영 체제에서 도입되었습니다.

USB 2.0을 지원하는 모든 버전의 Windows에서 운영 체제는 USB 1.1 및 USB 2.0 호스트 컨트롤러를 동시에 관리할 수 있습니다. 운영 체제는 두 유형의 컨트롤러가 모두 있다는 것을 감지할 때마다 각 호스트 컨트롤러를 위한 두 개의 개별 장치 노드를 만듭니다. 그다음에 Windows는 USB 2.0 규격의 호스트 컨트롤러 하드웨어를 위한 Usbehci.sys 미니포트 드라이버를 로드하고, 시스템 구성에 따라 USB 1.1 규격의 하드웨어를 위한 Usbohci.sys 또는 Openhci.sys를 로드합니다.

포트 드라이버 위에는 USB 버스 드라이버인 Usbhub.sys(허브 드라이버라고도 함)가 있습니다. 이 드라이버는 시스템의 각 허브에 대한 장치 드라이버입니다.

USB 공용 클래스 Generic Parent Driver(Usbccgp.sys)

USB 공용 클래스 Generic Parent Driver는 복합 장치를 위해 Microsoft가 제공하는 부모 드라이버입니다. 장치 설명자에서 deviceClass가 0 또는 0xef이고 numInterfaces가 1보다 큰 경우 허브 드라이버는 부모 복합 드라이버를 열거하고 로드합니다. 허브 드라이버는 부모 복합 드라이버의 호환 가능 ID를 "USB\COMPOSITE"로 생성합니다. Usbccgp.sys는 WDM(Windows Driver Model) 루틴을 사용합니다.

부모 복합 드라이버는 복합 장치의 모든 기능을 열거하고 각 기능에 대해 PDO를 만듭니다. 그러면 장치의 각 기능에 대해 적절한 클래스 또는 클라이언트 드라이버가 로드됩니다. 각 기능 드라이버(자식 PDO)는 요청을 부모 드라이버로 보내고, 부모 드라이버는 이 요청을 USB 허브 드라이버에 제출합니다.

Usbccgp.sys는 Windows XP SP1 및 그 이후 버전의 Windows 운영 체제에 포함되어 있습니다. Windows 8에서 이 드라이버는 USB 3.0 사양에 정의된 대로 기능 일시 중단 및 원격 절전 모드 해제 기능을 구현하도록 업데이트되었습니다.

자세한 내용은 USB Generic Parent Driver(Usbccgp.sys)를 참조하세요.

WinUSB(Winusb.sys)

WinUSB(Windows USB)는 USB 장치를 위해 Microsoft에서 제공하는 일반 드라이버입니다. WinUSB 아키텍처는 커널 모드 드라이버(Winusb.sys) 및 사용자 모드 동적 연결 라이브러리(Winusb.dll)로 구성되어 있습니다. 사용자 지정 기능 드라이버가 필요하지 않은 장치의 경우 장치의 커널 모드 스택에 기능 드라이버로 Winusb.sys를 설치할 수 있습니다. 그런 다음 사용자 모드 프로세스는 일련의 장치 I/O 제어 요청을 사용하거나 WinUsb_Xxx 함수를 호출하여 Winusb.sys와 통신할 수 있습니다. 자세한 내용은 WinUSB를 참조하세요.

Windows 8에서 WinUSB에 대해 Microsoft가 제공하는 정보(INF) 파일인 Winusb.inf에는 장치 식별자 문자열로 USB\MS_COMP_WINUSB가 포함되어 있습니다. 따라서 Winusb.sys를 MS OS 설명자에 일치하는 WinUSB 호환 가능 ID가 있는 장치에 대한 기능 드라이버로 자동으로 로드할 수 있습니다. 이러한 장치를 WinUSB 장치라고 합니다. 하드웨어 제조업체는 최종 사용자의 드라이버 설치 프로세스를 더 간소화하기 위해 WinUSB 장치에 대한 INF 파일을 배포하지 않아도 됩니다. 자세한 내용은 WinUSB 장치를 참조하세요.

USB 클라이언트 드라이버

복합 또는 비복합 장치를 포함한 각 USB 장치는 클라이언트 드라이버에서 관리합니다. USB 클라이언트 드라이버는 USB 드라이버 스택의 클라이언트인 클래스 또는 장치 드라이버입니다. 이러한 드라이버에는 Microsoft 또는 타사 공급업체의 클래스 및 장치별 드라이버가 포함됩니다. Microsoft에서 제공하는 클래스 드라이버 목록을 보려면 지원되는 USB 장치 클래스의 드라이버를 참조하세요 클라이언트 드라이버는 USB 드라이버 스택에 의해 노출된 공용 인터페이스를 호출하여 장치와 통신하려는 요청을 만듭니다.

복합 장치의 클라이언트 드라이버와 비복합 장치의 클라이언트 드라이버는 드라이버 스택에서의 위치를 제외하고는 모두 같습니다.

비복합 장치의 클라이언트 드라이버는 허브 드라이버 바로 위 계층에 있습니다.

여러 기능을 노출하고 부모 클래스 드라이버가 없는 복합 USB 장치의 경우 Windows는 허브 드라이버와 클라이언트 드라이버 계층 사이에 USB Generic Parent Driver(Usbccgp.sys)를 로드합니다. 부모 드라이버는 복합 장치의 각 기능에 대해 개별 PDO를 만듭니다. 클라이언트 드라이버(기능의 FDO)는 Generic Parent Driver 위에 로드됩니다. 공급업체는 각 기능에 대해 개별 클라이언트 드라이버를 제공하도록 선택할 수도 있습니다.

USB 클라이언트 드라이버는 드라이버의 요구 사항에 따라 사용자 모드 또는 커널 모드로 실행될 수 있습니다. USB 클라이언트 드라이버는 KMDF, UMDF 또는 WDM 루틴을 사용하여 작성할 수 있습니다.

클라이언트 드라이버의 도우미 라이브러리

Microsoft는 커널 모드 드라이버 및 응용 프로그램이 USB 드라이버 스택과 통신하는 데 도움이 되는 다음과 같은 도우미 라이브러리를 제공합니다.

  • Usbd.sys

    Microsoft는 USB 클라이언트 드라이버에 대한 루틴을 내보내는 Usbd.sys 라이브러리를 제공합니다. 도우미 루틴은 클라이언트 드라이버의 운영 작업을 간소화합니다. 예를 들어 USB 클라이언트 드라이버는 도우미 루틴을 사용하여 구성을 선택하는 등의 일부 특정 작업에 대한 URB(USB 요청 블록)를 작성하고 이러한 URB를 USB 드라이버 스택에 제출할 수 있습니다.

  • Usbdex.lib

    이 도우미 라이브러리는 Windows 8에서 새로 도입되었습니다. 이 라이브러리는 주로 URB를 할당하고 작성하기 위한 루틴을 내보냅니다. 이러한 루틴은 Usbd.sys에서 내보내는 일부 레거시 루틴을 대체합니다. 새 루틴을 사용하려면 클라이언트 드라이버를 USB 드라이버 스택에 등록하여 등록에 대한 핸들을 유지 관리해야 합니다. 이 핸들은 다른 Usbdex.lib 루틴에 대한 호출에 사용됩니다. 새 루틴에서 할당한 일부 URB에는 추적 및 처리 개선을 위해 USB 드라이버가 사용하는 URB 컨텍스트가 있습니다. 자세한 내용은 URB 할당 및 작성을 참조하세요.

  • Winusb.dll

    Winusb.dll은 커널 모드에서 장치의 기능 드라이버로 로드되는 Winusb.sys와 통신하기 위해 WinUSB 기능을 노출하는 사용자 모드 DLL입니다. 응용 프로그램은 이러한 기능을 사용하여 장치를 구성하고 장치에 대한 정보를 검색하고 I/O 작업을 수행합니다. 이러한 기능을 사용하는 방법에 대한 자세한 내용은 WinUSB 함수를 사용하여 USB 장치에 액세스하는 방법을 참조하세요.

관련 항목

USB(범용 직렬 버스) 드라이버
USB 드라이버 개발 가이드

 

 

표시:
© 2014 Microsoft