Здравствуйте, баг, Вы писали:
баг>Здравствуйте, Fredwriter, Вы писали:
F>>Здравствуйте, расскажите пожалуйста об утилите Build из пакета DDK баг>А она точно нужна? Драйвер-то скомпилировать можно и прямо в студии.
Не всякий драйверный код можно скомпилировать из Студии.
Здравствуйте, Fredwriter, Вы писали:
F>Еще пару глупых вопросов: Какое расширение должно быть у MakeFile, у меня .mak, а у source .src.
Никаких расширений у этих файлов быть не должно. Просто makefile, sources и dirs (опционально).
F>В чём может быть проблема, если файл драйвера не компилируется?
Это должно собираться, если в коде нет ошибок и точка входа (функция DriverEntry) определена.
O>>В корне проекта должно быть два файла — makefile и sources. F>Только они? Конечно нет или да.
Ну, еще исходники драйвера, конечно. Был не точен.
Здравствуйте, Fredwriter, Вы писали:
F>Скачать с сайта Microsoft WinDDK 7.1.0.7600, установил, В Пуск -> Все программы его нет и нет ни одного Build Environment. Есть только в папке с WinDDK файл Build.exe? что делать?
Это не нормально, должны быть ярлыки в "Windows Driver Kits/WDK 7600.16385.1/Build Environments".
Но можно сделать их самому, либо написать bat-файл примерно такого содержания:
@echo off
C:\Windows\System32\cmd.exe /k C:\WinDDK\bin\setenv.bat C:\WinDDK\ fre x86 WIN7 no_oacr
C:\Windows\System32\cmd.exe — путь к программе cmd на вашем компьютере.
C:\WinDDK\bin\setenv.bat — найдите этот файл setenv.bat внутри папки с установленным WinDDK.
fre (или chk) — тип билда, Free или Checked соответственно.
x86 (или x64) — целевая архитектура.
WIN7 — целевая операционная система (Windows 7). Да-да, разработка драйверов в Windows
подразумевает разные исполняемые файлы для разных версий операционной системы.
Другие константы: WXP (Windows XP), WNET (Windows Server 2003) и WLH (Windows Vista).
no_oacr — оставьте эту опцию, если не хотите запускать OACR (анализатор кода).
Здравствуйте, расскажите пожалуйста об утилите Build из пакета DDK, я пишу драйвер и не могу понять что она должна сделать. Если DDK установлен корректно, то нужно сделать так: Пуск -> Все программы -> Development Kits -> Windows DDK 2600 -> Build Environments -> или WinXP Free Build Environment или WinXP Checked Build Environment. Если есть MakeFile, то нужно перейти в рабочую директорию командой cd и написать заветное слово Build, запустится утилита Build.exe c установленными переменными окружения и произойдет КОМПИЛЯЦИЯ(сборка) файла драйвера. Вот такие пироги.
Вопрос у меня следующий: (первый раз пользуюсь этой утилитой и не было еще опыта успешного её использования) что должно произойти после использования этой утилиты? У меня только появился файл buildfre.log с одной строчкой:
BUILD: Computing Include file dependencies:.
Я думал, что должен был появится какие-то файлы Sys или еще что нибудь. Подскажите пожалуйста.
Здравствуйте, Fredwriter, Вы писали:
F>Здравствуйте, расскажите пожалуйста об утилите Build из пакета DDK, я пишу драйвер и не могу понять что она должна сделать. Если DDK установлен корректно, то нужно сделать так: Пуск -> Все программы -> Development Kits -> Windows DDK 2600 -> Build Environments -> или WinXP Free Build Environment или WinXP Checked Build Environment. Если есть MakeFile, то нужно перейти в рабочую директорию командой cd и написать заветное слово Build, запустится утилита Build.exe c установленными переменными окружения и произойдет КОМПИЛЯЦИЯ(сборка) файла драйвера. Вот такие пироги. F>Вопрос у меня следующий: (первый раз пользуюсь этой утилитой и не было еще опыта успешного её использования) что должно произойти после использования этой утилиты? У меня только появился файл buildfre.log с одной строчкой: F> BUILD: Computing Include file dependencies:. F>Я думал, что должен был появится какие-то файлы Sys или еще что нибудь. Подскажите пожалуйста.
Значит, так.
В корне проекта должно быть два файла — makefile и sources.
Еще бывают файлы dirs, но мы их пока рассматривать не будем.
Файл makefile очень простой и всегда одинаковый:
!include $(NTMAKEENV)\Makefile.def
Вот и все содержимое.
В файле sources определяются исходники драйвера (файлы .c).
Плюс некоторые опции сборки (подробно это все расписано в WDK).
Например, один из моих файлов sources имеет такое содержание:
Сборка драйвера очень проста — нужно открыть build prompt для целевой системы (например,
WDK/Build Environment/Windows Server 2003/x64 Free Build Environment), затем зайти в
папку проекта и выполнить команду build (возможно, с дополнительными флагами).
После этого, если сборка пройдет успешно, в подпапке с именем типа objfre_wnet_amd64
появятся файлы .sys и .pdb и другие.
Более сложные сценарии включают использование inf-файлов и генерацию/подпись каталогов,
но это отдельная тема.
Здравствуйте, Fredwriter.
F>Тут немного, драйвер пробный из книги, там только функция GetMessage.
Скажи-ка, а эта "книга" — случайно не "программирование драйверов для Windows" некой В.Комиссаровой ?
Если так, то можешь смело выбрасывать ее на помойку.
Это худшее (и вредное), что я читал по разработке драйверов.
Здравствуйте, Fredwriter, Вы писали:
F>Что вы мне посоветуете русского по разработке драйверов?
IMHO лучшая книга данной отрасли — "Программирование с использованием Windows Driver Model" (Уолтер Они).
Есть на русском языке. Очень толковая книга из серии подподушечной (в смысле, должна лежать под подушкой).
Еще можно (для разнообразия) почитать книгу Солдатова, хотя там почти ничего нет про обработку IRP (!).
Из полезных — "Windows 200 Device Driver Book, A Guide For Programmers" и туториалы CmdTutRu.
Все это легко найти в Гугле.
Много полезных материалов есть на MSDN и WHDC, а также на OsrOnline (там надо будет зарегистрироваться).
Теперь о компиляции.
Когда что-то не идет, нужно смотреть файлы .wrn и .err в папке проекта.
У меня написало "Cannot open include file: MyDriverMessages.h".
Здравствуйте, okman, Вы писали:
O>Значит, так. O>В корне проекта должно быть два файла — makefile и sources. O>Еще бывают файлы dirs, но мы их пока рассматривать не будем.
O>Файл makefile очень простой и всегда одинаковый: O>
!include $(NTMAKEENV)\Makefile.def
O>Вот и все содержимое.
O>В файле sources определяются исходники драйвера (файлы .c). O>Плюс некоторые опции сборки (подробно это все расписано в WDK). O>Например, один из моих файлов sources имеет такое содержание: O>
O>Сборка драйвера очень проста — нужно открыть build prompt для целевой системы (например, O>WDK/Build Environment/Windows Server 2003/x64 Free Build Environment), затем зайти в O>папку проекта и выполнить команду build (возможно, с дополнительными флагами). O>После этого, если сборка пройдет успешно, в подпапке с именем типа objfre_wnet_amd64 O>появятся файлы .sys и .pdb и другие.
O>Более сложные сценарии включают использование inf-файлов и генерацию/подпись каталогов, O>но это отдельная тема.
Спасибо огромное за информацию. Так как у меня не удачно откомпилировался драйвер у меня не появилось никаких файлов или наоборот.
Еще пару глупых вопросов: Какое расширение должно быть у MakeFile, у меня .mak, а у source .src.
Вот текст моего файла Source:
[g]TARGETNAME = MYDRIVER
TARGETTYPE = DRIVER
#DRIVERTYPE = WDM
TARGETPATH = obj
SOURCES = MyDriver.c MyDriverMessages.rc
C_DEFINES = -DUNICODE -DSTRICT
[/g]
В чём может быть проблема, если файл драйвера не компилируется? O>В корне проекта должно быть два файла — makefile и sources.
Только они? Конечно нет или да.
Здравствуйте, okman, Вы писали:
O>P.S. O>Windows DDK 2600 — очень древний DDK. O>На сайте Microsoft давно уже доступны для скачивания более свежие версии (у меня 7600.1).
Спасибо скачаю может быть, сначала хочу что-бы драйвер откомпилировался.
O>Это должно собираться, если в коде нет ошибок и точка входа (функция DriverEntry) определена.
Спасибо, буду искать ошибки в коде. O>Это должно собираться, если в коде нет ошибок и точка входа (функция DriverEntry) определена.
Всё определено, то есть функция DriverEntry есть в исходнике MyDriver.c.
Я использовал WinXP Checked Build Environment и WinXP Free Build Environment.
O>Для сборки открыть нужную консоль (Build Environment), зайти в папку C:\MyProjects\MyDriver и выполнить build.
Это всё я уже сделал много раз еще до того как создал здесь — на RSDN сообщение. Просто никаких файлов не появлялось поэтому я заволновался.
O>Это должно собираться, если в коде нет ошибок и точка входа (функция DriverEntry) определена.
O>>>В корне проекта должно быть два файла — makefile и sources.
O>Ну, еще исходники драйвера, конечно. Был не точен.
Вот что пишет мой Build:
BUILD: Object root set to: ==> objchk
BUILD: Adding /Y to COPYCMD so xcopy ops won't hang.
BUILD: /i switch ignored
BUILD: Using 2 child processes
BUILD: Compile and Link for i386
BUILD: Loading C:\WINDDK\2600\build.dat...
BUILD: Computing Include file dependencies:
BUILD: Done
При этом ничего кроме .log файла не появляется.
Мои рецепты предназначены только для WDK версии от 6000 и выше.
Может, поэтому что-то у Вас и не работает.
Но справедливости ради замечу, что DDK 2600 — это тулкит эпохи Windows 2000,
пора уже переходить на более новый инструментарий.
Здравствуйте, Fredwriter, Вы писали:
F>Здравствуйте, расскажите пожалуйста об утилите Build из пакета DDK
А она точно нужна? Драйвер-то скомпилировать можно и прямо в студии.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Fredwriter.
O>Мои рецепты предназначены только для WDK версии от 6000 и выше. O>Может, поэтому что-то у Вас и не работает. O>Но справедливости ради замечу, что DDK 2600 — это тулкит эпохи Windows 2000, O>пора уже переходить на более новый инструментарий.
Скачать с сайта Microsoft WinDDK 7.1.0.7600, установил, В Пуск -> Все программы его нет и нет ни одного Build Environment. Есть только в папке с WinDDK файл Build.exe? что делать?
Re[8]: Компиляция драйвера
От:
Аноним
Дата:
27.10.11 11:08
Оценка:
Здравствуйте, okman, Вы писали:
O>Это не нормально, должны быть ярлыки в "Windows Driver Kits/WDK 7600.16385.1/Build Environments". O>Но можно сделать их самому, либо написать bat-файл примерно такого содержания: O>
O>@echo off
O>C:\Windows\System32\cmd.exe /k C:\WinDDK\bin\setenv.bat C:\WinDDK\ fre x86 WIN7 no_oacr
O>C:\Windows\System32\cmd.exe — путь к программе cmd на вашем компьютере. O>C:\WinDDK\bin\setenv.bat — найдите этот файл setenv.bat внутри папки с установленным WinDDK. O>fre (или chk) — тип билда, Free или Checked соответственно. O>x86 (или x64) — целевая архитектура. O>WIN7 — целевая операционная система (Windows 7). Да-да, разработка драйверов в Windows O>подразумевает разные исполняемые файлы для разных версий операционной системы. O>Другие константы: WXP (Windows XP), WNET (Windows Server 2003) и WLH (Windows Vista). O>no_oacr — оставьте эту опцию, если не хотите запускать OACR (анализатор кода).
Сделал как вы написали, консолька появилась, затем просмотрел все мои файлы, нашел несколько ошибок, затем попробовал скомпилировать, та же история. Может быть вы мне поможете?
Вот текст с кодом драйвера на Си:
Тут немного, драйвер пробный из книги, там только функция GetMessage. Для неё и писался. Вот скомпилить бы его.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Fredwriter.
F>>Тут немного, драйвер пробный из книги, там только функция GetMessage.
O>Скажи-ка, а эта "книга" — случайно не "программирование драйверов для Windows" некой В.Комиссаровой ? O>Если так, то можешь смело выбрасывать ее на помойку. O>Это худшее (и вредное), что я читал по разработке драйверов.
Что вы мне посоветуете русского по разработке драйверов?
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Fredwriter.
F>>Тут немного, драйвер пробный из книги, там только функция GetMessage.
O>Скажи-ка, а эта "книга" — случайно не "программирование драйверов для Windows" некой В.Комиссаровой ? O>Если так, то можешь смело выбрасывать ее на помойку. O>Это худшее (и вредное), что я читал по разработке драйверов.
Вы угадали это действительно В.Комиссарова
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Fredwriter, Вы писали:
F>>Что вы мне посоветуете русского по разработке драйверов?
O>IMHO лучшая книга данной отрасли — "Программирование с использованием Windows Driver Model" (Уолтер Они). O>Есть на русском языке. Очень толковая книга из серии подподушечной (в смысле, должна лежать под подушкой). O>Еще можно (для разнообразия) почитать книгу Солдатова, хотя там почти ничего нет про обработку IRP (!). O>Из полезных — "Windows 200 Device Driver Book, A Guide For Programmers" и туториалы CmdTutRu. O>Все это легко найти в Гугле. O>Много полезных материалов есть на MSDN и WHDC, а также на OsrOnline (там надо будет зарегистрироваться).
O>Теперь о компиляции. O>Когда что-то не идет, нужно смотреть файлы .wrn и .err в папке проекта. O>У меня написало "Cannot open include file: MyDriverMessages.h".
Файл MyDriverMessages.h это файл, созданный утилитой mc из файла MyDriverMessages.mc. Вот текст файла MeDriverMessages.mc:
[g]
MessageID = 1
Severity = Informational
SymbolicName = MSG_DRIVER_ENTRY
Language = English
Driver Entry
.
MessageID = 2
Severity = Informational
SymbolicName = MSG_CREATE
Language = English
Create
.
MessageID = 3
Severity = Informational
SymbolicName = MSG_READ
Language = English
Read
.
MessageID = 4
Severity = Informational
SymbolicName = MSG_WRITE
Language = English
Write
.
MessageID = 5
Severity = Informational
SymbolicName = MSG_SHUTDOWN
Language = English
Shutdown
.
MessageID = 6
Severity = Informational
SymbolicName = MSG_IOCTL
Language = English
IoCtl
.
MessageID = 7
Severity = Informational
SymbolicName = MSG_DRIVERUNLOAD
Language = English
Unload
.
[/g]
К сожалению, не могу отвечать на все Ваши сообщения (после определенной черты это даже вредно).
Ответы на многие, если не все, вопросы есть в документации WDK, а также в синтаксисе языка C,
который, видимо, у Вас где-то нарушается. Если трудности возникают на стадии компиляции программы,
написанной на C, то лучше отложить драйверную разработку и освежить знания в этой области.
А вот с интересными и нетривиальными проблемами милости прошу.