Перейти к содержимому


Фото

Добавление поддержки RNDIS в существующую сборку WCE60/WEC7

RNDIS WCE60 WEC7

  • Чтобы отвечать, сперва войдите на форум
Нет ответов

#1 gribochki

gribochki

    Newbie

  • Members
  • Фишка
  • 1 Сообщений:

Опубликовано 10.01.2018 - 12:27

Здравствуйте. Есть задача подключения USB модема к устройству, работающему под управлением WCE60/WEC7.
Модель USB модема - ZTEMF823D (фактически, это роутер, работающий под управлением linux), в настольных windows определяется как RNDIS устройство.
Сборка Wince, установленная на устройства, не имеет встроенную поддержку, возможность добавить эту поддержку (BSP/посредством контакта с производителем) отсутствует.
 
Что было предпринято.
На только что установленную Win7HomeEx была осуществлена установка MSVS2005SP1 + Windows Embedded CE 6.0 R3 с накопительными обновлениями по 31.12.2015 (позже заметил, что есть еще обновления вплоть до марта 2017, но
там не было ничего касательно RNDIS). В установленной среде осуществлена сборка ОС для эмулятора. При подготовке образа была отмечена необходимость добавления поддержки устройств RNDIS (Core OS -> Core OS Services -> USB Host Support -> USB Remove NDIS Class Driver (SYSGEN_ETH_USB_HOST)).
Как результат, собранный образ содержит файлы usb8023.dll, rndismp.dll и определенные секции реестра (HKLM\Drivers\USB\LoadClients,HKLM\Drivers\USB\ClientDrivers, HKLM\Comm), якобы обеспечивающие загрузку драйвера при подключении соответствующего устройства. Проверить работоспособность решения на эмуляторе нет возможности, поскольку
он не поддерживает подключение USB-устройств.
Все эти действия были выполнены в расчете на то, что сформированные библиотеки драйвера будут перенесены в ОС устройства, где будут успешно использованы. Надежда на то, что данный метод приведет к успеху, основывалась на том, что подобного рода прецеденты имелись - я был свидетелем успешного подключения USB устройства с формированием виртуального COM-порта посредством драйвера 232usb.dll, найденного в интернете и скопированного в папку Windows.
Пробовал проверить такого рода перенос на различных программах (копирование осуществлялось вместе с библиотеками, перечень которых был установлен посредством использования dependency walker); для части программ этот метод сработал (пасьянсы косынка, свободная ячейка), а вот интерпретатор команд (cmd.exe) заставить работать в адресном пространстве ОС устройства не удалось.
 
Была осуществлена куча безрезультатных попыток подключить модем. В рамках каждой их них предварительно было осуществлено копирование файлов драйверов usb8023.dll, rndismp.dll в папку Windows устройства. Попытки характеризовались дополнительными действиями как то: копирование дополнительных библиотек, ссылки на которые была найдены в файлах драйверов с заменой/без замены уже существующих файлов в папке назначения, изменение перечня элементов каталога образа ОС, обновление Windows Embedded CE 6.0 R3, на основе которой осуществляется сборка ОС. В результате все сводилось к следующему:
При подключении модема на экране отображается стандартный диалог "Unidentified USB Device", затем при вводе имени usb8023(.dll) фактически ничего не происходит, диалоговое окно остается отображенным с уже введенным именем (осуществляется его перемещение в центр экрана, если оно до этого было смещено).
При этом осуществляется модификация реестра (по всей видимости по результатам выполнения каких-то функций типа USBInstallDriver) с добавлением следующих записей 

 

[HKEY_LOCAL_MACHINE\Comm\USB8023]
"DisplayName"="Remote-NDIS Host"
"Group"="NDIS"
"ImagePath"="USB8023.DLL"
 
[HKEY_LOCAL_MACHINE\Comm\USB8023\Linkage]
"Route"=hex(7):\
  55,00,53,00,42,00,38,00,30,00,32,00,33,00,31,00,00,00,00,00
 
[HKEY_LOCAL_MACHINE\Comm\USB80231]
"DisplayName"="Remote-NDIS Host"
"Group"="NDIS"
"ImagePath"="USB8023.DLL"
 
[HKEY_LOCAL_MACHINE\Comm\USB80231\Parms]
"BusNumber"=dword:00000000
"BusType"=dword:00000000
"RebindOnResume"=dword:00000000
 
[HKEY_LOCAL_MACHINE\Comm\USB80231\Parms\TcpIp]
"DefaultGateway"=dword:00000000
"EnableDHCP"=dword:00000001
"IpAddress"=dword:002e0030
"Subnetmask"=dword:002e0030
"UseZeroBroadcast"=dword:00000000
 
[HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers\USB8023]
"AlternateSetting"=dword:00000000
"CommandTimeout"=dword:00001388
"ReadPollInterval"=dword:000003e8
"ResetTimeout"=dword:00001388
"StatusTimeout"=dword:00001388
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default]
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\2]
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\2\2_2_255]
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\2\2_2_255\USB8023]
"DLL"="usb8023"
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default]
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\224_1_3]
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\224_1_3\USB8023]
"DLL"="usb8023"
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\239_1_1]
 
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\239_1_1\USB8023]
"DLL"="usb8023"
 

 

 
Прим. Параметр "Route" секции "Comm\USB8023\Linkage" имеет тип multistring, значение - "USB80231", выше данное значение представлено, как результат экспорта ветки реестра посредством модуля registry менеджера totalcommander.
Типы и значения параметров секции "Comm\USB80231\Parms\TcpIp" показались мне странными (может, необоснованно), я переписал их по образу и подобию секции "Comm\NETRTWLANU1\Parms\TcpIp" другого устройства, работающего под управлением
WEC7 c заявленной поддержкой wifi при использовании определенного типа usb wifi устройств.

 

"DefaultGateway"="0.0.0.0"
"EnableDHCP"=dword:00000001
"IpAddress"="192.168.10.100"
"Subnetmask"="255.255.255.0"
"UseZeroBroadcast"=dword:00000000
 

 

Положительного результата это не принесло.
 
Собственно, вопросы.
Насколько правомерен такого рода метод добавления поддержки rndis в существующую сборку wince, выполняемый путем копирования библиотек из сборки, выполненной для эмулятора?
Может ли отрицательный результат быть обусловлен тем, что указанный модем фактически является составным usb устройством, реализующим по крайней мере еще один интерфейс - mass storage data? что в этом случае нужно сделать, чтобы
подключить именно rndis?
Является ли набор библиотек (usb8023.dll, rndismp.dll) достаточным для функционирования драйвера? Нужно ли копировать все библиотеки, на которые имеются ссылки внутри этих двух, и которые уже присутствуют в сборке wince устройства? Отображаемая на экране устройства информация о сборке определяет дату сборки как 25.06.2012, на экране эмулятора - 05.01.2011, хотя вроде
применены обновления вплоть до конца 2015 года.
Является ли информация, привносимая в реестр в результате ввода имени драйвера в соответствующее окно, отображаемое при подключении устройства, достаточной? В приведенном ниже посте, например, утверждается, что устройство удалось
подключить после внесения определенного рода записей в реестр. https://groups.googl...der/ytkQmf79vXg. При этом почти все вносимые параметры эквивалентны тем, что формировались в реестре устройства при указании имени драйвера. Меня привлекло свойство
"DisplayName"=mui_sz:"netmui.dll,#9002", я попытался выяснить, при чем тут может быть библиотека netmui.dll, копировал ее вместе с файлами драйверов в папку назначения, менял значение указанного свойства реестра, но никаких успехов не добился.
Кстати, при попытке подключения любого другого устройства, также не опознанного системой, и вводе имени драйвера usb8023 (хотя заранее известно, что данный драйвер не подходит, потому что подключаемое устройство - bluetooth адаптер, например) в реестре создаются все те же записи. Свидетельствует ли это о том, что при подключении модема вообще ничего сделать не удается?
Если предположить, что действия по инициализации устройства посредством указанного драйвера были частично выполнены (по крайней мере некоторые функции драйвер выполнил, о чем свидетельствует наличие записей в реестре), а потом возник какой-то сбой, в результате чего инициализация была аварийно прекращена,что это могло бы быть? в какую сторону смотреть? Примечательно, что при вводе имен несуществующих файлов либо файлов, которые не являются драйверами, в соответствующее поле редактирования окна "Unidentified USB device" осуществляется отображение окна, содержащего сообщение "Error installing USB
driver", в то время как указание имени usb8023 к формированию такого окна не приводит.
 
Заранее спасибо.






1 пользователей читают эту тему

0 members, 1 guests, 0 anonymous users