6P by neo with xguru 4달전 | favorite | 댓글 1개

안드로이드 개발자들이 더 이상 윈도우 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 기능 디스크립터의 도입으로 사용자 경험이 크게 개선되었음.
  • 이러한 변화는 안드로이드 개발자들에게 편의성을 제공하고, 개발 환경의 접근성을 높이는 데 기여함.
Hacker News 의견
  • 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에서 잘 작동함.
    • 모든 요구 사항에 적합하지는 않지만 특정 경우에는 잘 맞음.