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

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

ua
Offline Offline

« : 25-01-2010 07:49 » 

Приветствую всех!
Есть плата своей разработки на FPGA FLEX10K от Altera, c ядром pci_mt32, все обрамление написано мной на verilog. Плата успешно работает под DOS, но коды писал другой на Pascal, да он уже и уволился. Теперь надо обслуживать эту PCI-плату под Windows XP, но коды писать уже мне. В далекой перспективе есть еще проекты на PCI-X и PCIe.

Сейчас я хочу:
1. находить свою PCI-плату в компьютере;
2. обмениваться с этой платой 32-разрядными данными;
2. реагировать на её прерывания.

Перечитал уже несколько книг, но в голове яснее по обслуживанию PCI-плат не стало, даже еще хуже. Все как-то фрагментами, а понимания как же это делается - нет. По этому, нужна «помощь зала», хотя бы пока по первому ряду вопросов:
Как находить свою PCI-плату в компьютере, ведь там их может быть несколько?
Как считать назначенный этой плате конфигурационный файл после процедур PnP?   

Основные книги у меня есть в djvu и я с ними работаю:
1) Уолтер Они «Использование microsoft windows driver model»
2) М. Руссинович, Д. Соломон "Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000."
3) В. П. Солдатов "Программирование драйверов Windows 3-е изд.
4) Примеры "Программирование драйверов"На http://www.pcports.ru/Articles.php

Буду очень благодарен за дельный ответ, по сути.

Хотя я все же больше разработчик цифровой аппаратуры на FPGA, но работаю и с Microsoft Visual C++ 6.0, до этого был Borland C++ Builder 6. Последняя из моих работ - это Ethernet-100 (LAN91C111), где на C++ написан урезанный стек TCP/IP для Nios II  7.2 IDE.
Записан
YouROK
Интересующийся

ru
Offline Offline

« Ответ #1 : 26-01-2010 07:04 » 

Я новичек в этой области, но всетаки
по поводу 1, когда плата воткнута в компьютер, и в виндовсе заходишь в диспечер устройств,
там должно быть неизвестное устройство, так вот посмотреть vid&pid устройства и написать inf
файл по ним, и потом когда уже напишешь драйвер то на каждую плату будет ставиться драйвер,
это в теории и моё мнение, а вот на практике даже и не знаю.
Записан
Ochkarik
Модератор

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

« Ответ #2 : 26-01-2010 07:44 » 

Serhiy_UA, доброго!
находить свою плату в windows не надо) в процессе PnP - перечисляются все устройства на шине. все устройства имеют VendorID и DeviceID по ним - ищется Inf файл, где сопоставлены устройства и драйвер его обслуживающий.
если идентичных устройств - несколько, они различаются номером слота на шине. ресурсы конфигурирует сама ОС, поэтому с этим никаких сложностей не возникнет.

насчет 2-3. поищите посты в форуме насчет NeMega DriverStudio 3.2. я несколько раз рассказывал как пользоваться ее визардом для создания рыбы драйвера.
она вам сделает рыбу драйвера и с обменом словами и с затычкой на прерывание. вполне работоспособный код, тем более если у вас есть готовая и отлаженная плата - заработает сразу) правда если проверено только под DOS - возможно будут вопросы по реализации PnP на самой плате. там надо конфигурационные регистры правильно заполнить... но даже без драйвера - PCI плата ОДНОЗНАЧНО должна обнаруживаться в Windows как устройство в дереве устройств!

PS честно говоря на такие общие вопросы довольно сложно ответить - слишком многое написать надо, а общую структуру лучше в книгах))) поиграйтесь визардом с Driver Studio, у вас появятся более конкретные вопросы))))


Записан

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

ua
Offline Offline

« Ответ #3 : 26-01-2010 14:06 » 

Спасибо за полезные ответы, я сейчас их прорабатываю.
Уточняю суть по пункту «находить свою PCI-плату в компьютере».

1. Приложение без меня должно сообщить, есть или нет в системе моя PCI-плата. Как это лучше сделать?

2. Приложение должно расшифровать содержимое 256 байт конфигурационного пространства. Показать физические адреса выделенных пространств памяти или портов ввода-вывода. Здесь тоже вопрос, как?

То есть разобраться бы с этим, а потом уже обмены и прерывания.
Записан
Ochkarik
Модератор

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

« Ответ #4 : 26-01-2010 17:36 » 

Serhiy_UA, ээээ... в Windows XP... а точнее начиная с Windows 2000... приложение не имеет прямого доступа к физическому адресному пространству(грубо говоря, хотя можно и отмапировать драйвером)... к портам I/O - тоже. из приложения вы можете осуществить все вышеперечисленное вызывая только функции своего драйвера.
дело в том что оба приведенных вами пункта - выполняет Windows (грубо говоря) - без вашего участия. по результатам - проверки "1" - Windows загрузит ваш драйвер и скажет ему "2" - все физические адреса которые он потребовал.

конкретнее:
по приходу IRP_MN_START_DEVICE, в переменной
  PIO_STACK_LOCATION       IOStack = IoGetCurrentIrpStackLocation(Irp);
находится перечисление всех требуемых ресурсов (массив структур типа CM_PARTIAL_RESOURCE_DESCRIPTOR)
  PCM_PARTIAL_RESOURCE_DESCRIPTOR pPartialDescriptors = &IOStack->Parameters.StartDevice.AllocatedResourcesTranslated->List->PartialResourceList.PartialDescriptors[i]
поле pPartialDescriptors->Type определяет тип элемента - вам понадобятся типы CmResourceTypePort, CmResourceTypeInterrupt, CmResourceTypeMemory.

адреса портов pPartialDescriptors->u.Port.Start длина окна pPartialDescriptors->u.Port.Length
отображаемая память pPartialDescriptors->u.Memory.Start, длина pPartialDescriptors->u.Memory.Length

и т.д. по всем значениям массива от 0 до IOStack->Parameters.StartDevice.AllocatedResourcesTranslated->List->PartialResourceList.Count

Записан

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

ua
Offline Offline

« Ответ #5 : 27-01-2010 08:20 » 

Спасибо за подробную информацию в ответе, для начинающих это очень важно.
 
Еще вопрос.
После запуска msinfo32.exe, просмотрел сведения о системе и убедился в наличии в ней системного драйвера PCI шины с именем pci.
Могут ли я как-то использовать (приспособить) этот драйвер для своих задач? Если да, то как?
Записан
Ochkarik
Модератор

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

« Ответ #6 : 27-01-2010 08:56 » 

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

http://msdn.microsoft.com/en-us/library/aa490244.aspx
вам придется делать то что нарисовано под цифрой 4
программирование устройств в Windows - кардинальным образом отличается от программировании под DOS.
Записан

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

ua
Offline Offline

« Ответ #7 : 27-01-2010 10:58 » 

Допускается ли в  WinXP из своих приложений использовать функций PCI BIOS (через каталог 32-разрядных сервисов)? Подобно тому, как это делалось ранее на ассемблере, например, через функции прерывания Int 1Ah.
Записан
Ochkarik
Модератор

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

« Ответ #8 : 27-01-2010 13:39 » 

Serhiy_UA, нет, этого делать не стоит. кроме того вам это сделать из приложения - не позволят.
я повторяю - все необходимые манипуляции с конфигурационным пространством PCI - выполняет операционная система. и не стоит ей в этом мешать.
Записан

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

ua
Offline Offline

« Ответ #9 : 28-01-2010 07:34 » 

Ochkarik, еще раз СПАСИБО за содействие и помощь!

1. Ваши оценки возможностей функций PCI BIOS для WinXP приняты.
Хотя, еще вдогонку, есть книга Гук М. Ю. Шины PCI, USB и FireWire. Энциклопедия. — СПб.: Питер, 2005. — 540 с.: ил.
В ней автор советует использовать функций PCI BIOS. Если они не идут на WinXP, начавшего жизнь в 2001 году, то зачем  о этих функциях PCI BIOS в книге 2005 года? А в целом книга супер, подобных книг мало, но было бы еще ценнее, если бы там было больше о программировании.

2. Попутно еще один вопрос:
Могут ли WinAPI функции помочь в обслуживании PCI-плат?

3. DriverStudio 3.2 нашел здесь, скачал, начинаю осваивать.
http://www.cracklab.ru/download.php?action=list&n=MTA=
Взял из Examples пример проекта pcienum, в VC++6 все компилируется.

4. В 4-ом посте было приведен сложный оператор:   PCM_PARTIAL_RESOURCE_DESCRIPTOR pPartialDescriptors = &IOStack->Parameters.StartDevice.AllocatedResourcesTranslated->List->PartialResourceList.PartialDescriptors;
Мне он оказался не по силам и я, в одном из форумов, попросил синтаксически объяснить его, что мне и сделали. Но там вопрос вызвал живую дискуссию по стилю программирования, и попросили сообщить, что стоит перед оператором, и после него. Поэтому, если можно, выложите весь файл или его части, для этого консилиума.

« Последнее редактирование: 28-01-2010 11:59 от Serhiy_UA » Записан
Ochkarik
Модератор

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

« Ответ #10 : 28-01-2010 12:42 » 

1. увы, большинство книг пишется при помощи Ctrl+C/Ctrl+V.
2. только драйвер. это - однозначно.
3. не надо Examples) запустите визард нового проекта. он должен был встроится в VS.
4. перед оператором стоит цикл по всем "i") видимо народ смутился от количества вложений. это структура ядра. одна из длинных, с переменной длинной да еще и местами union.
Код:
    //Аппаратные ресурсы-----------------------------------------------------------

NTSTATUS    
InitResPCI(   PIO_STACK_LOCATION    IOStack,
              ...)
{
DWORD    i;
PCM_PARTIAL_RESOURCE_DESCRIPTOR pPartialDescriptors;

    for(i=0; i<IOStack->Parameters.StartDevice.AllocatedResourcesTranslated->List->PartialResourceList.Count; i++)
    {
pPartialDescriptors =
   &IOStack->Parameters.StartDevice.AllocatedResourcesTranslated->List->PartialResourceList.PartialDescriptors[i];
//pPartialDescriptors->ShareDisposition =/*CmResourceShareDeviceExclusive, CmResourceShareDriverExclusive, CmResourceShareShared. */

switch (pPartialDescriptors->Type)
{
case CmResourceTypePort:
...порты I/O
   break;
case CmResourceTypeInterrupt:
...прерывания
   break;
case CmResourceTypeMemory:
...отображаемая память.
   break;
case CmResourceTypeDma:
...старье
   break;
case CmResourceTypeDeviceSpecific:
...всяко разно
   break;
default: //ERROR!!!*******
....обработка нештатных значений
   break;
};
    };

PS а тем людям на форуме передайте, что PIO_STACK_LOCATION - одно из полей IRP запросов ядра windows. и все ее используюст с 98 года по сей день не подозревая об этом))
если интересно
http://msdn.microsoft.com/en-us/library/dd852053.aspx
http://msdn.microsoft.com/en-us/library/ms806454.aspx
и
http://msdn.microsoft.com/en-us/library/dd852068.aspx
http://msdn.microsoft.com/en-us/library/dd852047.aspx
http://msdn.microsoft.com/en-us/library/dd852062.aspx
http://msdn.microsoft.com/en-us/library/dd852041.aspx
http://msdn.microsoft.com/en-us/library/dd852009.aspx
http://msdn.microsoft.com/en-us/library/dd852009.aspx

И главное: на счет Страуструп-а.... - вторую заповедь пусть вспоминают чаще))))
« Последнее редактирование: 28-01-2010 21:53 от Ochkarik » Записан

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

ua
Offline Offline

« Ответ #11 : 29-01-2010 08:36 » 

Поработал с DriverStudio 3.2 на двух следующих пробных проектах (они в архивах):
1. pcienum.zip что взял из каталога примеров.
2. MyPCIa.zip построил с помощью DriverWizard.

В Microsoft Visual C++ 6.0 выполнил запуск DriverStudio –> Build with BUILD.EXE.
В  1-ом примере все выполнилось без замечаний, но файл *.sys не был получен, я его не нашел.
Во 2-ом выдано замечание «U1073: don't know how to make 'd:\PROGRA~1\Compuware\DriverStudio\DriverWorks\lib\i386\FREE\vdw_wdm.lib'»
То есть как бы нет vdw_wdm.lib, я по каталогам ее тоже не нашел.

Тексты сообщений сведены в файле Build.txt.

Как быть? Ведь цель, как я понимаю, это хотя бы получить *.sys?
Нужна помощь, что здесь не так?

* Build.txt (2.57 Кб - загружено 1361 раз.)
* pcienum.zip (326.42 Кб - загружено 786 раз.)
* MyPCIa.zip (67.47 Кб - загружено 803 раз.)
« Последнее редактирование: 29-01-2010 08:40 от Serhiy_UA » Записан
Ochkarik
Модератор

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

« Ответ #12 : 29-01-2010 08:56 » 

"не так" - следующее: это плохие примеры. они написаны на классах... поверьте на слово: НЕ НАДО их использовать. КАТЕГОРИЧЕСКИ!!! поищите на форуме я уже десять раз объяснял, почему их не нужно использовать. в DS 3.2 есть две опции - генерация проекта с использованием классов и с использованием ЧИСТОГО Си (без C++).

еще раз повторяю: запустите визард VS. там должен быть пункт генерации драйвера(NuMega при инсталяции должна была добавить).
используйте данный визард ТОЛЬКО для генерации Си проектов(ни в коем случае не включайте опцию использования классов С++!!!!!).
визард у вас попросит указать устройство для которого нужен драйвер(заранее вставьте в машину - должно отображаться в списке устройств). и под вашу железку сгенерит и драйвер, и тестирующее приложение и inf файл для установки драйвера. вы его запустите и будете наслаждаться жизнью. если у вас скромные запросы, то скорее всего вам и трогать его не придется.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Модератор

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

« Ответ #13 : 29-01-2010 09:01 » 

ЗЫ через пол часика найду вам ссылок что нажимать

значится так. сейчас выложу ссылку на пример с картинками, НО!
там картинки и комментарии ДЛЯ СТАРОЙ ВЕРСИИ 2.0. Тогда у NuMega был визард который делал рыбу драйвера только на С++. начиная с версии 3 они добавили возможность генерации на Си без использования надстроек на классах. И только в таком режиме имеет смысл использовать данный визард. только голый Си.

в общем делаете примерно все то же что на картинках, но: на самом первом шаге вместо выбора "WDM драйвер с поддержкой DriverWorks С++",   выбираете просто WDM драйвер. там был такой пункт. или у них раздельные визарды были - сейчас не помню.
короче все файлы проекта у вас должны появится с расширением *.c (а не cpp!)
http://www.codenet.ru/progr/visualc/wdmnumega/

ЗЫ на текст этой статьи не смотрите, он устарел, под очень старую версию DS и вобще про классы.
« Последнее редактирование: 29-01-2010 09:26 от Ochkarik » Записан

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

ua
Offline Offline

« Ответ #14 : 29-01-2010 09:36 » 

Все получилось!!!  С п а с и б о !!!
По крайней мере формально я теперь имею MyPCIb.sys и MyPCIb.inf
Продолжаю осваивать дальше. Тоже пытаюсь описывать действия c картинками окон, потом, если будет надо, выложу *.doc.

Статью "Использование NuMega DriverStudio для написания WDM-драйверов" еще не видел. Если есть еще аналогичные статьи, дайте, пожалуйста, ссылки. 
« Последнее редактирование: 29-01-2010 09:41 от Serhiy_UA » Записан
Ochkarik
Модератор

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

« Ответ #15 : 29-01-2010 11:06 » 

вообще то, там помимо проекта драйвера должнен был сгенерится *.exe проект для использования этого драйвера. либо там отдельная кнопка была - генерить тестовое приложение... посмотрите повнимательней.

PS надеюсь то что вы теперь MyPCIb без классов) а лучше выложите его, если можно, проверю...))
а статьи... вобще я www.google.com пользуюсь))))
Записан

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

ua
Offline Offline

« Ответ #16 : 01-02-2010 12:03 » 

Прочел статью из http://www.codenet.ru/progr/visualc/wdmnumega/, но умней, почему-то, не стал.  Не понял
С помощью DriverStudio 3.2 создал проект MyPCIc (он в приложении). Есть вопросы:
1. Тестовую программу *.exe я не нашел, и кнопку для ее генерации тоже. Где она может быть?
2. Как я понимаю, функции из MyPCIc\app\, можно напрямую включать в свою программу. Но все же не понятно, как с их помощью, выполнить поиск своей платы в компьютере?

* MyPCIc.zip (358.6 Кб - загружено 742 раз.)
Записан
Ochkarik
Модератор

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

« Ответ #17 : 01-02-2010 16:31 » 

почитайте руссиновича) там все есть.
если будет слишком сложно - возмите что нибудь по азам программирования обычных приложений для windows. и только потом почитайте руссиновича)

1. плохо искали) MyPCIc\ReadMe.htm
2.  MyPCIc\app - это и есть тестовая программа! app - это от слова application(приложение)
3.  MyPCIc\driver - ЭТО драйвер.
4.  ПОИСК ДЕЛАЕТ WINDOWS! судить(программно) о наличии платы вы можете через функции ВАШЕГО драйвера когда(и если) он будет загружен. посмотрите код тестового приложения. судить (визуально) о ее наличии без установки драйвера - вы можете если откроете менеджер управления устройствами.(там есть и программные функции но они вряд ли вам пригодятся)

5 почитайте о системе PnP (Plug And Play).

PS не уверен что установка в PCI вендора производителя равного FFFF (судя по коду inf файла) - хорошая идея....
« Последнее редактирование: 01-02-2010 16:40 от Ochkarik » Записан

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

ua
Offline Offline

« Ответ #18 : 04-02-2010 11:56 » 

Приветствую, Ochkarik! Очень нужна Ваша помощь.

Сделал по пунктам следующее:
1. С помощью DriverWizard выполнил все шаги для PCI-платы, в результате имею драйвер и тестовое приложение. В шаге “Hardware Bus” выбрал свою подключенную плату через “Select physical devicу…”, то есть она введена, а ее параметры свел для справки в Pci0.txt.
2. Выполнил компиляцию отдельно драйвера и приложения, все в норме. Имею PCI0.inf и PCI0.sys, которые установил через «Панель управления – Установка оборудования», а затем перезапустил систему. Система сообщила, что найдено новое оборудование, которое работает нормально.
3. Запускаю тестовое приложение PCI0App.exe – выдается сообщение «Программа не запускается».
Аналогичным образом применил все к другой PCI-плате, поддерживающей на моем компьютере один из портов USB. Результат получился аналогичный.

Что может быть не так? Почему не работает тест?

Проект в приложении.
Что-то не хочет брать большой проект, хоть я его и разбил на части. Пришлось отправить по частям в разных постах.

Еще хочу отметить, что драйвер включен в системный реестр, я его наблюдаю через regedit.exe в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Pci0\Enum
В частности PCI\VEN_1172&DEV_0004&....



* Pci0.part01.rar (358.4 Кб - загружено 813 раз.)
« Последнее редактирование: 04-02-2010 13:04 от Serhiy_UA » Записан
Serhiy_UA
Интересующийся

ua
Offline Offline

« Ответ #19 : 04-02-2010 12:03 » 

часть 2

* Pci0.part02.rar (358.4 Кб - загружено 790 раз.)
Записан
Serhiy_UA
Интересующийся

ua
Offline Offline

« Ответ #20 : 04-02-2010 12:03 » 

часть 3

* Pci0.part03.rar (358.4 Кб - загружено 807 раз.)
Записан
Serhiy_UA
Интересующийся

ua
Offline Offline

« Ответ #21 : 04-02-2010 12:04 » 

часть 4

* Pci0.part04.rar (105.33 Кб - загружено 797 раз.)
Записан
Ochkarik
Модератор

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

« Ответ #22 : 04-02-2010 15:58 » 

операционка какая? если виста или Win7 - возможно надо запускать приложение от имени администратора(в свойствах приложения была такая галочка). хотя и для XP тоже стоит попробовать.
дело в том что если мне не изменяет память, в генеренном автоматом inf файле доступ к драйверу разрешен только для админов.

PS попробуйте - отпишитесь что получилось. если не получится посмотрю код)

PPS дословно - какое сообщение выдает?
Записан

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

ua
Offline Offline

« Ответ #23 : 05-02-2010 07:24 » 

Работаю в WinXP, как администратор. На двух компьютерах один и тот же результат.
Компиляцию выполнил для режима Win32 Free.
Драйвер установил.
Запускаю программу в VC++6 через Build->Execute Pci0App.exe. Получаю сообщения:
"Could not execute: Bad executable format (Win32, error 193)", а затем
"Cannot execute program."

Если запускаю из Total Commander, то сообщает "Программа не запускается".

Что может быть?

« Последнее редактирование: 05-02-2010 07:33 от Serhiy_UA » Записан
Ochkarik
Модератор

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

« Ответ #24 : 05-02-2010 08:02 » 

настройки компиляции exe-шного проекта видимо не верны...
постараюсь посмотреть попозже.
одна беда - у меня студия только 2005/2008 стоит.
Записан

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

ua
Offline Offline

« Ответ #25 : 05-02-2010 09:02 » 

1. У меня, помимо Microsoft Visual C++ 6.0, на компьютере стоит и Microsoft Visual Studio 2008. Но я думал, что DriverStudio 3.2 только для VC++6. Тем более, что после установки DriverStudio 3.2 произошло автоматическое включение ее в VC++6. Если драйвера пишутся еще и на MVS2008, то подскажите, как в MVS2008 начать работу с DriverStudio 3.2.  Или все же продолжать работать в VC++6?

2. В соседнем топике было написано "все никак не разберусь с настройкой прав доступа приложений к функциям драйвера (это в inf файле). приходится запускать приложения от имени администратора. иначе приложение не видит драйвер вообще."
При запуске системы на 1-ом компьютере, я вошел как администратор, а на 2-ом просто вошел - система никаких вопросов не задавала. По этому, не понятно все же как "запускать приложения от имени администратора"? 

3. Если можно, пожалуйста, проверьте мой проект, а то работа остановилась.
Записан
Рыжий Тигра
Гость
« Ответ #26 : 05-02-2010 10:02 » 

Драйвер установил.
Запускаю программу в VC++6 через Build->Execute Pci0App.exe. Получаю сообщения:
"Could not execute: Bad executable format (Win32, error 193)", а затем
"Cannot execute program."
Если запускаю из Total Commander, то сообщает "Программа не запускается".
Что может быть?
Что-то не в порядке со структурой заголовка .exe'шника - воспринимается системой как драйвер. Я начинал эту фигню копать, но бросил - придумал способ изящнее: создал новый проект типа "win32 application" и включил в него те же исходные файлы, что и в тестовом приложении. Всё отлично скомпилировалось и заработало.
ЗЫ. Всё делалось под MSVS6 и DDK2000.
« Последнее редактирование: 05-02-2010 10:06 от Рыжий Тигра » Записан
Ochkarik
Модератор

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

« Ответ #27 : 05-02-2010 10:09 » 

не... DS когда выпускалась VS2005 еще не было. не то что 2008...
в общем то можно и в 2008 работать, но там настроек много, я так с кондачка не объясню в двух словах. где то на фоуме выкладывал нескоьлько раз, но лучше не заморачивайтесь пока.

с драйвером то я так понимаю все в порядке. просто приложение неверно компилируется.
фактически надо создать новый проект и перетащить туда код тестового приложения. я думаю это будет проще...
у меня он в 2005 его сконвертил но видимо совсем не верно. не компилируется.

поправил cheked конфигурацию для приложения в VS2005.
скопируйте проект (чтоб драйвер не запороть)
и подмените там выложенные файлы.
потом откройте в VS 2008 проект Pci0.sln
скомпилируйте только приложение в cheked конфигурации.

пардон - на большее времени сейчас нет) тоже - работа А черт его знает...


PS Рыжий Тигра, можно и так) выложи людям проектик?)

* Pci0.zip (2.34 Кб - загружено 800 раз.)
« Последнее редактирование: 05-02-2010 10:11 от Ochkarik » Записан

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

ua
Offline Offline

« Ответ #28 : 10-02-2010 12:20 » 

к Рыжий Тигра
Последовал вашим рекомендациям.
Создал новый проект типа "win32 application" и включил в него те же исходные файлы, но ничего не получилось, уже на этапе компиляции выдаются ошибки.
Мой проект, созданный в DriverStudio 3.2 в приложении. Нужна помощь, полный ступор.......... 
Записан
Ochkarik
Модератор

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

« Ответ #29 : 11-02-2010 19:48 » 

пользуйтесь тем что я вам во вложении отдал)
а вообще - вам просто надо с ключами компиляции разобраться. там неправильные дефенишены стояли в настройках проекта.
откройте свойства проекта приложения(настройки я вам выложил) и посмотрите различия между дебаговой и релизовой настройкой для приложения.
« Последнее редактирование: 11-02-2010 19:54 от Ochkarik » Записан

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

ua
Offline Offline

« Ответ #30 : 15-02-2010 09:06 » 

Сравнил ключи компиляции, но зацепки пока нет. По прежнему нуждаюсь в помощи.

1. У меня Visual C++6.0, DriverStudio 3.2 и DDK2000. Все делаю по инструкции для релиза, все проходит, но не запускается Pci0App.exe.
2. Собирал отдельно Pci0App - не компилируется, ошибки.
3. Может кто прогонит шаги для PCI, там вроде все на автомате; что-же у меня не так?


Купил книгу Солдатова 3-е издание, может, поможет. Но хотелось бы начать с DriverStudio 3.2, там все так красиво.
« Последнее редактирование: 15-02-2010 09:08 от Serhiy_UA » Записан
Ochkarik
Модератор

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

« Ответ #31 : 15-02-2010 19:05 » 

проект из моего сообщения:
https://forum.shelek.ru/index.php/topic,23240.msg226137.html#msg226137
пытались использовать?
Записан

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

ua
Offline Offline

« Ответ #32 : 16-02-2010 07:22 » 

Да пытался. Но каждый раз, после подмены Pci0.sln выдается сообщение "Some errors occurred during conversion...".

Последовательность была такой:
1. Создавал чистый каталог и в него копировал содержимое директория "app", что до этого создал в Microsoft Visual C++ 6.0.
2. Затем в Microsoft Visual Studio 2008 запускал новый проект, в результате предлагалось его конвертировать, что и делал. Конвертация была успешной.
3. Выходил из MSVS2008, вручную подменял файл Pci0.sln (кстати, название его уже становилось Pci0app.sln). Потом опять запускал MSVS2008, который опять предлагал конвертацию.
4. После вторичной конвертации выдавались сообщения об ошибках, процесс остановился....   

Если есть необходимость посмотреть лог, то он в приложении.

* UpgradeLog.XML (1.63 Кб - загружено 871 раз.)
Записан
Ochkarik
Модератор

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

« Ответ #33 : 16-02-2010 07:30 » 

</Property></Properties><Event ErrorLevel="2" Project="Pci0" Source="Driver\Pci0.vcproj" Description="Failed to upgrade project file 'D:\Program Files\Compuware\DriverStudio\DriverWorks\MyWorkFolder\Pci0e\Driver\Pci0.vcproj'.  Please make sure the file exists and is not write-protected.">
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Модератор

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

« Ответ #34 : 16-02-2010 11:26 » 

скопировать весь проект.
в проект распаковать мое вложение.
запустить из него Pci0/app/pci0app.vcproj
Записан

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

ua
Offline Offline

« Ответ #35 : 16-02-2010 12:46 » 

Спасибо большое! Получилось и в MSVS2008.
1. Но компиляция проходит только для checked, а для free - нет: выдается сообщение "cannot open input file ntdll.lib". То есть пока желаемый результат не достигнут.
2. Драйверная часть всего проекта не доступна после конвертации, это в порядке вещей для MSVS2008?

Я приношу извинения, если сильно отвлекаю. Все начинающие иногда такие надоедливые...



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

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

« Ответ #36 : 16-02-2010 13:06 » 

я уже писал, что в виду отстутсвия времени, поправил настройки проекта только для cheked конфигурации) free - можете поправить сами по образу и подобию исправлений в cheked) там только оптимизацию включить. дефенишены типа DEBUG убрать и пару путей поменять.
что касается компиляции драйвера из того же проекта - впринципе это возможно но надо копаться. увы, сейчас со временем не очень(
PS а вобще что надо делать описано в теме (там выложены ссылки в том числе для VS8) https://forum.shelek.ru/index.php/topic,14406.0.html
« Последнее редактирование: 16-02-2010 13:08 от Ochkarik » Записан

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines