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

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

ru
Offline Offline

« : 15-06-2013 13:00 » 

Здравствуйте уважаемые форумчане.
Хотелось бы научиться писать драйвера для pci, с языком C++  немного знаком.
Помогите пожалуйста.
Для того что бы написать драйвер нужна карта, если взять например 2 com port pci подойдет для обучения?
Какую документацию на нее нужно будет найти?
Спасибо.
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #1 : 15-06-2013 13:41 » 

vendor80, зависит от ОС под которую Вы будете писать этот драйвер, для Linux есть книга Linux Device Drivers 3 издание. Касательно карты - не знаю, наверное для которой есть более-менее полные спецификации и пример драйвера.
Записан
vendor80
Интересующийся

ru
Offline Offline

« Ответ #2 : 15-06-2013 13:56 » 

ОС Windows xp. С примером наверно не найду карту, только те что в магазине продают, на них обычно готовый драйвер есть, а исходников нет.  Что нужно знать о карте что бы написать для нее драйвер? Адреса ввода вывода и портов, vendorid, manufactureid, deviceid, можно посмотреть если поставить сначала драйвер заводской. Хочу только попробовать для опыта,сделать драйвер с функцией записи и чтения, или не получится?
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #3 : 15-06-2013 14:27 » 

vendor80, для начала - проштудировать DDK - как вообще писать драйвера, какие функции надо реализовать, чтобы всё работало, тут https://forum.shelek.ru/index.php/topic,14645.0.html Ochkarik собрал подборку литературы. А дальше - по карте - искать спецификации -  адреса портов и их функциями и всё прочее, и куда что надо писать из драйвера, чтобы железо поняло что от него хотят.
Записан
vendor80
Интересующийся

ru
Offline Offline

« Ответ #4 : 15-06-2013 14:55 » 

Хорошо приступаю. )
С драйверами ни разу не приходилось заниматься. Поэтому не совсем понимаю что для чего, не могу реально оценить возможно написать драйвер для магазинной карты свой. Хватит той информации которую можно узнать из диспетчера устройств с родным драйвером , потом его удалить и поставить уже собранный? За глаза будет если он будет читать и писать порт.
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #5 : 15-06-2013 15:16 » 

vendor80, драйвера нужны, чтобы обеспечить взаимодействие ОС и непосредственного оборудования. Боюсь по информации из диспетчера устройств Вы вряд ли сможете написать хороший драйвер, разве что найдёте для указанной карты спецификации с расписанными сведениями по портам и командам, которые в эти порты надо писать и статусы, которые из этих портов надо читать.
« Последнее редактирование: 17-06-2013 05:07 от darkelf » Записан
vendor80
Интересующийся

ru
Offline Offline

« Ответ #6 : 15-06-2013 15:20 » 

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

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

« Ответ #7 : 17-06-2013 11:32 » 

если задача чисто учебная и знания языка С - требуется заодно оживить, попробуйте посмотреть любой простенький пример из DDK без необходимости подключения аппаратной части. там помоему были такие. ну и типичный учебный пример "toacer" там, помоему, тоже был, но он довольно объемный.
драйвер для конкретно PCI от легаси-драйвера (без PnP устройства) - будет отличаться наличием inf файла и обработчика сообщений PnP менеджера. ну и стартует немного иначе.
попробуйте для начала легаси-драйвер собрать. это не так сложно, но появится база от которой потом можно отталкиваться.
драйвер под продаваемую железку писать - очень неудобно. документация на нее нужна будет. вряд ли найдете аппаратное ее описание.
« Последнее редактирование: 17-06-2013 11:42 от Sla » Записан

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

ru
Offline Offline

« Ответ #8 : 17-06-2013 18:56 » 

Спасибо за ответ. Немного почитал, и совсем запутался .Понял что структура DeviceExtension должен я сам объявить все ее поля,
А поля должны соответствовать структуре которая заложена в устройство?
Например в устройстве по  адресам  ffffff01 передатчик rs232  ffffff02 приемник.
То моя структура должна быть такой
struct DeviceExtension
{
UINT tx;
UINT rx;
}
Записан
Ochkarik
Команда клуба

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

« Ответ #9 : 18-06-2013 08:32 » 

DeviceExtension - это ваша личная структура для хранения всего что вам хочется, привязанная к экземпляру устройства (если оно есть или драйверу). ее поля могут быть любыми, работать с этой структурой будете только вы и никто больше).
начните с чтения Руссиновича, потом возьмитесь за книжку Они)
Записан

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

ru
Offline Offline

« Ответ #10 : 22-06-2013 19:42 » 

Появился еще вопрос у каждого устройства может быть до 8 функций, у каждый функции свое конфиг пространство, это пространство отличается от основного или одинаковые и у каждой функции может быть свой devid venid class bar?

Добавлено через 21 час, 31 минуту и 54 секунды:
Если правильно понял , то каждую функцию можно рассматривать как отдельное устройство.
Немного не понятно вот что если вставить две или три карты абсолютно одинаковые с ком портами.
система им как-то выдаст имена com 1 2 3 .. Они не будут перемешиваться например после перезагрузки?
Не совсем понимаю как драйвер будет работать если три карты с одинаковыми vid did.(   
« Последнее редактирование: 23-06-2013 17:14 от vendor80 » Записан
Ochkarik
Команда клуба

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

« Ответ #11 : 01-07-2013 08:28 » 

при старте ОС, начинают определятся все устройства на шине и соответственно по очереди инициализироваться. для каждого устройства создается свой экземпляр устройства.
порядок создания, как правило(!!!), определяется драйвером шины и нумерацией PCI слотов, и не меняется от запуска к запуску ОС. однако если после старта системы отключать/включать данные устройства через диспечер - то нумерация может и поменяться  на другую, а затем заново вернутся после перезагрузке к тому что получается по умолчанию.
Записан

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines