Отладка чужого драйвера
От: SolarWarez  
Дата: 12.10.06 12:55
Оценка:
Добрый день!

Нужна помощь людей реально сталкивавшихся с разроботкой PCI устройств и/или написанием драйверов для них...

Есть некая PCI плата ввода/вывода (более конкретно сказать не могу...)
Эта плата позволяет вводить в PC или выводить из PC некую информацию.
К этой плате производитель дает небольшой SDK, с помощью которого все это можно делать из свой программы...
Все хорошо, за исключением одной проблемы. SDK позволяет работать с платой либо на ввод данных, либо на
вывод. Но иногда, необходимо в реальном режиме времени вводить данные, обрабатывать их, и немного изменяя,
выводить обратно... В таких случая производитель предлагает использовать 2 платы в одном компьютере — одну
на ввод и другую на вывод данных.

Естественно, что возникает большое желание обойтись без второй платы т.к. ее стоимость — "имеет значение".

На мои вопросы, может ли их плата на самом деле работать одновременно и на ввод и на вывод или это чисто
программное ограничение (в чем есть резон производителю — чтобы брали больше карт) производитель платы упорно
отмалчиваеться...

Немного поковырявшись отладчиком в функциях SDK нашел, что как и следовало ожидать, вся работа с железом идет
через DeviceIoContorl... В принципе, я определил какой набор кодов и с какими данными шлеться устройству для
передачи и приема данных...

Теперь собственно сам вопрос: реально ли дизасемблировать или как-то посмотреть каким-либо отладчиком, что
конкретно делает драйвер, когда получает эти команды через DeviceIoContorl?
Т.е., я так полагаю, драйвер, получив код "запись данных в устройство" выполняет копирование данных из локальной
памяти компьютера в память платы по шине PCI, и при получении команды "чтении данных из устройства" — наоборот,
из памяти платы в память компьютера... Так вот, если самому узнать, как именно он это делает, то возможно ли будет
реализовать "комбинированный" цикл "чтение из устройства, модификация, запись в устройство"???

С драйверами никогда дела не имел, но ассемблер знаю...

Интересует мнение знающих людей, возможно ли так глубоко "исследовать" драйвер устройства без исходников, или это
практически не реально??? Если да, то чем лучше пользоваться?

И еще, как именно происходит копирование из локальной памяти в память устройства по шине PCI?
Какие функции Windows API для этого используютья? Или это все делаеться через порты ввода/вывода?

Кстати, поток данных там довольно большой, порядка 15 мегабайт в секунду, т.е. должны использоваться механизмы
DMA, если я правильно понимаю.... Вдруг это имеет значение...

Подскажите пожалуйста, кто сможет...

С уважением,
Владимир.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.