Tuesday, December 09, 2014

libusb

話說每個USB device在插上USB Host的時候,都需要一個對應的驅動程式才能正常運作。不要懷疑,連隨身碟都需要驅動程式的,只是每個作業系統都已經內建,所以一插上隨身碟就會自動載入,導致大多數的人都覺得,USB還需要驅動程式嗎?

現在假設你想要實作一個你自己的USB通訊協定,你搞定了USB device,那USB Host端的驅動程式呢?自己寫一個嗎?有這麼簡單嗎?如果你有google過Windows驅動程式要怎樣寫,相信你不會想自己寫一個的。

既然自己寫太麻煩,那就用現成的吧。libusb就是這類現成的驅動程式。libusb是開放原始碼,而且跨平台,還是泛用的USB驅動程式。因為它是泛用型的驅動程式,所以應用程式得透過它的API去跟你的USB device溝通,這邊就不講了。libusb的官方網站都有寫。

講到這邊,好像很簡單喔?如果你這麼想,那就錯了。雖然你不用寫驅動程式,但是你還是得跟作業系統講要在你的USB device插入時,載入libusb啊。光是這一點就卡死一堆人了,這邊我也不打算講要怎麼做,因為libusb的官方網站都有寫...。

就算解決驅動程式安裝的問題,還是有更多問題會產生,所以我不建議用libusb直接當作最終產品的解決方案,否則真的是人生就此陷入黑暗。為什麼我會這樣講,這是因為客戶永遠不會把規格寫出來,今天跟你說要支援Windows,明天問你能不能支援Linux,改天再問你MacOS行不行,永遠做不完啊。自己寫驅動程式也會面臨一樣的問題,但是你可以說沒人力,一旦用了libusb,不知情人士只會問[不是只要裝起來就可以動了?],事情如果有這麼簡單,你來?

所以啊,libusb拿來做一些小案子,或是學術性研究是很好用的,拿到市場上嘛,自求多福吧。

我遇過最盧的客戶,是跟他講可以用libusb確認他寫的USB device是否能夠正常動作。結果他連官網都不去看,硬是要人家教他怎麼把libusb程式碼編成執行檔,這樣他就可以直接確認,有沒有這麼懶啊?

No comments:

codeblock