所以大家還是加減用XP 吧。只是時過境遷,Microsoft 很快地推出了 Win 7 、Win 8 到目前
Win 10 了,但也好像這已經是 PC 作業系統的最終版本了,因為微軟已經不再投入個人電腦
作業系統的發展了,全面轉向雲端服務,這也是可以理解的。
所以以下這篇內容或許可以提供一個簡單的蛛絲馬跡,讓大家可以依循這樣的模式,
去研究一下,在一般作業系統中,到底是如何定義或安裝USB 的驅動程式的。反正當初
我也是請教別人(現在應該不用這麼辛苦了,網路用力搜尋一下應該就可以了!),另一方面
自己反覆的實驗測試找出方法的。我想這個過程才是解決問題的最佳解答。至於以下內容
是否就是你要的 Exactly 的解答,你就不要太過於認真了吧。)
A: 其實,與其說是 Q&A ,倒不說是版主在USB ROM Emulator 產品上的一個
小瑕疵的解法的說明。但嚴格說,也不能說是Bug ,因為反正只要碰到微軟的
作業系統,總是會有一些水土不服的現象,這種結果也不是一天兩天的事。
也已經是老掉牙,不是新鮮事的故事。
寫USB 的東西,除了寫寫 USB Firmware 及應用程式(含驅動程式),最好還是寫的
自動安裝程式。就是光碟片一放進光碟機,一切就自動的依序幫客戶安裝相關軟體
及驅動程式。而且還可以自動卸載。至於卸載的手動方式,版主在另一篇USB_DIY
說破嘴也不會有任何結論的。反正,客戶喜歡怎麼用或是否接受?是比較重要吧。
但可以肯定的是:以現在的應用程式來說:一定要有軟體自動安裝功能。
所以,不要以為會寫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]
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教一下吧!
謝謝!
沒有留言:
張貼留言