# 안드로이드 개발자들이 더 이상 윈도우즈 USB 드라이버를 필요로 하지 않는 이유

> Clean Markdown view of GeekNews topic #12647. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=12647](https://news.hada.io/topic?id=12647)
- GeekNews Markdown: [https://news.hada.io/topic/12647.md](https://news.hada.io/topic/12647.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-01-02T10:15:18+09:00
- Updated: 2024-01-02T10:15:18+09:00
- Original source: [fabiensanglard.net](https://fabiensanglard.net/android_windows_driver/index.html)
- Points: 6
- Comments: 1

## Topic Body

### 안드로이드 개발자들이 더 이상 윈도우 USB 드라이버를 필요로 하지 않는 이유  
  
- 초기 안드로이드 플랫폼에서 개발자들은 리눅스나 맥 OS X에서 USB 케이블을 통해 장치를 연결할 수 있었으나, 윈도우 사용자들은 드라이버를 찾아 설치해야 했음.  
- 현재는 드라이버가 더 이상 필요하지 않음.  
  
### USB 드라이버/OS 101  
  
- USB 장치를 포트에 연결하면, 운영 체제는 USB 디스크립터 계층을 검사하여 인터페이스에 대한 드라이버를 로드해야 함.  
- 대부분의 USB 장치는 기본 제공되는 'Device Class' 드라이버로 자동으로  작동하도록 운영 체제에 포함되어 있음  
- 윈도우는 내장된 'Device Class' 드라이버를 찾을 수 없거나 더 나은 드라이버가 있으면 사용자가 설치한 드라이버를 로드함  
  
### 왜 안 됐었나  
  
- 드라이버를 찾을 수 없으면 리눅스는 usbfs를, 맥 OS는 IOKit을 로드하여 사용자 공간 프로그램이 장치에 접근할 수 있게 함.  
- 윈도우는 오류를 보고하고 드라이버를 로드하지 않아 안드로이드 장치에 접근할 수 없었음.  
  
### 안드로이드 드라이버로 작동한 이유  
  
- 드라이버가 설치될 때 발생하는 작업을 이해하기 위해 구글 USB 드라이버의 '뇌'인 android_winusb.inf를 검사함.  
- WinUSB는 리눅스의 usbfs와 맥 OS의 IOKit과 유사한 USB 드라이버로, 사용자 공간 프로그램이 인터페이스를 열거하고 엔드포인트로부터 읽고 쓸 수 있게 함.  
  
### 안드로이드 장치가 더 이상 윈도우 드라이버를 필요로 하지 않는 이유  
  
- 이전 방법에는 명백한 결함이 있었음. 안드로이드 장치의 VID/PID가 목록에 없으면 winusb가 로드되지 않음.  
- 윈도우 8은 INF 파일보다 더 나은 방법으로 인터페이스에 필요한 드라이버를 장치에 직접 요청함.  
- 장치가 Microsoft OS 디스크립터(MOD)와 호환되면, 윈도우는 확장된 호환 ID OS 기능 디스크립터를 요청함.  
- 이를 통해 winusb.sys가 로드되고, 사용자 공간 실행 파일인 adb가 장치를 열고 인터페이스를 요구하며 개발자가 작업을 시작할 수 있음  
  
### 어떤 장치들이 Microsoft OS 디스크립터를 지원하는가  
  
- 개인적으로 소유한 픽셀 장치들을 통해 MOD 지원이 픽셀 2(2017)와 픽셀 3a(2019) 사이에 시작된 것으로 보임  
  
### 확장된 속성 OS 기능 설명자  
  
- 픽셀 8과 같은 더 최근의 장치들은 확장된 속성 OS 기능 디스크립터를 가지고 있으며, 이는 GUID, 도움말 페이지, URL, 심지어 아이콘까지 포함할 수 있음.  
  
### GN⁺의 의견  
  
- 이 글의 가장 중요한 점은 안드로이드 장치가 이제 윈도우에서 별도의 드라이버 설치 없이도 개발에 사용될 수 있다는 것임.  
- Microsoft OS 디스크립터와 확장된 호환 ID OS 기능 디스크립터의 도입으로 사용자 경험이 크게 개선되었음.  
- 이러한 변화는 안드로이드 개발자들에게 편의성을 제공하고, 개발 환경의 접근성을 높이는 데 기여함.

## Comments



### Comment 21882

- Author: neo
- Created: 2024-01-02T10:15:18+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=38813917) 
- ADB(Android Debug Bridge)에 대한 사랑
  - ADB는 매우 유용한 도구로, VPN을 통한 포트 재라우팅도 가능하다.
  - 안드로이드 개발자가 아니어도 스위스 아미 나이프 같은 존재이며, 안드로이드를 선호하는 큰 이유 중 하나다.
  - 업무 프로필을 통해 업무 관련 자료와 개인 정보 침해 요소를 분리할 수 있어 두 번째 전화기가 필요 없음.

- Pixel 기기의 MOD(Modern Operating Devices) 지원 시작 시기
  - 개인적인 Pixel 컬렉션을 통해 Pixel 2(2017)와 Pixel 3a(2019) 사이에 MOD 지원이 시작된 것으로 보인다.
  - Pixel 3에도 적용되었을 것이며, Android 11을 지원하는 모든 CTS(Compatibility Test Suite)-준수 기기에 적용됨.
  - OEM은 USB HAL에서 간단한 값을 설정하여 CTS 테스트를 통과해야 함.

- Windows Precision Touchpad 드라이버
  - Bingxing Wang이 개발한 Apple MacBook/Magic Trackpad 2용 Windows Precision Touchpad 구현체에 대한 언급.

- ADB 드라이버의 발전
  - 과거에는 Windows가 새 기기마다 .inf 드라이버 파일을 설치해야 했으나, Windows 8 이후 버전부터는 기기가 Microsoft OS Descriptors를 통해 필요한 드라이버를 알려줌.
  - 이로 인해 사용자 경험이 개선되었으며, 개발자뿐만 아니라 더 나은 안드로이드 경험을 원하는 사용자에게도 중요함.

- Windows의 USB 드라이버 문제
  - Windows에서는 USB 드라이버가 혼란스럽고 때로 위험할 수 있음.
  - 일부 학생들이 Linux에서는 잘 작동하는 Arduino 클론을 Windows에서 사용할 수 없는 경우를 목격함.
  - Windows가 "가짜"로 판단되는 기기를 무력화시키는 드라이버를 자동 설치하는 문제가 있어, 저장 장치 외의 것을 Windows 기기에 연결하는 것은 마지막 수단으로 여겨짐.

- Microsoft 전용 USB 설명자 추가에 대한 비판
  - 폰 제조업체가 Microsoft 전용 USB 설명자를 추가해야 하는 것에 대한 비판.
  - Windows가 Linux나 macOS처럼 표준화된 사용자 공간 인터페이스로 대체하는 대신 Microsoft 전용 기능을 요구하는 것은 비합리적임.

- ADB 문제 해결 경험
  - 최근에 Lenovo M7을 사용하여 마법 거울 프로젝트를 진행하면서 ADB 문제에 직면함.
  - 관련 Stack Overflow 글을 모두 찾아보고 시도했지만 성공하지 못했으며, 이 문제가 해결되었다는 말을 듣고 의아함을 표함.

- HID 프로토콜 사용 경험
  - USB 연결 장치에서 raw HID 프로토콜을 사용했으며, 모든 버전의 Windows에서 잘 작동함.
  - 모든 요구 사항에 적합하지는 않지만 특정 경우에는 잘 맞음.
