Наш программист по встраиваемым системам разработал оболочку драйвера виртуального последовательного порта для нашего мобильного оборудования, и я разрабатываю методы, чтобы заставить его работать. Драйвер работает должным образом, он имитирует COM-порт для устройства USB, которое издает строки NMEA (данные GPS).
Я набираю WM6 для краткости, но ОС - WM6.1, если это имеет какое-либо значение.
У меня проблема в том, что драйвер не загружается при запуске устройства только на WM6. Драйвер был разработан для CE5 и WM6, но на CE5 драйвер «загружается» при загрузке, что указывает на проблему конфигурации WM6.
Возможно, стоит отметить, что драйвер будет загружаться в WM6 и CE5 с использованием метода ActivateDevice (), это то, что я до сих пор использовал для WM6, небольшого тестового приложения для запуска драйвера, чтобы я мог хотя бы протестировать драйвер работает на WM6.
Реестр уже заполнен необходимыми ключами для запуска драйвера. Таким образом, драйвер должен загружаться при запуске без каких-либо проблем. HKEY_LOCAL_MACHINE \ Drivers \ BuiltIn содержит вложенный ключ A36D_GPS_COM, и в этом ключе содержится.
DeviceArrayIndex: 0
DeviceType: 0
Dll: A36D.dll
Флаги: 0
Дружественное имя: COM-порт A36D GPS
Индекс: 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", так что знайте, что это работает. В целях предосторожности я установил его в хранилища сертификатов Privileged, Unprivileged, ROOT и SPC. Но драйвер устройства по-прежнему не загружается в device.exe при загрузке мобильного устройства.
Кроме обходного пути запуска приложения, которое вызывает ActivateDevice () для драйвера, я в тупик от того, как заставить этот драйвер загружаться при запуске.
Мне очень странно, что он работает в CE5, но не в WM6, я просто не знаю ничего, что могло бы вызвать проблемы.
Есть ли у кого-нибудь еще предложения, которые можно попробовать.
Вся помощь приветствуется.