ในอดีต การติดตั้งฮาร์ดแวร์บน Linux มักเป็นเรื่องที่ยุ่งยาก ต้องมีการปรับแต่งเคอร์เนลและใช้ความพยายามอย่างมาก แต่ปัจจุบันไดรเวอร์มาตรฐานและระบบ DKMS (Dynamic Kernel Module Support) ได้ช่วยอำนวยความสะดวกอย่างมาก ทำให้ผู้ใช้ส่วนใหญ่คาดหวังว่าการเชื่อมต่ออุปกรณ์ใหม่ๆ เช่น USB WiFi ดองเกิล จะเป็นเรื่องง่ายๆ
ทว่าประสบการณ์ของ Al Williams กับ TP-Link Archer TX50U นั้นแตกต่างออกไป เมื่อเสียบดองเกิลเข้ากับแล็ปท็อป ระบบ Linux ตรวจพบอุปกรณ์แต่ไม่มีไดรเวอร์ใดๆ ทำงานร่วมด้วย ซึ่งเป็นสัญญาณที่ไม่ดีนัก การตรวจสอบด้วยคำสั่ง `lsusb` เผยให้เห็นว่าดองเกิลใช้ชิป Realtek แต่ไม่ระบุรุ่นที่ชัดเจน การพยายามติดตั้งไดรเวอร์จาก GitHub ครั้งแรกจึงล้มเหลวเนื่องจากเป็นชิปเซ็ตที่ผิด
ภายหลังจากการค้นคว้า Al Williams พบว่าดองเกิลนี้ใช้ชิป RTL8832CU และสามารถหาไดรเวอร์จาก GitHub ของ [morrownr] ได้สำเร็จ แต่ถึงแม้จะติดตั้งไดรเวอร์แล้ว ดองเกิลก็ยังไม่ทำงาน ปัญหาที่แท้จริงคือรหัสประจำตัว USB (USB ID) ของดองเกิล TX50U (ซึ่งมีค่า Vendor ID เป็น 0x37ad และ Product ID เป็น 0x0103) ไม่ตรงกับรายการที่ไดรเวอร์รองรับซึ่งระบุไว้ในไฟล์ `os_dep/linux/usb_intf.c`
เพื่อแก้ไขปัญหานี้ Al Williams ต้องทำการแก้ไขซอร์สโค้ดของไดรเวอร์ที่ติดตั้งผ่าน DKMS โดยการเพิ่มบรรทัดที่มี USB ID เฉพาะของ TX50U เข้าไปในไฟล์ดังกล่าว หลังจากแก้ไขและสั่งให้ DKMS สร้างและติดตั้งโมดูลไดรเวอร์ใหม่ ดองเกิล WiFi ก็กลับมาทำงานได้อย่างสมบูรณ์
DKMS เป็นระบบที่ช่วยจัดการโมดูลเคอร์เนลได้อย่างมีประสิทธิภาพ โดยจะสร้างโมดูลไดรเวอร์ขึ้นใหม่ทุกครั้งที่มีการอัปเดตเคอร์เนล ทำให้ผู้ใช้ไม่ต้องคอมไพล์ไดรเวอร์ด้วยตนเอง อย่างไรก็ตาม DKMS ก็ยังมีข้อจำกัด บางครั้งไดรเวอร์ที่ซับซ้อน เช่น ไดรเวอร์กราฟิก NVIDIA อาจประสบปัญหาเมื่อเคอร์เนลมีการเปลี่ยนแปลง API พื้นฐาน ทำให้ผู้ใช้อาจต้องหาไดรเวอร์เวอร์ชันใหม่หรือย้อนกลับไปใช้เคอร์เนลเดิม
บทเรียนนี้ชี้ให้เห็นถึงความท้าทายที่ยังคงมีอยู่ในการสนับสนุนฮาร์ดแวร์บน Linux และสะท้อนคำถามว่าเหตุใดผู้ผลิตจึงไม่ให้การสนับสนุนที่ดียิ่งขึ้น หรือทำไมการเพิ่ม USB ID ง่ายๆ ยังคงต้องผ่านกระบวนการที่ซับซ้อนถึงเพียงนี้ ซึ่งผู้เขียนหวังว่าในอนาคตผู้ผลิตจะให้ความสำคัญกับการสนับสนุน Linux มากขึ้น
🏷️ หมวดหมู่: Hackaday Columns, Linux Hacks, device driver, Linux Fu, tp-link
🔗 อ่านบทความฉบับเต็ม: hackaday
