2016年12月8日 星期四

USB hub driver (Windows 7)

有些人覺的 USB hub 沒有 driver, 這個說法表面上算對, 但其實是錯誤的. 以 linux kernel 來說它包在 USB core driver 裡一起, 但在 windows 裡卻可以拆離成分開的檔案, 這個檔案叫 usbhub.sys 跟 usbd.sys (root hub).
%SystemRoot%\system32\drivers\usbd.sys
%SystemRoot%\system32\drivers\usbhid.sys
安裝時的參考檔 usb.inf
%SystemRoot%\inf\usb.inf (不可以是別的路徑)
一般來說是 usb.inf 很常不見, 原因不明, 可能跟我用過 USB oblivion 這個軟體有關係, 總之以上這三個檔案不見的第一時間是無法發現的, 等到

  • USB 裝置換孔位
  • 新裝 USB hub
  • 新裝 USB UART device (如 FTDI2232 這類的東西)
  • 接上 Android device PC端說找不到 driver

裝不起來時才會發現. USB UART (特別是多 port 的像 FTDI2232/4232) 跟 Android device 的症狀會比較明顯, 因為這些都是 USB device 認的到但是路徑不正確.
正確:
USB\VID_04E2&PID_1424&MI_00
有問題的:
USB\VID_04E2&PID_1424
後面 &MI 的部份會完全不見, 所以認不到, 在裝置認不到的第一時間都會以為 driver 有問題, 通常不會懷疑到是不是 Windows 本身的 USB host 是不是有問題.

如果是檔案不見, 從另一臺電腦 copy 出來是比較直覺的方式, 但通常出狀況時你只有你面前出包的這臺電腦而已, 所以找這裡面:
%SystemRoot%/winsxs (不一定是 c:\windows, 特別是你系統修不只一次過時)
的 usb.inf 這個檔, 先貼回 %SystemRoot%/inf/ 裡試試看, 如果成功就不需要費時去貼回 driver 檔案.
如果這樣不行, 首先你要找一個工具叫 unlocker , 用這個工具, 先將
usbd.sys (如果你是連 roothub 都抓不到就要動它)
usbhub.sys rename 成 _usbhub.sys 後 (刪除或直接蓋掉會說你沒有權限), 再把檔案貼回去.

步驟有點麻煩也有點囉唆, 但如果不想重灌系統的話, 就努力一下吧.