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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Портирование 32-битных драйверов в 64-битные  (Прочитано 37063 раз)
0 Пользователей и 1 Гость смотрят эту тему.
marius
Гость
« : 01-08-2007 06:06 » 

Интересно, кто-нибудь портировал свои 32-драйверы на 64-битную платформу ?
У меня лично ничего не получается.
Я поставил Windows Xp Professional X64 Edition.
Используя Windows Server 2003 DDK (3790), пересобирал свой драйвер как с "64 bit Build Environment",
так и с "AMD64 bit Build Environment" (AMD64 инструкции поддерживаются), но результат один и тот же: 
  Hardware was not installed because the wizard cannot find the necessary software.
  If a driver was provided, make sure it is disigned to work with Windows for x64-based systems.
INF-файл модифицировал по аналогии с системными. Очевидно, проблема в чем-то другом...
Записан
Ochkarik
Модератор

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

« Ответ #1 : 01-08-2007 09:53 » 

как делать inf:
Device Installation: Windows DDK
Creating INF Files for Multiple Platforms and Operating Systems

а вообще посмотрите в DDK- поиск по строке x64. там кучка мелочей по компиляции - рекомендую проверить ключики.
но раз уж вам удалось скомпилировать файл под x64(если он скомпилирован правильно), то скорее всего ошибки в inf-е...
IMHO.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
marius
Гость
« Ответ #2 : 01-08-2007 10:20 » 

По документации DDK 2003 вряд ли напишешь правильный INF-файл.
Этот вывод можно сделать, посмотрев пример реального INF-файла в 64-битной Винде.
Так, во всех INF-файлах в секции [Manufacturer] я вижу TargetOSVersion = NTamd64
 например, %Msft% = MSFT,NTamd64
Ключевого слова NTamd64 нет в доке DDK2003.
Записан
Ochkarik
Модератор

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

« Ответ #3 : 01-08-2007 11:57 » 

Creating INF Files for x64-Based Systems (Windows XP and later)
In general, you cannot use a single INF file that differentiates between device installations based on the operating system version. For example, if the files or registry settings that support a device differ between versions of x64-based operating systems, you must create an operating system–specific INF file for each version.

However, if a device does not require an operating system–specific installation, you can create a single cross–operating system INF file for x64-based systems that run Windows XP and later.

Because Windows Server 2003 SP1 and later require an .ntamd64 platform extension on a Models section name, but do not require this extension on other section names, the simplest approach to create and to maintain a cross–operating system INF file for x64-based systems is to include the .ntamd64 extension only on the names of Models sections.

To create such a cross–operating system INF file, do the following:

Create a valid INF file that contains the generic entries that are required in all INF files, as described in General Guidelines for INF Files.
Include an INF Manufacturer section that includes a manufacturer-identifier that specifies the Models section name for the device and that specifies the .ntamd64 platform extension. For example, the following Manufacturer section specifies a Models section name of "AbcModelSection" for an Abc device and the .ntamd64 platform extension.
[Manufacturer]
; The manufacturer-identifier for the Abc device.
%ManufacturerName%=AbcModelSection,ntia64


Include a Models.ntamd64 section whose name matches the Models section name that is specified by the manufacturer-identifier in the Manufacturer section. For example, the following AbcModelSection.ntamd64 section for an Abc device includes a device-description that specifies an install-section-name of "AbcInstallSection".
[AbcModelSection.ntamd64]
%AbcDeviceName%=AbcInstallSection,Abc-hw-id




Include a DDInstall section whose name matches the install-section-name that is specified by the Models section. For example, the device-description in an AbcModelSection section specifies the following AbcInstallSection section for an Abc device.
[AbcInstallSection]
; Install section entries go here.




Include other device-specific sections that are required to install the device, but do not include an .ntamd64 platform extension on names of these sections. For more information about INF file sections and directives, see Summary of INF Sections and Summary of INF Directives.

For information about creating a single cross–operating system INF for all platform types, see Cross-Platform INF Files.


RTFM!!! блин, там есть ВСЕ!!!
Записан

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

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

« Ответ #4 : 01-08-2007 12:07 » 

и второе оттуда же
Testing Installation on x64-Based Systems (Windows Server 2003 SP1 and Later)
For testing purposes only, the requirement that a Models section name include an .ntamd64 extension can be suppressed. To suppress this requirement, create the following registry value entry under the subkey HKLM\Software\Microsoft\Windows\CurrentVersion\Setup and set this value entry to one:

DisableDecoratedModelsRequirement:REG_DWORD


After setting the DisableDecoratedModelsRequirement value entry to one, restart the system and then install the device.

To restore the platform extension requirement, delete the DisableDecoratedModelsRequirement value entry or set it to zero, and then restart the system.

ЗЫ
marius, сорри, чет я распалился) просто не вспомню случая, когда в документации майкрософта чего то не было) выложи inf - посмотрим)
« Последнее редактирование: 01-08-2007 12:29 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
marius
Гость
« Ответ #5 : 01-08-2007 15:35 » 

Ну да, точно такую же инфу я и сам нашел на сайте микрософта (но не в доке DDK2003). Только это всё мне ничего не даёт.
Вот INF-файл (лишнее убрал):

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; MYDEVICE.INF
; Copyright (c) 2007 XXX Inc.
;
[version]
Signature  = "$Windows NT$"
Class      = Net
ClassGUID  = {4d36e972-e325-11ce-bfc1-08002be10318}
Provider   = %XXX%
DriverVer  = 01/07/2007,1.0.0.1

[Manufacturer]
%XXX%=XXX, NTamd64

; 64-bit Windows
[XXX.NTamd64]
%USB\VID_0547&PID_2131.DeviceDesc%=MY_DEVICE_w64.ndi, USB\VID_0547&PID_2131, USB\VID_0547&PID_0080

[MY_DEVICE_w64.ndi.NT]
Characteristics = 0x04   ; NCF_PHYSICAL (NO UI)
BusType=0
AddReg=MY_DEVICE_w64.addreg
CopyFiles= MY_DEVICE_w64.CopyFiles

[MY_DEVICE_w64.CopyFiles]
MyDevice.sys,,,2

[MY_DEVICE_w64.addreg]
HKR, Ndi,                                   Service,        0, "MYDEVICE"
HKR, Ndi\Interfaces,                     UpperRange,        0, "noupper"
HKR, Ndi\Interfaces,                     LowerRange,        0, "serial" ; "nolower"

[MY_DEVICE_w64.ndi.NT.Services]
AddService = MyDevice, 2, MY_DEVICE_w64.Service

[MY_DEVICE_w64.Service]
DisplayName     = "My Device"
ServiceType     = 1 ;%SERVICE_KERNEL_DRIVER%
StartType       = 3 ;%SERVICE_DEMAND_START%  ; Mandatory for USB devices
ErrorControl    = 1 ;%SERVICE_ERROR_NORMAL%
ServiceBinary   = %12%\MyDevice.sys
LoadOrderGroup  = NDIS;   Extended Base

[DestinationDirs]
DefaultDestDir        = 12
MY_DEVICE_w64.CopyFiles = 12

[Strings]
XXX="XXX Inc."
USB\VID_0547&PID_2131.DeviceDesc="My device"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


И всё таки, есть ли здесь кто-нибудь кому удалось сделать такое портирование ?
Записан
Ochkarik
Модератор

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

« Ответ #6 : 02-08-2007 09:39 » 

мешанина какая то...)
; 64-bit Windows
[XXX.NTamd64]
%USB\VID_0547&PID_2131.DeviceDesc%=MY_DEVICE_w64.ndi, USB\VID_0547&PID_2131, USB\VID_0547&PID_0080
этой строкой вы объявляете секцию установки MY_DEVICE_w64.ndi, причем для NTamd64!
а где сама секция то?
она у вас почему то [MY_DEVICE_w64.ndi.NT] и [MY_DEVICE_w64.ndi.NT.Services].
попробуйте переопределить их в
[MY_DEVICE_w64.ndi.ntamd64] и [MY_DEVICE_w64.ndi.ntamd64.Services]
 
остальное вроде в порядке.

PS вобще это стандартные расширения (.nt  .ntx86  .ntia64   .ntamd64) для секций  а ля Manufacturer, Models, CatalogFile и т.д. - их не смешивают.

и PPS -  у меня в ддк все это есть... DDK 3790.1830 из пакета  KMDF 1.0 ставил.

PPPS а вообще имена секций можно с точкой задавать?)  я бы от греха подальше .ndi постфикс убрал бы...
хм, можно оказывается! решил сам почитать)

http://msdn2.microsoft.com/en-us/library/ms790170.aspx

и главное:
http://msdn2.microsoft.com/en-us/library/ms790214.aspx

If a cross–operating system INF file contains decorated install-section-name.nt, install-section-name.ntx86, install-section-name.ntia64, or install-section-name.ntamd64 sections, it must also have additional parallel decorated and undecorated per-device sections. That is, if the INF file has both install-section-name and install-section-name.nt sections and it has a DDInstall.HW section, it must also have a parallel install-section-name.nt.HW section (if the device or driver requires a .HW section for Windows NT 4.0 and later).

« Последнее редактирование: 02-08-2007 13:09 от Ochkarik » Записан

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

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

« Ответ #7 : 07-08-2007 22:53 » 

Добрый день!

Хочу добавить один маленький хинт. 64-bit decoration можно нафиг отключить (на время разумеется) через реестр,и ставить драйвер спомощю старого (32-разрядного) INF-а.

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

Когда я портировал на 64, то вначале наивно полагал, что этот INF моя главная проблема... а оказалось :fuck:  Улыбаюсь

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

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

« Ответ #8 : 09-08-2007 08:22 » 

aks68,
ха) я в начале обсуждения тоже так подумал... в DDK, про отключение декораций только для Win Serv 2003 сказано. в четвертом посте написал.

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

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

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

« Ответ #9 : 09-08-2007 12:01 » 

Да, про декорацию я проглядел, сорри Скромно так......

А проблема была большая и называлась платформно-независимая-инфраструктура-режима-ядра  Я зол! (тудыть её растудыть!) для Win32/Linux/FreeBSD и еще 3 коммерческих Юниксов.

Указатели передавались туда-сюда, только шум стоял, ктому-же через свой собственный механизм IOCTL. В добавок еще были места в которых производились вычисления в предположении о размерах указателя. Ну и по мелочам то-сё...

Короче мало непоказалось.

С уважением,
Акс.
Записан
Ochkarik
Модератор

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

« Ответ #10 : 10-08-2007 08:08 » 

aks68, жесть...
но для перехода с винды на винду то - вроде особых проблемм не должно быть? ну за исключением разрядности указателей, конечно, но это уж само собой...
все таки inf только поправить, или еще какие подводные камни?

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

постой постой... в линуксе ж, ядро не настолько... похоже? или это речь о программных интерфейсах с приложением?
« Последнее редактирование: 10-08-2007 08:11 от Ochkarik » Записан

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

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

« Ответ #11 : 14-08-2007 06:56 » new

aks68, жесть...
но для перехода с винды на винду то - вроде особых проблемм не должно быть? ну за исключением разрядности указателей, конечно, но это уж само собой...
все таки inf только поправить, или еще какие подводные камни?

мне пока переходить не надо) но один указатель у меня блин используется в структурах IOCTL... указатель на буфер выделенный для приложения. теоретически с ним могут небольшие траблы быть)
когда структуру сочинял речи о 64 разрядах в помине не было) вот и не предусмотрел лишних 4-х байтиков...
По идее недолжно. Microsoft потому и выбрали модель LLP64. Если все написанно генерично (с использованием ихних макросов) то портинг должен пройти на ура.
Только на практике не всё так гладко. В особенности если это большой проект, и какие-то общие части пишут представители других идеологий Ага...


постой постой... в линуксе ж, ядро не настолько... похоже? или это речь о программных интерфейсах с приложением?
Достаточно настолько Улыбаюсь. Сам IOCTL отлавливается штатно, но вот его разбор осуществляется уже общим кодом.


С уважением,
Акс.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines