Ochkarik
|
|
« : 25-03-2008 13:29 » |
|
наткнулся на пару ссылок, думаю будут полезны тем кто до сих пор мучается с утилитой build.exe и 70-килобайтным мейк-файлом из DDK настройки проекта Microsoft Visual Studio для сборки драйвера: Building NT kernel mode drivers in MS Visual C 6.0 http://alter.org.ua/ru/docs/nt_kernel/vc6_proj/- мельком проглядел, вроде похоже на правду. Building NT kernel mode drivers in MS Visual Studio 8.0 (VS 2005) http://alter.org.ua/ru/docs/nt_kernel/vc8_proj/и то что я собственно сам искал: исправление ошибок компляции проекта портированного из предыдущей VC6-VC2003 версии в VS2005: "Портирование проекта драйвера из VC6 в VC8 с DDK 2003 http://alter.org.ua/ru/docs/nt_kernel/vc6_to_vc8/(VC8 - это VC2005. 7.1 - 2003 соответственно) Building NT kernel mode drivers in MS Visual Studio 8.0 (VS 2005) for x64 (AMD64) platform: http://alter.org.ua/ru/docs/nt_kernel/vc8_x64_proj/на тех же страницах еще несколько весьма полезных и интересных ссылок... изучаю) PS добавил из других постов: DDKWizard - устарел. рекомендуют замену: VisualDDK VisualDDK is a Visual Studio extension that allows developing and debugging Windows kernel-mode drivers.Here are the main highlights: - Provides a wizard for creating driver projects - Allows debugging drivers directly from Visual Studio just like the user-mode applications - Maps error messages and enables IntelliSense - Automatically installs drivers on a remote machine over TCP/IP - Supports a custom debug transport for very fast kernel-mode debugging with VirtualBox and VMWare
|
|
« Последнее редактирование: 09-08-2013 09:18 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
DrGluck
|
|
« Ответ #1 : 04-04-2008 05:54 » |
|
Спасибо за ссылки, это интересно. У меня как раз драйвер при переходе с 2003 на 2005 не компилится. Будем читать...
|
|
|
Записан
|
Good user - dead user
|
|
|
DrGluck
|
|
« Ответ #2 : 10-06-2008 04:46 » |
|
Ochkarik Это только у меня при настройках под VS2005 среда не показывает declaration/definition из файлов DDK? Или так и должно быть?
З.Ы. Компилирует нормально.
|
|
|
Записан
|
Good user - dead user
|
|
|
Ochkarik
|
|
« Ответ #3 : 10-06-2008 07:21 » |
|
у меня 2005-я.нормально все. правда не уверен что мои настройки - повторяют описанные на 100%.. попробуй все лишние файлы удалить(ручками! и *.ncb) и перекомпилировать заново.
|
|
« Последнее редактирование: 22-10-2008 15:11 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
DrGluck
|
|
« Ответ #4 : 10-06-2008 11:25 » |
|
Угу, сенкс, заработало. Взял ихний template и удалил ncb.
|
|
|
Записан
|
Good user - dead user
|
|
|
Termit
Гость
|
|
« Ответ #5 : 25-02-2009 21:57 » |
|
Это конечно замечательно, но как настроить VS2005 на KMDF?
|
|
|
Записан
|
|
|
|
DrGluck
|
|
« Ответ #6 : 06-05-2009 11:39 » |
|
Нашел для себя способ как почти не заморачиваться с настройками VS. Выглядит страшно и длинно, но только на первый взгляд. Родилось, когда после очередной переустановки VS не сумел правильно настроить. Сначала решил не париться и билдить из консоли, а потом немного автоматизировал процесс.
Шаг 1. Создаем переменную окружения DDKPATH="C:\WINDDK\DDK2008". Ну или куда там ставили DDK. Я начал юзать версию 2008, т.к. там меньше инклудов надо делать.
Шаг 2. Создаем в VS новый проект типа MAKEFILE.
Шаг 3. Берем проект Stupid товарища W. Oney. От проекта нам понадобятся только файлы *.cpp, *.h, makefile, sources, driver.rc. Включаем это все в созданный проект. Подгоняем под себя, т.е. правим названия, тэги, DRIVERNAME и т.д.
Шаг 4. Настраиваем проект. В свойствах прописываем: Для Release и Debug конфигураций: Include Search Path = "$(DDKPATH)\inc\crt\";"$(DDKPATH)\inc\api\";"$(DDKPATH)\inc\ddk\"
Для Debug конфигурации: Build Command Line = .\setenv.bat $(ProjectDir) $(DDKPATH) chk WXP Output Directory = .\objchk_wxp_x86\i386 Intermediate Directory = .\objchk_wxp_x86\i386
Для Release конфигурации: Build Command Line = .\setenv.bat $(ProjectDir) $(DDKPATH) fre WXP Output Directory = .\objfre_wxp_x86\i386 Intermediate Directory = .\objfre_wxp_x86\i386
Шаг 5. Копируем из DDKPATH\BIN файл setenv.bat к себе в проект. Открываем батник и вставляем строки:
в самое начало после строки if NOT "%DDKBUILDENV%"=="" goto :AlreadyDefinedError вставляем
set PROJDIR=%1 shift
в самый конец перед exit /b 0 вставляем
cd /d %PROJDIR% build
Шаг 6. ? ? ? ? ? ? ?
Шаг 7. PROFIT
Собственно это все. У нас готова рыба драйвера. Такую заготовку можно использовать при создании нового драйвера. Можно переносить проект на другую машину, главное прописать правильно DDKPATH. Никаких настроек VS не потребуется. Я думаю, что можно взять makefile и из DDK, но у Они уже все сделано.
По поводу "Build Command Line = .\setenv.bat $(ProjectDir) $(DDKPATH) fre WXP". Таким образом можно создать конфигурации для всех вариантов билда, который могут понадобиться. Например для Server 2008 "Build Command Line = .\setenv.bat $(ProjectDir) $(DDKPATH) fre x64 WLH". И т.д., метода ясна.
Главный плюс метода - драйвер билдится оригинальной утилитой build из DDK. Вывод инфы билда, кстати, попадает в окно вывода VS. При клике на ошибку VS переходит на соответствующую строку. Все фишки типа Definition/Declaration и т.д. работают.
Недостатком является необходимость добавлять каждый новый файл *.cpp в sources. Ну и при компиляции в окно VS почему то выводится слишком много информации, хорошо бы с этим разобраться.
Собственно, хотелось бы услышать комментарии, имеет ли такой метод право на существование. Может кто-нибудь сумеет поправить/дополнить?
з.ы. Весьма рассчитываю на комментарий товарища Ochkarik.
|
|
|
Записан
|
Good user - dead user
|
|
|
DrGluck
|
|
« Ответ #7 : 18-05-2009 11:00 » |
|
Ха, оказывается все уже украдено до нас! Гуглите такую штуку - DDKBuild. И будет всем счастье.
|
|
|
Записан
|
Good user - dead user
|
|
|
Ochkarik
|
|
« Ответ #8 : 18-05-2009 18:30 » |
|
тоже вариант) правда... хм. все таки нет в опциях компиляции ничего сложного... я так понимаю и build то нужен был только потому, что позволял код драйвера в блокноте писать. а когда возможности той же VS хватает на все это... странно пользоваться батником... я лучше пару дней на изучение опций компилятора потрачу и сам проект настрою)
PS чет я вроде отвечал на предыдущее сообщение, да видимо не отправилось тогда. вкратце - тоже вариант, рабочий.. но мне мой - ближе) странно что у вас с настройками студии не срослось. недавно переезжал на новую машину с нуля. проблем - ноль.
PPS я смотрю DDKbuild так же WDF поддерживает.... хотя чего там поддерживать в общем то))
|
|
« Последнее редактирование: 18-05-2009 18:43 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
DrGluck
|
|
« Ответ #9 : 19-05-2009 12:51 » |
|
1. Мой вариант позволяет писать под любой версией студии. 2. Всякие W. Oney и прочие, не рекомендуют собирать драйвер утилитой build не из DDK. 3. Я, в принципе, и не настаиваю, просто делюсь опытом.
з.ы. Попробовал DDKBuild, удобно (во всяком случае пока), поддерживается 2008 студия.
з.з.ы. Кстати, вопрос, вариант с buildом из VS правильно обрабатывает секции LOCKED/PAGED кода/данных?
|
|
|
Записан
|
Good user - dead user
|
|
|
Ochkarik
|
|
« Ответ #10 : 19-05-2009 21:03 » |
|
я в общем тоже не настаиваю))) способ вполне нормальный. в чем то может быть даже удобнее... честно говоря build пробовал только под win95) а почему бы ему неправильно секции определять? их вручную, при помощи pragma расставляют. почему Они не рекомендует - не совсем понимаю... был момент когда в DDK был более старый компилятор чем в студии, в котором координально поменялось несколько свичей компилятора - может поэтому. при правильных настройках - VS секции генерит правильно. проверял. и потом секции там в любом случае вручную расставляются.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
kasya82
Гость
|
|
« Ответ #11 : 29-05-2009 21:28 » |
|
Сам недавно начал заниматься драйверами. Спасибо DrGluck за интересный метод. Предлагаю к нему некоторые изменения: собственно идея в том, чтобы никуда не копировать setenv.bat и не изменять его внутри. Для этого надо в build command line написать 3 строки кода: call $(WDK_PATH)\bin\setenv.bat $(WDK_PATH) wxp cd /d "$(ProjectDir)" build где WDK_PATH - это переменная окружения где находиться WDK
|
|
|
Записан
|
|
|
|
kasya82
Гость
|
|
« Ответ #12 : 29-05-2009 22:20 » |
|
да, кстати если хотите получить output в студии такой же как получается в окне командной строки при сборке драйвера, перед указанными выше командами впишите set VS_UNICODE_OUTPUT= всё дело в том, что студия создаёт некоторые специальные переменные окружения, как например эта, в результате меняется функциональность cl.exe и link.exe и они начинают выдавать output в окно студии вместо того чтобы сливать всё в лог-файл данной командой производиться очистка переменной, которую установила студия, в результате в output-e студии будет меньше лишней инфы, и легче находить сообщения об ошибках, например
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #13 : 31-05-2009 06:29 » |
|
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
DrGluck
|
|
« Ответ #14 : 11-06-2009 09:47 » |
|
To kasya82: сенкс, попробую. Просто я не заморачивался никогда с командами студии, а видимо зря. Надо учить матчасть.
А что касаемо секций, то я тут проверил одну штуку. Две функции заявлены как PAGED и NONPAGED, а лежат в одной странице. Отсюда и вопрос. Такая штука возникает на любом проекте В. Они, не важно чем он скомпилен. У мелкософтовских примеров все в порядке. DDKBuild не проверял.
Добавлено через 1 минуту и 39 секунд: Ochkarik. А где DDKBuild WDF поддерживает? Чегото я не увидел пока. А хочется попробовать.
|
|
« Последнее редактирование: 11-06-2009 09:49 от DrGluck »
|
Записан
|
Good user - dead user
|
|
|
Ochkarik
|
|
« Ответ #15 : 11-06-2009 11:44 » |
|
DDKBUILD - Integrating the Windows DDK with Visual Studio .Net The latest released version is 3.13. This version adds quiet mode - the script attempts to reduce all output to stdout to the minimum, simplifying the use of ddkbuild in automated build procedures. Credit goes to Beverly Brown at Mercury Computer for the quiet mode implementation. The Vista DDK (build 5270) is supported. WDF (KMDF1.0) is released and 3.13 supports that as well. :: WDF Build Support - (BETA) :: ============================ :: needs WDF_ROOT and :: WDF_DDK set in environment. :: if /I "%1" EQU "-WDF" ( ...
|
|
« Последнее редактирование: 11-06-2009 11:52 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
DrGluck
|
|
« Ответ #16 : 09-07-2009 05:27 » |
|
Кстати, можно прикрутить к этому делу еще и установку драйвера через dev_con, например. У меня по команде Clean так и происходит. Получилось довольно удобно.
|
|
|
Записан
|
Good user - dead user
|
|
|
chaika_sv
|
|
« Ответ #17 : 03-06-2010 05:41 » |
|
Никто не пробовал настроить ddkbuild для работы с VS2008?
|
|
|
Записан
|
|
|
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #20 : 20-06-2012 06:45 » |
|
В NuMega Driver Studio была утилита SrcToVcproj, генерирующая из файла sources полноправный проект для VS 2005 Если надо, могу куда либо выложить. Запускать лужчше всего из консоли, где УЖЕ установлен (W)DDK environment. Тогда будет "собран" собираемый проект, но "доработать" напильником его все равно надо, иключив из него всякие "левые" вызовы numega утилит в post build step
|
|
|
Записан
|
|
|
|
|