안드로이드 개발자들이 더 이상 윈도우 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 기능 디스크립터의 도입으로 사용자 경험이 크게 개선되었음.
- 이러한 변화는 안드로이드 개발자들에게 편의성을 제공하고, 개발 환경의 접근성을 높이는 데 기여함.