2019年9月25日 星期三

Hinet 網頁系列 --- USB DIY 系列 (一) USB Q&A (五)

(補充說明:當年寫這篇文章時,那時好像 Vista 版本剛出來,偏偏 Vista 的問題又令人詬病,

所以大家還是加減用XP 吧。只是時過境遷,Microsoft 很快地推出了 Win 7 、Win 8 到目前

Win 10 了,但也好像這已經是 PC  作業系統的最終版本了,因為微軟已經不再投入個人電腦

作業系統的發展了,全面轉向雲端服務,這也是可以理解的。

所以以下這篇內容或許可以提供一個簡單的蛛絲馬跡,讓大家可以依循這樣的模式,

去研究一下,在一般作業系統中,到底是如何定義或安裝USB 的驅動程式的。反正當初

我也是請教別人(現在應該不用這麼辛苦了,網路用力搜尋一下應該就可以了!),另一方面

自己反覆的實驗測試找出方法的。我想這個過程才是解決問題的最佳解答。至於以下內容

是否就是你要的 Exactly  的解答,你就不要太過於認真了吧。) 

Q: 有關於 USB INF 檔案的描述。

A: 其實,與其說是 Q&A ,倒不說是版主在USB ROM Emulator 產品上的一個

小瑕疵的解法的說明。但嚴格說,也不能說是Bug ,因為反正只要碰到微軟的

作業系統,總是會有一些水土不服的現象,這種結果也不是一天兩天的事。

也已經是老掉牙,不是新鮮事的故事。

    寫USB 的東西,除了寫寫 USB Firmware 及應用程式(含驅動程式),最好還是寫的

自動安裝程式。就是光碟片一放進光碟機,一切就自動的依序幫客戶安裝相關軟體

及驅動程式。而且還可以自動卸載。至於卸載的手動方式,版主在另一篇USB_DIY

 也有稍微描述過。作USB的產品,到底要不要用標準的驅動程式?這一點版主想怎麼

說破嘴也不會有任何結論的。反正,客戶喜歡怎麼用或是否接受?是比較重要吧。

但可以肯定的是:以現在的應用程式來說:一定要有軟體自動安裝功能

 所以,不要以為會寫USB Firmware 或應用程式(若您還能寫驅動程式,算是很厲害了囉)

就可以作一些USB DIY產品了。因為您還是得寫個自動安裝程式。

當初,版主也不之如何下手。許多技術損友又七嘴八舌說:簡單嘛,

安裝個InstallShield,寫個小程式就可以了!哈~哈~每個人都用嘴吧作最快啊!

若進一步問他們說:怎麼寫呢?!那又是您家的事了!

唉~所以,版主才說是:損友嘛。

        這部分改天再來教大家寫。還是先就主題說明一下這個Q&A。

要寫自動安裝程式,這個USB 驅動程式的INF 的重要性就很重要了。

若您一切都想省事、事省。那您就失去許多瞭解事物真相的機會了。

版主就先把版主的USB ROM Emulator 的 INF 檔簡略的列於下方:

[Version]
Signature=$CHICAGO$
Class=USB
Provider=%ChipwareSWTeam%
LayoutFile=layout.inf, layout1.inf, layout2.inf
DriverVer=09/16/2004,1.10.00.1010

[ClassInstall]

[DestinationDirs]
TP68xx.Files.Ext=10,System32\Drivers
TP68xx.Files.Inf=10,INF

[Manufacturer]
%ChipwareHWTeam%=ChipwareHW

[ChipwareHW]
%ChipwareICNameVID0797PID6801%=TP68xx.Dev,USB\VID_0797&PID_6801
%ChipwareICNameVID0797PID6802%=TP68xx.Dev,USB\VID_0797&PID_6802
%ChipwareICNameVID0797PID6803%=TP68xx.Dev,USB\VID_0797&PID_6803
%ChipwareICNameVID0797PID6816%=TP68xx.Dev,USB\VID_0797&PID_6816
%ChipwareICNameVID0797PID6826%=TP68xx.Dev,USB\VID_0797&PID_6826
%ChipwareICNameVID055fPID0210%=TP68xx.Dev,USB\VID_055f&PID_0210
%ChipwareICNameVID055fPID021E%=TP68xx.Dev,USB\VID_055f&PID_021E
%ChipwareICNameVID055fPID021F%=TP68xx.Dev,USB\VID_055f&PID_021F

[TP68xx.Dev]
CopyFiles=TP68xx.Files.Ext,TP68xx.Files.Inf
AddReg=TP68xx.AddReg

[TP68xx.Files.Ext]
;;TP68xx.SYS

[TP68xx.Files.Inf]
;;TP68xx.INF

[TP68xx.AddReg]
...
...
      若有寫USB 驅動程式的人,對於這個檔案內容應該都不陌生。

版主有省略一些後面的內容,因為精彩的是在前面。

        首先是一開始那的藍色粗體字:Class=USB ,所代表就是一般USB 裝置,

您若寫成 HID 的話,就沒有故事可以寫了,因為是標準的驅動程式。

        版主發現一件很好玩的事是:後面兩行紅色的字的描述!

這件『靈異』故事可不是七月半的故事,卻是活生生的發生在 Microsoft XP SP2 上。

版主當初為何要把這兩行給註釋掉?!因為,您若不註釋掉的話,當您寫自動安裝程式時,

把這個INF 檔複製到作業系統的INF 目錄下時。當您安裝完成後,把您USB 裝置插入 PC 時,

神奇的事情發生了:作業系統竟然找不到此裝置的驅動程式擺放的目錄。

要USER還要手動指向安裝目錄一下。譁~那我還幹嘛寫自動安裝程式啊!

所以,版主努力的反覆測試幾次後,發現,只要把這兩行註釋調就可以了!

        唉~故事若這麼簡單可以解決的話,微軟就不叫 Microsoft 了!

當您把這兩行拿掉的話,又變成手動安裝驅動程式時,作業系統也找不到

這一個USB 裝置的驅動程式!!啊~啊~~微軟是存心要玩死我們似的!

  怎麼會這樣呢?!自動安裝驅動程式與手動安裝驅動程式竟然在XP SP2 是

不一樣的結果耶!!.@#$%....

        怎麼解?!唉~就挖東牆補西牆!這是解微軟作業系統相容性的最佳解法!

大家不要笑。這是版主問了幾個軟體工程師後,大家比較能接受的作法:

因為誰哪來這麼多時間,搞清楚微軟在做什麼啊!每天解BUG,解的累得

像一隻死豬一樣。

反正能解,就是標準答案。要不然,您自己寫信去問微軟~看人家要不要理您!

(後來,版主也發現這些無論寫驅動程式的或是寫應用程式的~

每個都似乎有罹患一種『被微軟迫害妄想症』~真的都好可憐喔!)
        
答案就是:自動安裝的驅動程式,記得把上述兩行給註釋掉。若是要留給客戶

手動安裝驅動程式的,就請把這兩行的註釋放開!

        為什麼?!不知道!若有仁人君子,知道原因的,是否可以來個MAIL教一下吧!

謝謝!   

沒有留言:

張貼留言