我們的嵌入式系統程序員爲我們的移動硬件開發了一個虛擬串行端口驅動程序的外殼,並且我一直在填充使其運行的方法。驅動程序按預期工作,它模擬噴出NMEA字符串(GPS數據)的USB設備的COM端口。啓動時加載設備驅動程序的問題 - WM6.1
我簡稱爲WM6,但如果它有區別,則操作系統是WM6.1。
我遇到的問題是驅動程序不能在WM6上啓動設備時加載。該驅動程序是爲CE5和WM6開發的,但是在CE5上,驅動程序「確實」在啓動時加載,這指向了WM6配置問題。 也許值得注意的是,在這一點上,驅動程序將使用ActivateDevice()方法加載WM6和CE5,這是我迄今爲止使用的WM6,一個小型測試應用程序啓動驅動程序,所以我至少可以測試司機正在研究WM6。
註冊表已經填充了驅動程序啓動所需的密鑰。所以驅動程序應該在啓動時加載,沒有任何問題。 HKEY_LOCAL_MACHINE \ Drivers \ BuiltIn包含一個子密鑰A36D_GPS_COM,並且包含該密鑰。
DeviceArrayIndex:0
設備類型:0
DLL:A36D.dll
標誌:0
友好名稱:A36D GPS COM端口
指數:8
訂購:3
前綴:COM
優先級:0
優先級:256
從我可以告訴有一般2到這個問題,我已經研究了共同的答案。這些想法是由嵌入式程序員給我的,但我研究瞭如何自己做。
1)當驅動程序嘗試加載時,COM端口已經在使用,即使該設備加載後該COM端口最終是空閒的。我已將註冊表中的索引值從1更改爲20,並重新引導設備,並且驅動程序不會加載到指定的COM端口。因此,爲了更徹底地嘗試和測試,我將另一臺設備從COM9移到了COM8,並將我的驅動程序移動到COM9(使用上述註冊表設置)。其他設備驅動程序在COM8上啓動時加載非常愉快,但我的設備驅動程序無法在COM9上啓動。我甚至嘗試調整其他設置,但仍然無法加載啓動時。
2)CE5和WM6之間的另一個可能的問題和區別是安全性。因此,使用MSDN文章http://msdn.microsoft.com/en-us/library/bb737570.aspx我已經開始了簽名和XML配置。使用特權密鑰(未過期),A36D.dll在Visual Studio中籤名,並且創建的安裝CAB文件也使用相同的密鑰進行簽名。創建_setup.xml文件並將其附加到cab文件,以便將簽名密鑰添加到證書存儲區。使用相同的密鑰再次對CAB文件進行簽名以確保它仍然有效。另外_setup.xml被打包到它自己的.CPF文件中。 CAB和CPF文件都將密鑰添加到證書存儲「HKEY_LOCAL_MACHINE \ Comm \ Security \ SystemCertificates」,因此知道這是行得通的。謹慎地說,我已將它安裝到特權,非特權,ROOT和SPC證書商店。但是當移動設備啓動時,設備驅動程序仍然不會加載到device.exe中。
除了在驅動程序上調用ActivateDevice()的啓動應用程序的解決方法之外,我很難理解如何讓這個驅動程序在啓動時加載。
我覺得它非常奇怪,它在CE5但不在WM6中,我只是不知道其他任何可能導致問題。
有沒有人有任何進一步的建議,可以嘗試。
所有幫助表示讚賞。
小的更新,這仍然是一個進步的工作。 – JonWillis 2010-09-07 16:27:25