|
два устройства один драйвер, usbbulk |
|
|
|
Feb 11 2008, 01:11
|
Знающий
   
Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837

|
Цитата(lazarev andrey @ Feb 8 2008, 10:41)  серийного номера в дескрипторе не предусмотрено, предусмотрены разные PID. в inf - файле прописаны несколько PID. может быть в этом дело? может надо делать для каждого отдельного устройства свой inf - файл? Как же не предусмотрено? (http://proyectosfie.com/html/usb/libro/ стр.97) The device descriptor has 14 fields in 18 bytes. 0 bLength 1 Descriptor size in bytes 1 bDescriptorType 1 The constant DEVICE (01h) 2 bcdUSB 2 USB specification release number (BCD) 4 bDeviceClass 1 Class code 5 bDeviceSubclass 1 Subclass code 6 bDeviceProtocol 1 Protocol Code 7 bMaxPacketSize0 1 Maximum packet size for Endpoint 0 8 idVendor 2 Vendor ID 10 idProduct 2 Product ID 12 bcdDevice 2 Device release number (BCD) 14 iManufacturer 1 Index of string descriptor for the manufacturer 15 iProduct 1 Index of string descriptor for the product 16 iSerialNumber 1 Index of string descriptor containing the serial number 17 bNumConfigurations 1 Number of possible configurations iSerialNumber. An index that points to a string containing the device’s serial number. This value is zero if there is no serial number. Some device classes (such as mass storage) require serial numbers. Serial numbers are useful if users may have more than one identical device on the bus and the host needs to keep track of which is which even after rebooting. Serial numbers also enable a host to determine whether a peripheral is the same one used previously or a new installation of a peripheral with the same Vendor ID and Product ID. No devices with the same Vendor ID, Product ID, and device release number should have the same serial number.
--------------------
|
|
|
|
|
Mar 21 2008, 12:19
|
Частый гость
 
Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196

|
снова стало актуально. устройтсво сделано на at89c5131.
вот такой текст инф файла:
/*--------------------------- [Version] Signature = $CHICAGO$ Provider = "Company" Class = USB DriverVer = 10/12/2007, 1.0.0.0
;------------------------------------------------------------------------- ; Driver information ;-------------------------------------------------------------------------
[Manufacturer] "Co" = Tech.Mfg
[Tech.Mfg]
"Device1" = DDInstall_USB_C001, USB\VID_03EB&PID_C001 "Device2" = DDInstall_USB_C002, USB\VID_03EB&PID_C002
;------------------------------------------------------------------------- ; Windows 2000 installation section ;-------------------------------------------------------------------------
[DDInstall_USB_C001.NT] AddReg = AddRegistry_C001 CopyFiles = DrivertFiles.Ext, DrivertFiles.Inf
[DDInstall_USB_C001.NT.Services] AddService = USBBulk, 0x00000002, Service_Inst, EventLog_Inst
[DDInstall_USB_C002.NT] AddReg = AddRegistry_C002 CopyFiles = DrivertFiles.Ext, DrivertFiles.Inf
[DDInstall_USB_C002.NT.Services] AddService = USBBulk, 0x00000002, Service_Inst, EventLog_Inst
[Service_Inst] DisplayName = "USB 2 Endpoints universal driver" ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; 2 - SERVICE_AUTO_START, 3 - SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\System32\Drivers\USBBulk.sys LoadOrderGroup = Base
;------------------------------------------------------------------------- ; Windows 9X installation section ;-------------------------------------------------------------------------
[DDInstall_USB_C001] AddReg = AddRegistry_9X, AddRegistry_C001 CopyFiles = DrivertFiles.Ext, DrivertFiles.Inf
[DDInstall_USB_C002] AddReg = AddRegistry_9X, AddRegistry_C002 CopyFiles = DrivertFiles.Ext, DrivertFiles.Inf
;------------------------------------------------------------------------- ; Registry section ;-------------------------------------------------------------------------
[AddRegistry_9X] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,USBBulk.sys
[AddRegistry_C001] HKR, "Parameters", "MaxInXfer", 0x00010001, 1048576 HKR, "Parameters", "EPInAddress", 0x00010001, 5 HKR, "Parameters", "MaxOutXfer", 0x00010001, 32 HKR, "Parameters", "EPOutAddress", 0x00010001, 2
[AddRegistry_C002] HKR, "Parameters", "MaxInXfer", 0x00010001, 1048576 HKR, "Parameters", "EPInAddress", 0x00010001, 5 HKR, "Parameters", "MaxOutXfer", 0x00010001, 32 HKR, "Parameters", "EPOutAddress", 0x00010001, 2
;------------------------------------------------------------------------- ; Event log registry entries ;-------------------------------------------------------------------------
[EventLog_Inst] AddReg = EventLog_AddReg
[EventLog_AddReg] HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\Drivers\USBBulk.sys" HKR,,TypesSupported,0x00010001,7
;------------------------------------------------------------------------- ; Source file information ;-------------------------------------------------------------------------
[PreCopySection] HKR,,NoSetupUI,,1
[DestinationDirs] DrivertFiles.Ext = 10, System32\Drivers DrivertFiles.Inf = 10, Inf
[DrivertFiles.Ext] USBBulk.sys
[DrivertFiles.Inf] Atmel.inf
;=========================================================================
ну это я взял готовый инф и подправил немного.
драйвер я прикрепил. может что надо подправить в инф-файле?
Сообщение отредактировал lazarev andrey - Mar 21 2008, 12:23
|
|
|
|
|
Mar 24 2008, 09:22
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(lazarev andrey @ Mar 24 2008, 12:14)  2. программа для тестирования опять же взята из исходника, но переправленная для наших нужд. Как в программе тестирования определяется экземпляр устройства, с которым она должна работать?
|
|
|
|
|
Mar 24 2008, 15:00
|
Частый гость
 
Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196

|
похоже, что нашли причину, при ближайшем рассмотрении кода приложения. мдас...надо осваивать более высокий уровень программирования  Тему можно закрыть, Всем спасибо, огромное за содействие.
|
|
|
|
|
May 17 2011, 15:36
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Народ, а вот у меня имеются отладочные платы AVR32 с usb (2 шт). Назначаю им уникальные VID PID, инф файл по аналогии сделал, что был выше. Драйвер беру из NTDDK - bulkusb.sys. Пытаюсь подрубить два устройства на один драйвер. В системе установка проходит, висят оба устройства в диспетчере, дебагвью показывает отладку для каждого из устройств при подключении. Вроде все хорошо, пока не вытащишь одно из устройств из порта - тут же синий экран и перезагруз. При работе только с одним устройствам - и подцепляется, и отцепляется корректно. В чем особенность драйвера для работы на два (или более) устройств, кто подскажет? Полагаю, что обработка surprise_remove или просто remove такова, что выгружает полностью драйвер из системы (это мои догадки). Повторяю, инф файл идентичен тому, что выше в теме. Спасибо.
|
|
|
|
|
May 18 2011, 15:13
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Вот наткнулся на IRP_MN_QUERY_DEVICE_RELATIONS и обработка REMOVAL_RELATIONS. В bulkusb от NTDDK этих обработчиков нету. Возможно это есть решение моего вопроса. Кто знает, как это работает?
|
|
|
|
|
May 18 2011, 20:13
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(Тёмыч @ May 17 2011, 18:36)  ...Драйвер беру из NTDDK - bulkusb.sys... Ведь есть готовые универсальные драйверы libusb-win32 или WinUSB. Зачем мучить себя написанием собственного драйвера?
|
|
|
|
|
May 19 2011, 09:12
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Даже не знаю, что и ответить... Ну, чтоб уметь, наверное! А если мне не универсальный нужен?
|
|
|
|
|
May 20 2011, 19:56
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Если кому интересно, то причина моей проблемы крылась в настройках компиляции ддкшного драйвера. Синий экран подсказал)
|
|
|
|
|
May 22 2011, 12:51
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Компиляция под дебаг (chk) при возникновении assertов требовала дебаггера, о чем говорил номер ошибки в синем экране. В free версии все работает, хотя не плохо было бы узнать, что за assert (или breakpoint) срабатовал и требовал отладчика для продолжения работы. Буду продолжать эксперименты)
|
|
|
|
|
May 22 2011, 20:04
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
А я на локальной машине DbgView использовал, он то может что-то и показывал, только я этого не видел. Для меня вывод один: kerel-mode отладку надо вести на сторонней машине.
С версиями DDK и Wndows я разобрался
Сообщение отредактировал Тёмыч - May 22 2011, 20:05
|
|
|
|
|
May 23 2011, 07:46
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Все накрывалось сразу и ни в каком дебагвью не успеешь посмотреть (так как он на той же машине был запущен). Включил отображение синего экрана. Выяснилось. что ошибка 0x7E -> 0x80000003: STATUS_BREAKPOINT indicates a breakpoint or ASSERT was encountered when no kernel debugger was attached to the system. Вывод: надо подключать внешний отладчик, либо компилить без ассертов этот драйвер. Что ж я тут не правильно излагаю?
|
|
|
|
|
May 23 2011, 09:19
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Я не говорил ни слова про "неправильно", а говорил "про непонятно". ASSERT - чистая диагностика. Как правило, вылавливание неинициализированных переменных, выход за границы массивов, попытки чтения/записи по NULL указателю. Вариантов, на мой взгляд, два: 1. Неудачно реализован сан assert. 2. На самом деле ошибка, которую вылавливал assert, как была, так и осталась, только пока это не приводит к экрану смерти. Хотя и странно это.
|
|
|
|
|
May 23 2011, 09:31
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Верно, я понимаю, что вызов ассерта не есть хорошо. Поэтому буду экспериментировать с отладчиком. Хотя возможно это был чисто отладочный (тестовый) брейкпоинт от Майкрософт.
|
|
|
|
|
May 24 2011, 13:37
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Цитата Большие сомнения про breakpoint. Откуда он может взяться? Его именнo в отладчике только и можно установить. Как понимаю, нет отладчика, нет и breakpoint'a. Ну почему же? Можно из драйвера передать управление отладчику, как раз такая штука в этом драйвере (bulkusb) и стоит. И стоит она как раз в месте эвента по отсоединению устройства. DbgBreakPoint называется, кажется.
|
|
|
|
|
May 24 2011, 21:05
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069

|
Цитата В WDK в драйвере bulkusb ничего такого не используется. А не подскажете версию ВДК, в последних этого примера нет.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|