Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: перенос драйвера из winxp в win7  (Прочитано 10734 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yax123
Интересующийся

ru
Offline Offline

« : 19-11-2014 08:49 » 

Всех приветствую.
Досталась работа с унаследованным проектом. Поставили задачу по переносу драйвера нашей железки из winxp на win7.
Драйвер собирается на связке vc2008+winddk7600. Используется конфигурация x86 + winxp.
В связи с чем возникло несколько вопросов. Как мне видится из моего погреба есть 2 варианта решения:
Быстрый и правильный и они несколько различаются.
Соответственно вопросы.
Правильно ли я понимаю, что самый быстрый способ это пересобрать драйвер как есть под win7 x86?
Правильно ли я понимаю, что самый правильный способ это переписать все под win7 x64?

Решил попробовать быстрый способ. Поправил настройки, собрал драйвер. При попытке установки драйвера на реальном железе получил
ошибку:
Код:
status = IoConnectInterrupt(....
IoConnectInterrupt failed (status: 0xc000000d) !!!!!
гугление дало описание: STATUS_INVALID_PARAMETER
какие параметры при пересборке под win7 могли вдруг стать "инвалидами"?



Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 19-11-2014 09:49 » 

если все нормально написано то зачем переписывать? достаточно перекомпилить.
насчет неправильного параметра - думаю по меньшей мере половина из входных параметров может дать такой эффект)
надо смотреть на значения входных параметров и что вы делаете выше)
PS насчет конкретно семерки не скажу. есть вероятность что это общая ошибка. у меня по крайней мере один и тот же код на PCI во всех системах работает.
« Последнее редактирование: 19-11-2014 09:53 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
yax123
Интересующийся

ru
Offline Offline

« Ответ #2 : 19-11-2014 10:03 » new

Спасибо за ответ. В процессе вдумчивого наблюдения появились следующие мысли:
Вот что происходит в winxp:
вызываем функцию:
Код:
Vector = HalGetInterruptVector(Isa, 0, INTERRUPT_IRQ, INTERRUPT_IRQ, &kIrql, &kAffinity);
вывод отладки:  DriverEntry: Interrupt 0xb, Irql = 0x7, Affinity = 0x1, Vector = 0x181
тот же самый драйвер в win7-x32
вывод отладки:  DriverEntry: Interrupt 0xb, Irql = 0x93, Affinity = 0x2, Vector = 0x0

видно что вектор нулевой из-за чего (как мне кажется) дальнейший вызов
status = IoConnectInterrupt
завершается ошибкой.

Что не так с функцией  HalGetInterruptVector в win7?



Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 19-11-2014 10:44 » 

ну вообще то HalGetInterruptVector оооочень устаревшая. прямо таки скажем - наследие Windows NT и совсем не рекомендуемая.а на x64 ее кажется вообще нет. и вроде в висте она уже не должна работать...
так что похоже что лучше переписать на pnp...

Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
yax123
Интересующийся

ru
Offline Offline

« Ответ #4 : 19-11-2014 10:50 » 

Печаль.
pnp, как я понимаю, это плагандплей?
Дело в том что наше устройство оно нифига не PnP. Это плата в слот ISA, адрес устанавливается джамперами, прерывание фиксированное.
Как в этих случаях поступают? Что и где почитать на этот счет?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 19-11-2014 11:25 » 

сам таким не занимался, но вроде надо поддержать архитектуру PnP драйвера, а ресурсы описать в Inf файле.
вроде для этого предназначен раздел INF LogConfig Directive
есть еще функции IoReportDetectedDevice/IoReportResourceForDetection - опять же сам не пользовался но вроде в эту сторону тоже надо посмотреть.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
yax123
Интересующийся

ru
Offline Offline

« Ответ #6 : 19-11-2014 12:00 » 

спасибо за направления рытья.
порывшись в примерах нарыл такие штуку:
WinDDK/7600.16385.1/src/general/ioctl/kmdf/
внутре написано что это non-PnP драйвер (и должен работать под win7)
это то что надо?

Еще вопрос. Вот я сейчас использую vc2008+WinDDK7600.
Этого достаточно чтобы писать любые виды драйверов под win7?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 19-11-2014 13:12 » 

на второй вопрос. список совместимости  можете посмотреть /DDK/7600.16385.1/install.htm
на первый вопрос - пример не очень удобный. он вообще о применении IOCTL а не pnp. он еще и KMDF - это вам точно драйвер придется с нуля писать.
мне кажется вам нужно:
1. разобраться как формировать inf файл для legacy устройств.
2. после этого модифицировать свой код под PnP структуру (то есть добавить обработчик AddDevice и обработать запросы IRP_MJ_PNP)


Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
yax123
Интересующийся

ru
Offline Offline

« Ответ #8 : 19-11-2014 13:54 » 

в целом у нас тут две задачи:
1. старую железку со старым драйвером запустить на win7
2. новую железку (почти такая же просто каналов больше) для нее написать новый правильный драйвер под win7 (творчески переосмыслив старый драйвер, один в один железяки не совпадают)

В конечном итоге нужен пункт 2. Но есть мнение, что это займет время Т1. А для поставки устройств он нужен уже через Т2<T1.
Поэтому есть мнение, что доработать старый драйвер займет времени Т3<T2<T1.
Если окажется что Т3 в целом больше чем 1/5 Т1 то имеет смысл забить на старый драйвер, и уже нормально написать драйвер под новую плату.
Есть волшебный третий вариант начать разработку под линукс (какая разница под что писать новый драйвер, но линукс в некотором смысле перспективней). Вот и проблема выбора.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 19-11-2014 15:04 » 

боюсь я не возьмусь предсказать)) слишком много нюансов может быть) от переделки за пару дней, до....
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines