6 คะแนน โดย GN⁺ 2024-01-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เหตุใดนักพัฒนา Android จึงไม่จำเป็นต้องใช้ไดรเวอร์ USB บน Windows อีกต่อไป

  • ในยุคแรกของแพลตฟอร์ม Android นักพัฒนาสามารถเชื่อมต่ออุปกรณ์ผ่านสาย USB บน Linux หรือ Mac OS X ได้ แต่ผู้ใช้ Windows ต้องค้นหาและติดตั้งไดรเวอร์เอง
  • ปัจจุบันไม่จำเป็นต้องใช้ไดรเวอร์อีกต่อไป

USB Driver/OS 101

  • เมื่อเชื่อมต่ออุปกรณ์ USB เข้ากับพอร์ต ระบบปฏิบัติการจะตรวจสอบลำดับชั้นของ USB descriptor เพื่อโหลดไดรเวอร์สำหรับอินเทอร์เฟซ
  • อุปกรณ์ USB ส่วนใหญ่รวมอยู่ในระบบปฏิบัติการให้ทำงานอัตโนมัติได้ด้วยไดรเวอร์ Device Class ที่มีมาให้
  • Windows จะโหลดไดรเวอร์ที่ผู้ใช้ติดตั้งไว้ หากไม่พบไดรเวอร์ Device Class แบบฝังในระบบหรือมีไดรเวอร์ที่ดีกว่า

ทำไมเมื่อก่อนถึงใช้ไม่ได้

  • หากหาไดรเวอร์ไม่พบ Linux จะโหลด usbfs และ Mac OS จะโหลด IOKit เพื่อให้โปรแกรมใน user space เข้าถึงอุปกรณ์ได้
  • แต่ Windows จะรายงานข้อผิดพลาดและไม่โหลดไดรเวอร์ ทำให้ไม่สามารถเข้าถึงอุปกรณ์ Android ได้

เหตุใดจึงใช้งานได้ด้วยไดรเวอร์ Android

  • เพื่อทำความเข้าใจว่าเกิดอะไรขึ้นเมื่อมีการติดตั้งไดรเวอร์ ผู้เขียนได้ตรวจสอบ android_winusb.inf ซึ่งเป็น “สมอง” ของ Google USB Driver
  • WinUSB เป็นไดรเวอร์ USB ที่คล้ายกับ usbfs ของ Linux และ IOKit ของ Mac OS โดยช่วยให้โปรแกรมใน user space สามารถ enumerate อินเทอร์เฟซ และอ่านเขียนข้อมูลจาก endpoint ได้

เหตุใดอุปกรณ์ Android จึงไม่ต้องใช้ไดรเวอร์ Windows อีกต่อไป

  • วิธีเดิมมีข้อบกพร่องชัดเจน หาก VID/PID ของอุปกรณ์ Android ไม่อยู่ในรายการ winusb จะไม่ถูกโหลด
  • Windows 8 มีวิธีที่ดีกว่าไฟล์ INF โดยจะร้องขอไดรเวอร์ที่อินเทอร์เฟซต้องการจากอุปกรณ์โดยตรง
  • หากอุปกรณ์รองรับ Microsoft OS Descriptor (MOD) Windows จะร้องขอ Extended Compat ID OS Feature Descriptor
  • สิ่งนี้ทำให้ winusb.sys ถูกโหลด และ adb ซึ่งเป็น executable ใน user space สามารถเปิดอุปกรณ์ ขอใช้อินเทอร์เฟซ และให้นักพัฒนาเริ่มทำงานได้

อุปกรณ์ใดบ้างที่รองรับ Microsoft OS Descriptor

  • จากอุปกรณ์ Pixel ที่ผู้เขียนเป็นเจ้าของเอง ดูเหมือนว่าการรองรับ MOD เริ่มต้นขึ้นในช่วงระหว่าง Pixel 2 (2017) และ Pixel 3a (2019)

Extended Properties OS Feature Descriptor

  • อุปกรณ์รุ่นใหม่กว่า เช่น Pixel 8 มี Extended Properties OS Feature Descriptor ซึ่งอาจรวม GUID, หน้าช่วยเหลือ, URL และแม้แต่ไอคอนด้วย

ความเห็นจาก GN⁺

  • ประเด็นสำคัญที่สุดของบทความนี้คือ ตอนนี้อุปกรณ์ Android สามารถใช้พัฒนาบน Windows ได้โดยไม่ต้องติดตั้งไดรเวอร์แยกต่างหากอีกแล้ว
  • การนำ Microsoft OS Descriptor และ Extended Compat ID OS Feature Descriptor มาใช้ ทำให้ประสบการณ์ผู้ใช้ดีขึ้นอย่างมาก
  • การเปลี่ยนแปลงนี้ช่วยเพิ่มความสะดวกให้กับนักพัฒนา Android และช่วยให้เข้าถึงสภาพแวดล้อมการพัฒนาได้ง่ายยิ่งขึ้น

1 ความคิดเห็น

 
GN⁺ 2024-01-02
ความคิดเห็นจาก Hacker News
  • ความชื่นชอบต่อ ADB(Android Debug Bridge)

    • ADB เป็นเครื่องมือที่มีประโยชน์มาก และยังสามารถทำ port rerouting ผ่าน VPN ได้ด้วย
    • ต่อให้ไม่ใช่นักพัฒนา Android มันก็เหมือนมีดพกสวิสอาร์มี และเป็นหนึ่งในเหตุผลใหญ่ที่ทำให้ชอบ Android
    • สามารถแยกข้อมูลที่เกี่ยวกับงานออกจากองค์ประกอบที่ละเมิดความเป็นส่วนตัวของข้อมูลส่วนตัวได้ผ่านโปรไฟล์งาน จึงไม่จำเป็นต้องมีโทรศัพท์เครื่องที่สอง
  • ช่วงเวลาที่อุปกรณ์ Pixel เริ่มรองรับ MOD(Modern Operating Devices)

    • จากคอลเลกชัน Pixel ส่วนตัว ดูเหมือนว่าการรองรับ MOD เริ่มต้นขึ้นระหว่าง Pixel 2(2017) กับ Pixel 3a(2019)
    • น่าจะถูกนำไปใช้กับ Pixel 3 ด้วย และใช้กับอุปกรณ์ที่เป็นไปตาม CTS(Compatibility Test Suite) ทั้งหมดที่รองรับ Android 11
    • OEM ต้องผ่านการทดสอบ CTS โดยตั้งค่าธรรมดาค่าเดียวใน USB HAL
  • ไดรเวอร์ Windows Precision Touchpad

    • มีการกล่าวถึง implementation ของ Windows Precision Touchpad สำหรับ Apple MacBook/Magic Trackpad 2 ที่พัฒนาโดย Bingxing Wang
  • พัฒนาการของไดรเวอร์ ADB

    • ในอดีต Windows ต้องติดตั้งไฟล์ไดรเวอร์ .inf สำหรับอุปกรณ์ใหม่แต่ละเครื่อง แต่ตั้งแต่ Windows 8 เป็นต้นมา อุปกรณ์จะบอกไดรเวอร์ที่ต้องการผ่าน Microsoft OS Descriptors
    • สิ่งนี้ช่วยให้ประสบการณ์ผู้ใช้ดีขึ้น และสำคัญไม่ใช่แค่กับนักพัฒนา แต่รวมถึงผู้ใช้ที่ต้องการประสบการณ์ Android ที่ดีกว่าด้วย
  • ปัญหาไดรเวอร์ USB บน Windows

    • บน Windows ไดรเวอร์ USB ค่อนข้างสับสนและบางครั้งก็อาจเป็นอันตรายได้
    • เคยเห็นนักศึกษาบางคนไม่สามารถใช้งาน Arduino clone บน Windows ได้ ทั้งที่บน Linux ใช้งานได้ดี
    • มีปัญหาที่ Windows ติดตั้งไดรเวอร์โดยอัตโนมัติเพื่อปิดการทำงานของอุปกรณ์ที่ถูกตัดสินว่าเป็นของ "ปลอม" ทำให้การเชื่อมต่อสิ่งอื่นนอกจากอุปกรณ์จัดเก็บข้อมูลเข้ากับเครื่อง Windows กลายเป็นทางเลือกสุดท้าย
  • คำวิจารณ์ต่อการเพิ่ม USB descriptor แบบเฉพาะของ Microsoft

    • มีคำวิจารณ์ต่อการที่ผู้ผลิตโทรศัพท์ต้องเพิ่ม USB descriptor แบบเฉพาะของ Microsoft
    • เป็นเรื่องไม่สมเหตุสมผลที่ Windows เรียกร้องความสามารถเฉพาะของ Microsoft แทนที่จะเปลี่ยนไปใช้ user space interface มาตรฐานเหมือน Linux หรือ macOS
  • ประสบการณ์การแก้ปัญหา ADB

    • ไม่นานมานี้ได้ทำโปรเจกต์กระจกวิเศษโดยใช้ Lenovo M7 และเจอปัญหา ADB
    • ลองค้นหาและทำตามโพสต์ใน Stack Overflow ที่เกี่ยวข้องทั้งหมดแล้วแต่ไม่สำเร็จ จึงแสดงความสงสัยเมื่อได้ยินว่าปัญหานี้ได้รับการแก้ไขแล้ว
  • ประสบการณ์การใช้โปรโตคอล HID

    • เคยใช้ raw HID protocol กับอุปกรณ์ที่เชื่อมต่อผ่าน USB และมันทำงานได้ดีบน Windows ทุกเวอร์ชัน
    • แม้จะไม่เหมาะกับทุกความต้องการ แต่ก็เหมาะมากในบางกรณี